freebsd-dev/sys/vm
John Baldwin 7077c42623 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
2015-06-04 19:41:15 +00:00
..
_vm_radix.h On all the architectures, avoid to preallocate the physical memory 2013-08-09 11:28:55 +00:00
default_pager.c Place VM objects on the object list when created and never remove them. 2015-05-08 19:43:37 +00:00
device_pager.c Place VM objects on the object list when created and never remove them. 2015-05-08 19:43:37 +00:00
memguard.c Add comments about CTLFLAG_RDTUN vs. TUNABLE_INT_FETCH. 2015-03-26 05:20:18 +00:00
memguard.h Replace kernel virtual address space allocation with vmem. This provides 2013-08-07 06:21:20 +00:00
phys_pager.c Place VM objects on the object list when created and never remove them. 2015-05-08 19:43:37 +00:00
pmap.h Change pmap_enter(9) interface to take flags parameter and superpage 2014-08-08 17:12:03 +00:00
redzone.c Pull in r267961 and r267973 again. Fix for issues reported will follow. 2014-06-28 03:56:17 +00:00
redzone.h
sg_pager.c Place VM objects on the object list when created and never remove them. 2015-05-08 19:43:37 +00:00
swap_pager.c Place VM objects on the object list when created and never remove them. 2015-05-08 19:43:37 +00:00
swap_pager.h Do not map the swap i/o pbufs if the geom provider for the swap 2013-03-19 14:39:27 +00:00
uma_core.c CALLOUT_MPSAFE has lost its meaning since r141428, i.e., for more than ten 2015-05-22 17:05:21 +00:00
uma_dbg.c - Add a per-zone lock for zones without kegs. 2013-06-20 19:08:12 +00:00
uma_dbg.h
uma_int.h Revert r281451. It causes a panic/hang early in boot for a number of 2015-04-24 17:03:53 +00:00
uma.h The vmem callback to reclaim kmem arena address space on low or 2015-05-09 20:08:36 +00:00
vm_extern.h Add a new file operations hook for mmap operations. File type-specific 2015-06-04 19:41:15 +00:00
vm_fault.c Do not sleep waiting for the MAP_ENTRY_IN_TRANSITION state ending with 2015-04-28 08:20:23 +00:00
vm_glue.c Add kernel option KSTACK_USAGE_PROF to sample the stack depth on 2014-10-04 18:38:14 +00:00
vm_init.c Pull in r267961 and r267973 again. Fix for issues reported will follow. 2014-06-28 03:56:17 +00:00
vm_kern.c Fix multiple incorrect SYSCTL arguments in the kernel: 2014-10-21 07:31:21 +00:00
vm_kern.h - Add a statically allocated memguard arena since it is needed very early 2013-08-13 22:40:43 +00:00
vm_map.c Add kern.racct.enable tunable and RACCT_DISABLED config option. 2015-04-29 10:23:02 +00:00
vm_map.h Oops. vm_map_simplify_entry() is used by mac_proc_vm_revoke_recurse(), so 2014-09-08 02:25:01 +00:00
vm_meter.c Place VM objects on the object list when created and never remove them. 2015-05-08 19:43:37 +00:00
vm_mmap.c Add a new file operations hook for mmap operations. File type-specific 2015-06-04 19:41:15 +00:00
vm_object.c Provide vnode in memory map info for files on tmpfs 2015-06-02 18:37:04 +00:00
vm_object.h Provide vnode in memory map info for files on tmpfs 2015-06-02 18:37:04 +00:00
vm_page.c Document vm_page_alloc_contig()'s support for the VM_ALLOC_NODUMP option. 2015-05-30 23:37:47 +00:00
vm_page.h Add flag VM_ALLOC_NOWAIT for vm_page_grab() that prevents sleeping and 2014-12-22 09:02:21 +00:00
vm_pageout.c The vmem callback to reclaim kmem arena address space on low or 2015-05-09 20:08:36 +00:00
vm_pageout.h Move what remains of vm/vm_contig.c into vm/vm_pageout.c, where similar 2012-07-18 05:21:34 +00:00
vm_pager.c o Enhance vm_pager_free_nonreq() function: 2015-03-17 19:19:19 +00:00
vm_pager.h o Enhance vm_pager_free_nonreq() function: 2015-03-17 19:19:19 +00:00
vm_param.h Rename global cnt to vm_cnt to avoid shadowing. 2014-03-22 10:26:09 +00:00
vm_phys.c Add initial memory locality cost awareness to the VM, and include 2015-05-08 00:56:56 +00:00
vm_phys.h oops - how'd i miss this. Sorry! 2015-05-08 06:02:23 +00:00
vm_radix.c Pull in r267961 and r267973 again. Fix for issues reported will follow. 2014-06-28 03:56:17 +00:00
vm_radix.h Eliminate a redundant parameter to vm_radix_replace(). 2013-12-08 20:07:02 +00:00
vm_reserv.c Correct an off-by-one error in vm_reserv_reclaim_contig() that results in 2015-04-11 22:57:13 +00:00
vm_reserv.h Refactor vm_page_alloc()'s interactions with vm_reserv_alloc_page() and 2013-05-12 16:50:18 +00:00
vm_unix.c Add kern.racct.enable tunable and RACCT_DISABLED config option. 2015-04-29 10:23:02 +00:00
vm_zeroidle.c Pull in r267961 and r267973 again. Fix for issues reported will follow. 2014-06-28 03:56:17 +00:00
vm.h rename scheduler->swapper and SI_SUB_RUN_SCHEDULER->SI_SUB_LAST 2013-07-24 09:45:31 +00:00
vnode_pager.c Satisfy vm_object uma zone destructor requirements after r282660 when 2015-05-10 08:21:03 +00:00
vnode_pager.h Merge from projects/sendfile: 2014-11-23 12:01:52 +00:00