• Jamie Iles's avatar
    arm64/mm: remove now-superfluous ISBs from TTBR writes · b9293d45
    Jamie Iles authored
    At the time of authoring 7655abb9 ("arm64: mm: Move ASID from TTBR0
    to TTBR1"), the Arm ARM did not specify any ordering guarantees for
    direct writes to TTBR0_ELx and TTBR1_ELx and so an ISB was required
    after each write to ensure TLBs would only be populated from the
    expected (or reserved tables).
    
    In a recent update to the Arm ARM, the requirements have been relaxed to
    reflect the implementation of current CPUs and required implementation
    of future CPUs to read (RDYDPX in D8.2.3 Translation table base address
    register):
    
      Direct writes to TTBR0_ELx and TTBR1_ELx occur in program order
      relative to one another, without the need for explicit
      synchronization. For any one translation, all indirect reads of
      TTBR0_ELx and TTBR1_ELx that are made as part of the translation
      observe only one point in that order of direct writes.
    
    Remove the superfluous ISBs to optimize uaccess helpers and context
    switch.
    
    Cc: Will Deacon <will@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: default avatarJamie Iles <quic_jiles@quicinc.com>
    Reviewed-by: default avatarMark Rutland <mark.rutland@arm.com>
    Link: https://lore.kernel.org/r/20230613141959.92697-1-quic_jiles@quicinc.com
    [catalin.marinas@arm.com: rename __cpu_set_reserved_ttbr0 to ..._nosync]
    [catalin.marinas@arm.com: move the cpu_set_reserved_ttbr0_nosync() call to cpu_do_switch_mm()]
    Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    b9293d45
asm-uaccess.h 2.38 KB