svn commit: r283998 - in head/sys: dev/drm dev/drm2 fs/devfs kern sys vm

John Baldwin jhb at freebsd.org
Sat Aug 1 05:32:34 UTC 2015


On Thursday, July 30, 2015 09:11:54 PM Oliver Pinter wrote:
> Hi John!
> 
> On Thu, Jun 4, 2015 at 9:41 PM, John Baldwin <jhb at freebsd.org> wrote:
> > Author: jhb
> > Date: Thu Jun  4 19:41:15 2015
> > New Revision: 283998
> > URL: https://svnweb.freebsd.org/changeset/base/283998
> >
> > Log:
> >   Add a new file operations hook for mmap operations.  File type-specific
> >   logic is now placed in the mmap hook implementation rather than requiring
> >   it to be placed in sys/vm/vm_mmap.c.  This hook allows new file types to
> >   support mmap() as well as potentially allowing mmap() for existing file
> >   types that do not currently support any mapping.
> >
> >   The vm_mmap() function is now split up into two functions.  A new
> >   vm_mmap_object() function handles the "back half" of vm_mmap() and accepts
> >   a referenced VM object to map rather than a (handle, handle_type) tuple.
> >   vm_mmap() is now reduced to converting a (handle, handle_type) tuple to a
> >   a VM object and then calling vm_mmap_object() to handle the actual mapping.
> >   The vm_mmap() function remains for use by other parts of the kernel
> >   (e.g. device drivers and exec) but now only supports mapping vnodes,
> >   character devices, and anonymous memory.
> >
> >   The mmap() system call invokes vm_mmap_object() directly with a NULL object
> >   for anonymous mappings.  For mappings using a file descriptor, the
> >   descriptors fo_mmap() hook is invoked instead.  The fo_mmap() hook is
> >   responsible for performing type-specific checks and adjustments to
> >   arguments as well as possibly modifying mapping parameters such as flags
> >   or the object offset.  The fo_mmap() hook routines then call
> >   vm_mmap_object() to handle the actual mapping.
> >
> >   The fo_mmap() hook is optional.  If it is not set, then fo_mmap() will
> >   fail with ENODEV.  A fo_mmap() hook is implemented for regular files,
> >   character devices, and shared memory objects (created via shm_open()).
> >
> >   While here, consistently use the VM_PROT_* constants for the vm_prot_t
> >   type for the 'prot' variable passed to vm_mmap() and vm_mmap_object()
> >   as well as the vm_mmap_vnode() and vm_mmap_cdev() helper routines.
> >   Previously some places were using the mmap()-specific PROT_* constants
> >   instead.  While this happens to work because PROT_xx == VM_PROT_xx,
> >   using VM_PROT_* is more correct.
> >
> >   Differential Revision:        https://reviews.freebsd.org/D2658
> >   Reviewed by:  alc (glanced over), kib
> >   MFC after:    1 month
> >   Sponsored by: Chelsio
> >
> > Modified:
> >   head/sys/dev/drm/drm_bufs.c
> >   head/sys/dev/drm2/drm_bufs.c
> >   head/sys/fs/devfs/devfs_vnops.c
> >   head/sys/kern/subr_uio.c
> >   head/sys/kern/uipc_shm.c
> >   head/sys/kern/vfs_vnops.c
> >   head/sys/sys/file.h
> >   head/sys/sys/mman.h
> >   head/sys/vm/vm_extern.h
> >   head/sys/vm/vm_mmap.c
> >
> 
> > ... patch trimmed...
> 
> When plan you to MFC this change to 10-STABLE?

There's a regression reported by sbruno@ that needs to be resolved before it
can be merged.  I might also need to employ an extra hack to preserve the ABI
(e.g. adding a new flag that has to be set in the fileops to say that the
fo_mmap field is present like was done for fo_truncate).

-- 
John Baldwin


More information about the svn-src-all mailing list