freebsd-nq/sys/vm
Konstantin Belousov afe55ca373 Implement 'fast path' for the vm page fault handler. Or, it could be
called a scalable path.  When several preconditions hold, the vm
object lock for the object containing the faulted page is taken in
read mode, instead of write, which allows parallel faults processing
in the region.

Namely, the fast path is taken when the faulted page already exists
and does not need copy on write, is already fully valid, and not busy.
For technical reasons, fast path is avoided when the fault is the
first write on the vnode object, or when the fault is for wiring or
debugger read or write.

On the fast path, pmap_enter(9) is passed the PMAP_ENTER_NOSLEEP flag,
since object lock is kept.  Pmap might fail to create the entry, in
which case the fallback to slow path is performed.

Reviewed by:	alc
Tested by:	pho (previous version)
Hardware provided and hosted by:	The FreeBSD Foundation and
	 Sentex Data Communications
Sponsored by:	The FreeBSD Foundation
MFC after:	2 week
2014-08-15 07:30:14 +00:00
..
_vm_radix.h
default_pager.c
device_pager.c
memguard.c Pull in r267961 and r267973 again. Fix for issues reported will follow. 2014-06-28 03:56:17 +00:00
memguard.h
phys_pager.c
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
swap_pager.c
swap_pager.h
uma_core.c Pull in r267961 and r267973 again. Fix for issues reported will follow. 2014-06-28 03:56:17 +00:00
uma_dbg.c
uma_dbg.h
uma_int.h
uma.h
vm_extern.h Handle wiring failures in vm_map_wire() with the new functions 2014-08-02 16:10:24 +00:00
vm_fault.c Implement 'fast path' for the vm page fault handler. Or, it could be 2014-08-15 07:30:14 +00:00
vm_glue.c If vm_page_grab() allocates a new page, the page is not inserted into 2014-08-13 05:44:08 +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 Change pmap_enter(9) interface to take flags parameter and superpage 2014-08-08 17:12:03 +00:00
vm_kern.h
vm_map.c Rewrite a loop in vm_map_wire() so that gcc doesn't think that the variable 2014-08-02 17:58:20 +00:00
vm_map.h Add MAP_EXCL flag for mmap(2). It should be combined with MAP_FIXED, 2014-06-19 05:00:39 +00:00
vm_meter.c
vm_mmap.c Remove ia64. 2014-07-07 00:27:09 +00:00
vm_object.c When unwiring a region of an address space, do not assume that the 2014-07-26 18:10:18 +00:00
vm_object.h Add wrappers to assert that vm object is unlocked and for try upgrade. 2014-08-06 19:30:35 +00:00
vm_page.c Adapt vm_page_aflag_set(PGA_WRITEABLE) to the locking of 2014-08-09 05:00:34 +00:00
vm_page.h Adapt vm_page_aflag_set(PGA_WRITEABLE) to the locking of 2014-08-09 05:00:34 +00:00
vm_pageout.c Remove ia64. 2014-07-07 00:27:09 +00:00
vm_pageout.h
vm_pager.c
vm_pager.h The vm_pager_page_unswapped() pager op is only implemented for the 2014-08-06 19:34:03 +00:00
vm_param.h
vm_phys.c vm_phys: improve robustness of fictitious ranges 2014-08-05 10:29:01 +00:00
vm_phys.h
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
vm_reserv.c Correct a bug in the management of the population map on big-endian 2014-06-11 16:11:12 +00:00
vm_reserv.h
vm_unix.c Remove ia64. 2014-07-07 00:27:09 +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
vnode_pager.c
vnode_pager.h