Re: cdevpriv and mmap(2)




On Sun, 14 Sep 2008, Kostik Belousov wrote:

When implementing cdevpriv, I completeley missed the support for d_mmap() driver method. This method is called by the kernel (at least) twice: one time to validate the mmaped region and protection mode (see vm/device_pager.c:dev_pager_alloc()), and second time to obtain the physical address when serving page fault (see dev_pager_getpages()).

Support for cdevpriv for the first call(s) is trivial, and is implemented by the patch below. Second calls are much harder and essentially require attaching cdevpriv bookkeeping data to the struct vm_map_entry. In fact, I am not sure whether this support for the second time calls is needed at all in real usage.

I Cc:ed people that pointed me to the issue, please evaluate the patch against your needs. I think I will commit it shortly after your feedback. On the other hand, I would think about implementing full support for d_mmap only if actually needed.

I'm not really sure that these changes "make sense" given the way our device pager works right now. My understanding is that most consumers of cdevpriv use it in order to provide session-centric device nodes as a cleaner alternative to cloning. However, even with your change, it's not possible to support session-centric memory mapping of devices as the memory map and device pager code assumes there is one VM object for each device, and hence all pages mapped independently from different file descriptors on the same device are from the same set of pages (and hence in the same VM object page cache). In order to implement session-centric semantics, I think it's actually quite a bit more complicated than just adding vm_map_entry book-keeping -- we also need to have a different VM object for each session.

And, arguably, we need a more mature device_pager that understands that pages might someday no longer be associated with a device due to that device being removed...

Robert N M Watson
Computer Laboratory
University of Cambridge



Thanks !

diff --git a/sys/vm/vm_mmap.c b/sys/vm/vm_mmap.c
index 7e6b04f..c3f08b0 100644
--- a/sys/vm/vm_mmap.c
+++ b/sys/vm/vm_mmap.c
@@ -391,8 +391,10 @@ map:
goto done;
}

+ td->td_fpop = fp;
error = vm_mmap(&vms->vm_map, &addr, size, prot, maxprot,
flags, handle_type, handle, pos);
+ td->td_fpop = NULL;
#ifdef HWPMC_HOOKS
/* inform hwpmc(4) if an executable is being mapped */
if (error == 0 && handle_type == OBJT_VNODE &&

_______________________________________________
freebsd-current@xxxxxxxxxxx mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscribe@xxxxxxxxxxx"



Relevant Pages

  • cdevpriv and mmap(2)
    ... d_mmapdriver method. ... Support for cdevpriv for the first callis trivial, ... essentially require attaching cdevpriv bookkeeping data to the struct ...
    (freebsd-current)
  • Re: Oracle Directconnect (ODC) Security - is it ok?
    ... The following information about session security for Expertcity's ... DesktopStreaming allows a support agent to see the end user's screen ... > and select the appropriate engineer from a dropdown list. ...
    (comp.security.misc)
  • RE: ASPX page cant see Session created by WCF with XBAP client
    ... As for the setup ASP.NET seesion in WCF, ... Also, based on my understanding, you're using ASP.NET session to store ... Microsoft MSDN Online Support Lead ... where an initial response from the community or a Microsoft Support ...
    (microsoft.public.dotnet.framework.aspnet.webservices)
  • Re: Win32_NetworkConnection closes connectios in remote monitoring?
    ... There's also a difference between hacking into a session that's already established and creating a new one. ... I've reproduced the issue on my side that the mapped driver shows "Unavailable" status when it's queried from a remote computer with the Win32_NetworkConnection class. ... In "computer 2", query the local mapped drivers' status with wbemtest, and it returns the "OK" status for the newly created mapped driver. ... We welcome your comments and suggestions about how we can improve the support we provide to you. ...
    (microsoft.public.win32.programmer.wmi)
  • CRT 5.2
    ... extensive session management and customization features. ... support for scalable line-drawing fonts and character attributes ... For a secure terminal emulator for SSH1/SSH2, ...
    (comp.software.shareware.announce)