Skip to content
  • Mark Rutland's avatar
    arm64: mte: fix restoration of GCR_EL1 from suspend · 59f44069
    Mark Rutland authored
    Since commit:
    
      bad1e1c6 ("arm64: mte: switch GCR_EL1 in kernel entry and exit")
    
    we saved/restored the user GCR_EL1 value at exception boundaries, and
    update_gcr_el1_excl() is no longer used for this. However it is used to
    restore the kernel's GCR_EL1 value when returning from a suspend state.
    Thus, the comment is misleading (and an ISB is necessary).
    
    When restoring the kernel's GCR value, we need an ISB to ensure this is
    used by subsequent instructions. We don't necessarily get an ISB by
    other means (e.g. if the kernel is built without support for pointer
    authentication). As __cpu_setup() initialised GCR_EL1.Exclude to 0xffff,
    until a context synchronization event, allocation tag 0 may be used
    rather than the desired set of tags.
    
    This patch drops the misleading comment, adds the missing ISB, and for
    clarity folds update_gcr_el1_excl() into its only user.
    
    Fixes: bad1e1c6
    
     ("arm64: mte: switch GCR_EL1 in kernel entry and exit")
    Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
    Cc: Andrey Konovalov <andreyknvl@gmail.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>
    Cc: Will Deacon <will@kernel.org>
    Link: https://lore.kernel.org/r/20210714143843.56537-2-mark.rutland@arm.com
    
    
    Signed-off-by: default avatarWill Deacon <will@kernel.org>
    59f44069