• Nicholas Piggin's avatar
    powerpc/64s/radix: do not flush TLB on spurious fault · 6d8278c4
    Nicholas Piggin authored
    In the case of a spurious fault (which can happen due to a race with
    another thread that changes the page table), the default Linux mm code
    calls flush_tlb_page for that address. This is not required because
    the pte will be re-fetched. Hash does not wire this up to a hardware
    TLB flush for this reason. This patch avoids the flush for radix.
    
    >From Power ISA v3.0B, p.1090:
    
        Setting a Reference or Change Bit or Upgrading Access Authority
        (PTE Subject to Atomic Hardware Updates)
    
        If the only change being made to a valid PTE that is subject to
        atomic hardware updates is to set the Refer- ence or Change bit to
        1 or to add access authorities, a simpler sequence suffices
        because the translation hardware will refetch the PTE if an access
        is attempted for which the only problems were reference and/or
        change bits needing to be set or insufficient access authority.
    
    The nest MMU on POWER9 does not re-fetch the PTE after such an access
    attempt before faulting, so address spaces with a coprocessor
    attached will continue to flush in these cases.
    
    This reduces tlbies for a kernel compile workload from 0.95M to 0.90M.
    
    fork --fork --exec benchmark improved 0.5% (12300->12400).
    Reviewed-by: default avatarAneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
    Signed-off-by: default avatarNicholas Piggin <npiggin@gmail.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    6d8278c4
tlbflush.h 4.27 KB