summaryrefslogtreecommitdiffstats
path: root/arch/x86
diff options
context:
space:
mode:
authorRik van Riel <riel@redhat.com>2012-11-06 09:56:01 +0000
committerMel Gorman <mgorman@suse.de>2012-12-11 14:28:33 +0000
commitcef23d9db6b76732d9b0933cb162358a6a1f43d7 (patch)
tree8f7c96c026156cd92847be022d9031fc96f25df2 /arch/x86
parente4a1cc56e4d728eb87072c71c07581524e5160b1 (diff)
downloadop-kernel-dev-cef23d9db6b76732d9b0933cb162358a6a1f43d7.zip
op-kernel-dev-cef23d9db6b76732d9b0933cb162358a6a1f43d7.tar.gz
mm,generic: only flush the local TLB in ptep_set_access_flags
The function ptep_set_access_flags is only ever used to upgrade access permissions to a page. That means the only negative side effect of not flushing remote TLBs is that other CPUs may incur spurious page faults, if they happen to access the same address, and still have a PTE with the old permissions cached in their TLB. Having another CPU maybe incur a spurious page fault is faster than always incurring the cost of a remote TLB flush, so replace the remote TLB flush with a purely local one. This should be safe on every architecture that correctly implements flush_tlb_fix_spurious_fault() to actually invalidate the local TLB entry that caused a page fault, as well as on architectures where the hardware invalidates TLB entries that cause page faults. In the unlikely event that you are hitting what appears to be an infinite loop of page faults, and 'git bisect' took you to this changeset, your architecture needs to implement flush_tlb_fix_spurious_fault to actually flush the TLB entry. Signed-off-by: Rik van Riel <riel@redhat.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Michel Lespinasse <walken@google.com> Cc: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'arch/x86')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud