ARM: percpu: add SMP_ON_UP support
authorArd Biesheuvel <ardb@kernel.org>
Thu, 25 Nov 2021 09:26:44 +0000 (10:26 +0100)
committerArd Biesheuvel <ardb@kernel.org>
Mon, 6 Dec 2021 11:49:17 +0000 (12:49 +0100)
commit7b9896c352073156a325c3bb0dc4c46e06e2a468
treea9e6e3be8a6a2b91a147f3e9ae82dfb7fbd860e5
parent4e918ab13eaf40f19938659cb5a22c93172778a8
ARM: percpu: add SMP_ON_UP support

Permit the use of the TPIDRPRW system register for carrying the per-CPU
offset in generic SMP configurations that also target non-SMP capable
ARMv6 cores. This uses the SMP_ON_UP code patching framework to turn all
TPIDRPRW accesses into reads/writes of entry #0 in the __per_cpu_offset
array.

While at it, switch over some existing direct TPIDRPRW accesses in asm
code to invocations of a new helper that is patched in the same way when
necessary.

Note that CPU_V6+SMP without SMP_ON_UP results in a kernel that does not
boot on v6 CPUs without SMP extensions, so add this dependency to
Kconfig as well.

Acked-by: Linus Walleij <linus.walleij@linaro.org>
Acked-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Tested-by: Marc Zyngier <maz@kernel.org>
Tested-by: Vladimir Murzin <vladimir.murzin@arm.com> # ARMv7M
arch/arm/include/asm/assembler.h
arch/arm/include/asm/insn.h
arch/arm/include/asm/percpu.h
arch/arm/kernel/entry-armv.S
arch/arm/kernel/sleep.S
arch/arm/mm/Kconfig