diff options
author | Jeremy Fitzhardinge <jeremy@xensource.com> | 2007-10-16 20:51:30 +0200 |
---|---|---|
committer | Jeremy Fitzhardinge <jeremy@goop.org> | 2007-10-16 20:51:30 +0200 |
commit | 74260714c56de4f967fcb2f17a8656bc574b75be (patch) | |
tree | f02bcd991285a20a543fae69f916577c8447b8f4 /mm | |
parent | xen: deal with stale cr3 values when unpinning pagetables (diff) | |
download | linux-74260714c56de4f967fcb2f17a8656bc574b75be.tar.xz linux-74260714c56de4f967fcb2f17a8656bc574b75be.zip |
xen: lock pte pages while pinning/unpinning
When a pagetable is created, it is made globally visible in the rmap
prio tree before it is pinned via arch_dup_mmap(), and remains in the
rmap tree while it is unpinned with arch_exit_mmap().
This means that other CPUs may race with the pinning/unpinning
process, and see a pte between when it gets marked RO and actually
pinned, causing any pte updates to fail with write-protect faults.
As a result, all pte pages must be properly locked, and only unlocked
once the pinning/unpinning process has finished.
In order to avoid taking spinlocks for the whole pagetable - which may
overflow the PREEMPT_BITS portion of preempt counter - it locks and pins
each pte page individually, and then finally pins the whole pagetable.
Signed-off-by: Jeremy Fitzhardinge <jeremy@xensource.com>
Cc: Rik van Riel <riel@redhat.com>
Cc: Hugh Dickens <hugh@veritas.com>
Cc: David Rientjes <rientjes@google.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andi Kleen <ak@suse.de>
Cc: Keir Fraser <keir@xensource.com>
Cc: Jan Beulich <jbeulich@novell.com>
Diffstat (limited to 'mm')
-rw-r--r-- | mm/Kconfig | 1 |
1 files changed, 0 insertions, 1 deletions
diff --git a/mm/Kconfig b/mm/Kconfig index a7609cbcb00d..e24d348083c3 100644 --- a/mm/Kconfig +++ b/mm/Kconfig @@ -137,7 +137,6 @@ config SPLIT_PTLOCK_CPUS int default "4096" if ARM && !CPU_CACHE_VIPT default "4096" if PARISC && !PA20 - default "4096" if XEN default "4" # |