opnsense-src/sys/vm
Alan Cox 0c3a489325 Break up vm_fault()'s implementation of the read-ahead and delete-behind
optimizations into two distinct pieces.  The first piece consists of the
code that should only be performed once per page fault and requires the map
to be locked.  The second piece consists of the code that should be
performed each time a pager is called on an object in the shadow chain.
(This second piece expects the map to be unlocked.)

Previously, the entire implementation could be executed multiple times.
Moreover, the second and subsequent executions would occur with the map
unlocked.  Usually, the ensuing unsynchronized accesses to the map were
harmless because the map was not changing.  Nonetheless, it was possible for
a use-after-free error to occur, where vm_fault() wrote to a freed map
entry.  This change corrects that problem.

Reported by:	avg
Reviewed by:	kib
MFC after:	3 days
Sponsored by:	EMC / Isilon Storage Division
2016-07-18 04:20:26 +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 A change to KPI of vm_pager_get_pages() and underlying VOP_GETPAGES(). 2015-12-16 21:30:45 +00:00
device_pager.c Avoid duplicated calls to pmap_page_get_memattr(). 2016-05-01 17:48:43 +00:00
memguard.c Include sys/_task.h into uma_int.h, so that taskqueue.h isn't a 2016-02-09 20:22:35 +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 sys: use our roundup2/rounddown2() macros when param.h is available. 2016-04-21 19:57:40 +00:00
pmap.h Properly sort the function declarations added in r286296 2015-08-05 10:48:32 +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 Plug a vm_page leak introduced in r292373. 2016-02-05 19:35:53 +00:00
swap_pager.c Fix inconsistent locking of the swap pager named objects list. 2016-06-13 03:42:46 +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.h Replace a number of conflations of mp_ncpus and mp_maxid with either 2016-07-06 14:09:49 +00:00
uma_core.c Replace a number of conflations of mp_ncpus and mp_maxid with either 2016-07-06 14:09:49 +00:00
uma_dbg.c Fix memguard(9) in kernels with INVARIANTS enabled. 2016-06-01 22:31:35 +00:00
uma_dbg.h Move uma_dbg_alloc() and uma_dbg_free() into uma_core.c, which allows 2016-02-03 22:02:36 +00:00
uma_int.h Autotune the number of pages set aside for UMA startup based on the number 2016-07-07 18:37:12 +00:00
vm.h Add new bus methods for mapping resources. 2016-05-20 17:57:47 +00:00
vm_domain.c Move vm_domain_rr_selectdomain() under #ifdef VM_NUMA_ALLOC. 2016-05-10 22:25:55 +00:00
vm_domain.h Add an initial NUMA affinity/policy configuration for threads and processes. 2015-07-11 15:21:37 +00:00
vm_extern.h Various cleanups to the main function for AIO kernel processes: 2016-01-19 21:37:51 +00:00
vm_fault.c Break up vm_fault()'s implementation of the read-ahead and delete-behind 2016-07-18 04:20:26 +00:00
vm_glue.c Fix a LOR between vnode locks and allproc_lock. 2016-06-22 20:15:37 +00:00
vm_init.c Parallelize the buffer cache and rewrite getnewbuf(). This results in a 2015-10-14 02:10:07 +00:00
vm_kern.c Introduce a new mechanism for relocating virtual pages to a new physical 2015-12-19 18:42:50 +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 Change the type of the map entry's next_read field from a vm_pindex_t to a 2016-07-07 20:58:16 +00:00
vm_map.h Change the type of the map entry's next_read field from a vm_pindex_t to a 2016-07-07 20:58:16 +00:00
vm_meter.c The vmtotal sysctl handler marks active vm objects to calculate 2016-06-21 17:49:33 +00:00
vm_mmap.c When mmap(2) is used with a vnode, capture vnode attributes in the 2016-07-10 11:49:10 +00:00
vm_object.c In vgonel(), postpone setting BO_DEAD until VOP_RECLAIM() is called, 2016-07-11 14:19:09 +00:00
vm_object.h The vmtotal sysctl handler marks active vm objects to calculate 2016-06-21 17:49:33 +00:00
vm_page.c Autotune the number of pages set aside for UMA startup based on the number 2016-07-07 18:37:12 +00:00
vm_page.h Add a comment noting locking regime for vm_page_xunbusy(). 2016-06-23 08:27:38 +00:00
vm_pageout.c Fix a LOR between vnode locks and allproc_lock. 2016-06-22 20:15:37 +00:00
vm_pageout.h The flag "vm_pages_needed" has long served two distinct purposes: (1) to 2016-05-27 19:15:45 +00:00
vm_pager.c Remove slightly used const values that can be replaced with nitems(). 2016-04-21 15:38:28 +00:00
vm_pager.h A change to KPI of vm_pager_get_pages() and underlying VOP_GETPAGES(). 2015-12-16 21:30:45 +00:00
vm_param.h Remove the v_cache_min and v_cache_max sysctls. They are unused and have 2015-09-11 03:00:20 +00:00
vm_phys.c sys: use our roundup2/rounddown2() macros when param.h is available. 2016-04-21 19:57:40 +00:00
vm_phys.h Add more fine-grained kernel options for NUMA support. 2016-04-09 13:58:04 +00:00
vm_radix.c Cleanup redundant parenthesis from existing howmany()/roundup() macro uses. 2016-04-22 16:57:42 +00:00
vm_radix.h Eliminate a redundant parameter to vm_radix_replace(). 2013-12-08 20:07:02 +00:00
vm_reserv.c Introduce a new mechanism for relocating virtual pages to a new physical 2015-12-19 18:42:50 +00:00
vm_reserv.h Introduce a new mechanism for relocating virtual pages to a new physical 2015-12-19 18:42:50 +00:00
vm_unix.c Implement lockless resource limits. 2015-06-10 10:48:12 +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
vnode_pager.c Clarify the vnode_destroy_vobject() logic handling for already terminated 2016-07-05 11:21:02 +00:00
vnode_pager.h A change to KPI of vm_pager_get_pages() and underlying VOP_GETPAGES(). 2015-12-16 21:30:45 +00:00