Date: Sat, 16 Sep 2006 01:50:54 +0800 From: LI Xin <delphij@delphij.net> To: John Baldwin <jhb@freebsd.org> Cc: freebsd-arch@freebsd.org Subject: Re: How to map a page with userland program? Message-ID: <450AE7FE.5000905@delphij.net> In-Reply-To: <200609151251.16371.jhb@freebsd.org> References: <450AB80B.1050100@delphij.net> <200609151035.12069.jhb@freebsd.org> <450AC4FE.6070303@delphij.net> <200609151251.16371.jhb@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
John Baldwin wrote: > On Friday 15 September 2006 11:21, LI Xin wrote: >> John Baldwin wrote: >>> On Friday 15 September 2006 10:26, LI Xin wrote: >>>> Dear folks, >>>> >>>> Is there a continent and MI way to map a kernel page into userland >>>> address space under the same virtual address? It seems that this can be >>>> implemented through some routines in MD part of pmap, but is it possible >>>> to use higher level VM routines to do the job? >>> Not to the same userland virtual address. Why do you need the same >>> virtual address anyway? If it's for pointers use offsets relative to >>> the start of the page instead. >> That would make it easier to implement some sort of VSYSCALL, which is >> in fact executed in userland. Or, is there any better way? :-) > > If you want to stick code in the page, make the code PIC, the same as is done > for shared libraries. Alternatively, if you wanted to be very, very evil and > can have the page read-only once it is initialized, flip the user/supervisor > bit in the kernel PTE for that page such that it is treated as a user page > rather than a kernel page (even though it's in KVA), and then userland > processes can access that page via it's kernel VA. Making the code PIC would > probably be better though. I see... So, what if I want to make some data available to userland? Is flipping the user/supervisor bit the only way? Cheers, -- Xin LI <delphij@delphij.net> http://www.delphij.net/ FreeBSD - The Power to Serve!
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?450AE7FE.5000905>