summaryrefslogtreecommitdiff
path: root/arch/arm64/mm/physaddr.c
diff options
context:
space:
mode:
authorCatalin Marinas <catalin.marinas@arm.com>2024-12-03 15:19:41 +0000
committerCatalin Marinas <catalin.marinas@arm.com>2024-12-05 11:24:38 +0000
commitc0900d15d31c2597dd9f634c8be2b71762199890 (patch)
treeae29c93dc839074a70b5214fa6d95c9b9fd83b6c /arch/arm64/mm/physaddr.c
parentc2b46ae022704a2d845e59461fa24431ad627022 (diff)
downloadlwn-c0900d15d31c2597dd9f634c8be2b71762199890.tar.gz
lwn-c0900d15d31c2597dd9f634c8be2b71762199890.zip
arm64: Ensure bits ASID[15:8] are masked out when the kernel uses 8-bit ASIDs
Linux currently sets the TCR_EL1.AS bit unconditionally during CPU bring-up. On an 8-bit ASID CPU, this is RES0 and ignored, otherwise 16-bit ASIDs are enabled. However, if running in a VM and the hypervisor reports 8-bit ASIDs (ID_AA64MMFR0_EL1.ASIDBits == 0) on a 16-bit ASIDs CPU, Linux uses bits 8 to 63 as a generation number for tracking old process ASIDs. The bottom 8 bits of this generation end up being written to TTBR1_EL1 and also used for the ASID-based TLBI operations as the upper 8 bits of the ASID. Following an ASID roll-over event we can have threads of the same application with the same 8-bit ASID but different generation numbers running on separate CPUs. Both TLB caching and the TLBI operations will end up using different actual 16-bit ASIDs for the same process. A similar scenario can happen in a big.LITTLE configuration if the boot CPU only uses 8-bit ASIDs while secondary CPUs have 16-bit ASIDs. Ensure that the ASID generation is only tracked by bits 16 and up, leaving bits 15:8 as 0 if the kernel uses 8-bit ASIDs. Note that clearing TCR_EL1.AS is not sufficient since the architecture requires that the top 8 bits of the ASID passed to TLBI instructions are 0 rather than ignored in such configuration. Cc: stable@vger.kernel.org Cc: Will Deacon <will@kernel.org> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Marc Zyngier <maz@kernel.org> Cc: James Morse <james.morse@arm.com> Acked-by: Mark Rutland <mark.rutland@arm.com> Acked-by: Marc Zyngier <maz@kernel.org> Link: https://lore.kernel.org/r/20241203151941.353796-1-catalin.marinas@arm.com Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Diffstat (limited to 'arch/arm64/mm/physaddr.c')
0 files changed, 0 insertions, 0 deletions