]> git.baikalelectronics.ru Git - kernel.git/commit
powerpc/64s/radix: avoid ptesync after set_pte and ptep_set_access_flags
authorNicholas Piggin <npiggin@gmail.com>
Fri, 1 Jun 2018 10:01:19 +0000 (20:01 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Sun, 3 Jun 2018 10:40:36 +0000 (20:40 +1000)
commitd95200f4424b3aeb2fc23f3be7af323ccee68bdc
tree0d66bcf4ae3fe02d0556cd4e9079550a3d3a7d75
parent3ac69813fd762d0ad0b143293925e1f9b558cdd8
powerpc/64s/radix: avoid ptesync after set_pte and ptep_set_access_flags

The ISA suggests ptesync after setting a pte, to prevent a table walk
initiated by a subsequent access from missing that store and causing a
spurious fault. This is an architectual allowance that allows an
implementation's page table walker to be incoherent with the store
queue.

However there is no correctness problem in taking a spurious fault in
userspace -- the kernel copes with these at any time, so the updated
pte will be found eventually. Spurious kernel faults on vmap memory
must be avoided, so a ptesync is put into flush_cache_vmap.

On POWER9 so far I have not found a measurable window where this can
result in more minor faults, so as an optimisation, remove the costly
ptesync from pte updates. If an implementation benefits from ptesync,
it would be better to add it back in update_mmu_cache, so it's not
done for things like fork(2).

fork --fork --exec benchmark improved 5.2% (12400->13100).

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/include/asm/book3s/64/radix.h
arch/powerpc/include/asm/cacheflush.h
arch/powerpc/mm/pgtable-radix.c