freebsd-dev/sys/vm
Alan Cox 5730afc9b6 Handle spurious page faults that may occur in no-fault sections of the
kernel.

When access restrictions are added to a page table entry, we flush the
corresponding virtual address mapping from the TLB.  In contrast, when
access restrictions are removed from a page table entry, we do not
flush the virtual address mapping from the TLB.  This is exactly as
recommended in AMD's documentation.  In effect, when access
restrictions are removed from a page table entry, AMD's MMUs will
transparently refresh a stale TLB entry.  In short, this saves us from
having to perform potentially costly TLB flushes.  In contrast,
Intel's MMUs are allowed to generate a spurious page fault based upon
the stale TLB entry.  Usually, such spurious page faults are handled
by vm_fault() without incident.  However, when we are executing
no-fault sections of the kernel, we are not allowed to execute
vm_fault().  This change introduces special-case handling for spurious
page faults that occur in no-fault sections of the kernel.

In collaboration with:	kib
Tested by:		gibbs (an earlier version)

I would also like to acknowledge Hiroki Sato's assistance in
diagnosing this problem.

MFC after:	1 week
2012-03-22 04:52:51 +00:00
..
default_pager.c Replace pointer to "struct uidinfo" with pointer to "struct ucred" 2010-12-02 17:37:16 +00:00
device_pager.c Update the device pager interface, while keeping the compatibility 2011-11-15 14:40:00 +00:00
memguard.c Mark all SYSCTL_NODEs static that have no corresponding SYSCTL_DECLs. 2011-11-07 15:43:11 +00:00
memguard.h Make memguard(9) capable to guard uma(9) allocations. 2011-10-12 18:08:28 +00:00
phys_pager.c Remove unneeded includes of <sys/linker_set.h>. Other headers that use 2011-01-11 13:59:06 +00:00
pmap.h Sort function prototypes. 2011-01-16 20:40:50 +00:00
redzone.c Mark all SYSCTL_NODEs static that have no corresponding SYSCTL_DECLs. 2011-11-07 15:43:11 +00:00
redzone.h
sg_pager.c Eliminate duplication of the fake page code and zone by the device and sg 2011-03-11 07:07:48 +00:00
swap_pager.c Remove direct access to si_name. 2012-02-10 12:35:57 +00:00
swap_pager.h Implement the linprocfs swaps file, providing information about the 2011-08-01 19:12:15 +00:00
uma_core.c exclude kmem_alloc'ed ARC data buffers from kernel minidumps on amd64 2012-01-27 20:18:31 +00:00
uma_dbg.c - Make the keg abstraction more complete. Permit a zone to have multiple 2009-01-25 09:11:24 +00:00
uma_dbg.h
uma_int.h 1. Prior to r214782, UMA did not support multipage allocations before 2011-05-21 17:43:43 +00:00
uma.h exclude kmem_alloc'ed ARC data buffers from kernel minidumps on amd64 2012-01-27 20:18:31 +00:00
vm_contig.c In vm_object_page_clean(), do not clean OBJ_MIGHTBEDIRTY object flag 2012-03-17 23:00:32 +00:00
vm_extern.h Eliminate vm_phys_bootstrap_alloc(). It was a failed attempt at 2011-10-30 05:06:14 +00:00
vm_fault.c Handle spurious page faults that may occur in no-fault sections of the 2012-03-22 04:52:51 +00:00
vm_glue.c Move kstack_cache_entry into the private header, and make the 2011-12-16 10:56:16 +00:00
vm_init.c Introduce exec_alloc_args(). The objective being to encapsulate the 2010-07-27 17:31:03 +00:00
vm_kern.c Simplify kmem_alloc() by eliminating code that existed on account of 2012-02-29 05:41:29 +00:00
vm_kern.h
vm_map.c Fix madvise(MADV_WILLNEED) to properly handle individual mappings larger 2012-03-19 18:47:34 +00:00
vm_map.h Account the writeable shared mappings backed by file in the vnode 2012-02-23 21:07:16 +00:00
vm_meter.c - The previous commit (r228449) accidentally moved the vm.stats.vm.* sysctls 2011-12-14 13:25:00 +00:00
vm_mmap.c In vm_object_page_clean(), do not clean OBJ_MIGHTBEDIRTY object flag 2012-03-17 23:00:32 +00:00
vm_object.c Fix madvise(MADV_WILLNEED) to properly handle individual mappings larger 2012-03-19 18:47:34 +00:00
vm_object.h Fix madvise(MADV_WILLNEED) to properly handle individual mappings larger 2012-03-19 18:47:34 +00:00
vm_page.c exclude kmem_alloc'ed ARC data buffers from kernel minidumps on amd64 2012-01-27 20:18:31 +00:00
vm_page.h exclude kmem_alloc'ed ARC data buffers from kernel minidumps on amd64 2012-01-27 20:18:31 +00:00
vm_pageout.c In vm_object_page_clean(), do not clean OBJ_MIGHTBEDIRTY object flag 2012-03-17 23:00:32 +00:00
vm_pageout.h In vm_object_page_clean(), do not clean OBJ_MIGHTBEDIRTY object flag 2012-03-17 23:00:32 +00:00
vm_pager.c Remove the condition that is always true. 2011-11-15 14:09:53 +00:00
vm_pager.h Update the device pager interface, while keeping the compatibility 2011-11-15 14:40:00 +00:00
vm_param.h On Alan's advice, rather than do a wholesale conversion on a single 2010-04-30 00:46:43 +00:00
vm_phys.c Bah, just revert my earlier change entirely. (Missed alc's request to do 2012-03-19 19:06:40 +00:00
vm_phys.h Refactor the code that performs physically contiguous memory allocation, 2011-11-16 16:46:09 +00:00
vm_reserv.c Introduce vm_reserv_alloc_contig() and teach vm_page_alloc_contig() how to 2011-12-05 18:29:25 +00:00
vm_reserv.h Introduce vm_reserv_alloc_contig() and teach vm_page_alloc_contig() how to 2011-12-05 18:29:25 +00:00
vm_unix.c Control the execution permission of the readable segments for 2011-10-15 12:35:18 +00:00
vm_zeroidle.c Split P_NOLOAD into a per-thread flag (TDF_NOLOAD). 2009-11-03 16:46:52 +00:00
vm.h Replace pointer to "struct uidinfo" with pointer to "struct ucred" 2010-12-02 17:37:16 +00:00
vnode_pager.c Add KTR_VFS traces to track modifications to a vnode's writecount. 2012-03-08 20:27:20 +00:00
vnode_pager.h Account the writeable shared mappings backed by file in the vnode 2012-02-23 21:07:16 +00:00