linux/arch/arm64/include/asm
Mark Rutland 62a679cb28 arm64: simplify ptrauth initialization
Currently __cpu_setup conditionally initializes the address
authentication keys and enables them in SCTLR_EL1, doing so differently
for the primary CPU and secondary CPUs, and skipping this work for CPUs
returning from an idle state. For the latter case, cpu_do_resume
restores the keys and SCTLR_EL1 value after the MMU has been enabled.

This flow is rather difficult to follow, so instead let's move the
primary and secondary CPU initialization into their respective boot
paths. By following the example of cpu_do_resume and doing so once the
MMU is enabled, we can always initialize the keys from the values in
thread_struct, and avoid the machinery necessary to pass the keys in
secondary_data or open-coding initialization for the boot CPU.

This means we perform an additional RMW of SCTLR_EL1, but we already do
this in the cpu_do_resume path, and for other features in cpufeature.c,
so this isn't a major concern in a bringup path. Note that even while
the enable bits are clear, the key registers are accessible.

As this now renders the argument to __cpu_setup redundant, let's also
remove that entirely. Future extensions can follow a similar approach to
initialize values that differ for primary/secondary CPUs.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Tested-by: Amit Daniel Kachhap <amit.kachhap@arm.com>
Reviewed-by: Amit Daniel Kachhap <amit.kachhap@arm.com>
Cc: Amit Daniel Kachhap <amit.kachhap@arm.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: James Morse <james.morse@arm.com>
Cc: Suzuki K Poulose <suzuki.poulose@arm.com>
Cc: Will Deacon <will@kernel.org>
Link: https://lore.kernel.org/r/20200423101606.37601-3-mark.rutland@arm.com
Signed-off-by: Will Deacon <will@kernel.org>
2020-04-28 11:23:21 +01:00
..
vdso arm64: vdso32: Include common headers in the vdso library 2020-03-21 15:24:02 +01:00
xen xen: fixes and cleanups for 5.4-rc2 2019-10-04 11:13:09 -07:00
acenv.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
acpi.h arm64 updates for 5.3: 2019-07-08 09:54:55 -07:00
alternative.h arm64: alternative: fix build with clang integrated assembler 2020-03-20 10:01:28 +00:00
arch_gicv3.h KVM/arm fixes for 5.6, take #1 2020-02-28 11:50:06 +01:00
arch_timer.h Merge branch 'timers/vdso' into timers/core 2019-07-03 10:50:21 +02:00
archrandom.h arm64: add credited/trusted RNG support 2020-02-27 23:21:52 -05:00
arm_dsu_pmu.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
arm-cci.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00
asm_pointer_auth.h arm64: simplify ptrauth initialization 2020-04-28 11:23:21 +01:00
asm-bug.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00
asm-offsets.h
asm-prototypes.h
asm-uaccess.h arm64 updates for 5.5: 2019-11-25 15:39:19 -08:00
assembler.h Merge branches 'for-next/memory-hotremove', 'for-next/arm_sdei', 'for-next/amu', 'for-next/final-cap-helper', 'for-next/cpu_ops-cleanup', 'for-next/misc' and 'for-next/perf' into for-next/core 2020-03-25 11:10:32 +00:00
atomic_ll_sc.h arm64: Move the LSE gas support detection to Kconfig 2020-01-15 12:50:48 +00:00
atomic_lse.h arm64: lse: fix LSE atomics with LLVM's integrated assembler 2020-01-16 17:25:10 +00:00
atomic.h Merge branch 'for-next/atomics' into for-next/core 2019-08-30 12:55:39 +01:00
barrier.h arm64: Relax ICC_PMR_EL1 accesses when ICC_CTLR_EL1.PMHE is clear 2019-10-15 12:26:09 +01:00
bitops.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00
bitrev.h
boot.h treewide: replace #include <asm/sizes.h> with #include <linux/sizes.h> 2019-05-14 19:52:52 -07:00
brk-imm.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
bug.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00
cache.h arm64: Ask the compiler to __always_inline functions used by KVM at HYP 2020-02-22 11:01:47 +00:00
cacheflush.h arm64: Ask the compiler to __always_inline functions used by KVM at HYP 2020-02-22 11:01:47 +00:00
checksum.h arm64: csum: Optimise IPv6 header checksum 2020-03-09 18:08:25 +00:00
clocksource.h arm64: Introduce asm/vdso/clocksource.h 2020-03-21 15:23:55 +01:00
cmpxchg.h arm64: fix unreachable code issue with cmpxchg 2019-09-17 12:11:50 +01:00
compat.h compat: provide compat_ptr() on all architectures 2020-01-03 09:32:51 +01:00
compiler.h arm64: mask PAC bits of __builtin_return_address 2020-03-18 09:50:20 +00:00
cpu_ops.h arm64: Introduce get_cpu_ops() helper function 2020-03-24 17:24:19 +00:00
cpu.h arm64: Introduce ID_ISAR6 CPU register 2020-01-15 11:13:27 +00:00
cpucaps.h Merge branch 'for-next/kernel-ptrauth' into for-next/core 2020-03-25 11:11:08 +00:00
cpufeature.h arm64 updates for 5.7: 2020-03-31 10:05:01 -07:00
cpuidle.h
cputype.h arm64: Add KRYO{3,4}XX CPU cores to spectre-v2 safe list 2020-01-17 12:46:41 +00:00
current.h
daifflags.h arm64: acpi: fix DAIF manipulation with pNMI 2020-01-22 14:41:22 +00:00
dcc.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 284 2019-06-05 17:36:37 +02:00
debug-monitors.h arm64: remove pointless __KERNEL__ guards 2019-08-05 11:06:33 +01:00
device.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00
dmi.h
efi.h efi/libstub/arm: Relax FDT alignment requirement 2020-02-23 21:57:15 +01:00
elf.h arm64: vdso: Fix population of AT_SYSINFO_EHDR for compat vdso 2019-07-22 10:33:42 +01:00
esr.h arch/arm64: fix typo in a comment 2020-03-09 17:09:31 +00:00
exception.h arm64: Drop do_el0_ia_bp_hardening() & do_sp_pc_abort() declarations 2020-02-10 11:24:49 +00:00
exec.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00
extable.h
fb.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00
fixmap.h
fpsimd.h arm64: remove pointless __KERNEL__ guards 2019-08-05 11:06:33 +01:00
fpsimdmacros.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00
ftrace.h arm64: implement ftrace with regs 2019-11-06 14:17:35 +00:00
futex.h futex: arch_futex_atomic_op_inuser() calling conventions change 2020-03-27 23:58:51 -04:00
hardirq.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00
hugetlb.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174 2019-05-30 11:26:41 -07:00
hw_breakpoint.h arm64: remove pointless __KERNEL__ guards 2019-08-05 11:06:33 +01:00
hwcap.h Merge branch 'for-next/rng' into for-next/core 2020-01-22 11:38:53 +00:00
hypervisor.h
image.h docs: arm64: convert docs to ReST and rename to .rst 2019-06-14 14:20:27 -06:00
insn.h arm64: insn: add encoder for MOV (register) 2019-11-06 14:17:33 +00:00
io.h arm64: Ask the compiler to __always_inline functions used by KVM at HYP 2020-02-22 11:01:47 +00:00
irq_work.h
irq.h
irqflags.h arm64: Relax ICC_PMR_EL1 accesses when ICC_CTLR_EL1.PMHE is clear 2019-10-15 12:26:09 +01:00
jump_label.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00
kasan.h arm64: mm: Introduce vabits_actual 2019-08-09 11:17:21 +01:00
Kbuild asm-generic: make more kernel-space headers mandatory 2020-04-02 09:35:25 -07:00
kernel-pgtable.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00
kexec.h Revert "arm64: kexec: make dtb_mem always enabled" 2020-01-10 16:00:50 +00:00
kgdb.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00
kprobes.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174 2019-05-30 11:26:41 -07:00
kvm_arm.h arm64/kvm: disable access to AMU registers from kvm guests 2020-03-06 16:02:50 +00:00
kvm_asm.h arm64: kvm: Modernize __smccc_workaround_1_smc_start annotations 2020-03-09 17:35:43 +00:00
kvm_coproc.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00
kvm_emulate.h KVM: arm64: GICv4.1: Allow non-trapping WFI when using HW SGIs 2020-03-24 12:15:51 +00:00
kvm_host.h KVM: arm64: GICv4.1: Reload VLPI configuration on distributor enable/disable 2020-03-24 12:15:51 +00:00
kvm_hyp.h KVM/arm fixes for 5.6, take #1 2020-02-28 11:50:06 +01:00
kvm_mmu.h arm64 updates for 5.7: 2020-03-31 10:05:01 -07:00
kvm_ptrauth.h
kvm_ras.h
linkage.h arm64: asm: Add new-style position independent function annotations 2020-01-08 12:14:08 +00:00
lse.h arm64: lse: Fix LSE atomics with LLVM 2020-02-18 18:10:49 +00:00
memory.h arm64: remove CONFIG_DEBUG_ALIGN_RODATA feature 2020-04-01 21:44:43 +01:00
mmu_context.h arm64: mm: convert cpu_do_switch_mm() to C 2020-02-27 14:30:50 +00:00
mmu.h arm64 updates for 5.7: 2020-03-31 10:05:01 -07:00
mmzone.h
module.h arch: split MODULE_ARCH_VERMAGIC definitions out to <asm/vermagic.h> 2020-04-23 10:50:26 +09:00
neon-intrinsics.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
neon.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
numa.h
page-def.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00
page.h mm/vma: define a default value for VM_DATA_DEFAULT_FLAGS 2020-04-10 15:36:21 -07:00
paravirt.h arm64: Retrieve stolen time as paravirtualized guest 2019-10-21 19:20:31 +01:00
pci.h arm64: remove pointless __KERNEL__ guards 2019-08-05 11:06:33 +01:00
percpu.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00
perf_event.h arm64: perf: Add support for ARMv8.5-PMU 64-bit counters 2020-03-17 22:50:30 +00:00
pgalloc.h mm: remove quicklist page table caches 2019-09-24 15:54:09 -07:00
pgtable-hwdef.h Merge branches 'for-next/acpi', 'for-next/cpufeatures', 'for-next/csum', 'for-next/e0pd', 'for-next/entry', 'for-next/kbuild', 'for-next/kexec/cleanup', 'for-next/kexec/file-kdump', 'for-next/misc', 'for-next/nofpsimd', 'for-next/perf' and 'for-next/scs' into for-next/core 2020-01-22 11:32:31 +00:00
pgtable-prot.h arm64: kpti: Fix "kpti=off" when KASLR is enabled 2020-03-19 08:28:43 +00:00
pgtable-types.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00
pgtable.h arm64: mm: add p?d_leaf() definitions 2020-02-04 03:05:24 +00:00
pointer_auth.h arm64: sync kernel APIAKey when installing 2020-04-21 15:52:56 +01:00
preempt.h sched/rt, arm64: Use CONFIG_PREEMPTION 2019-12-08 14:37:32 +01:00
probes.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174 2019-05-30 11:26:41 -07:00
proc-fns.h arm64: mm: convert cpu_do_switch_mm() to C 2020-02-27 14:30:50 +00:00
processor.h arm64 updates for 5.7: 2020-03-31 10:05:01 -07:00
ptdump.h arm64: mm: convert mm/dump.c to use walk_page_range() 2020-02-04 03:05:25 +00:00
ptrace.h KVM: arm/arm64: Correct CPSR on exception entry 2020-01-19 18:06:14 +00:00
pvclock-abi.h KVM: arm64: Implement PV_TIME_FEATURES call 2019-10-21 19:20:27 +01:00
sdei.h
seccomp.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
sections.h arm64: Remove __exception_text_start and __exception_text_end from asm/section.h 2020-01-08 17:30:19 +00:00
shmparam.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00
signal32.h arm64: remove pointless __KERNEL__ guards 2019-08-05 11:06:33 +01:00
simd.h arm64: fpsimd: Make sure SVE setup is complete before SIMD is used 2020-01-14 17:11:21 +00:00
smp_plat.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00
smp.h arm64: simplify ptrauth initialization 2020-04-28 11:23:21 +01:00
sparsemem.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00
spinlock_types.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00
spinlock.h arm64/spinlock: fix a -Wunused-function warning 2020-02-10 11:29:24 +00:00
stack_pointer.h
stackprotector.h arm64: initialize ptrauth keys for kernel booting task 2020-03-18 09:50:20 +00:00
stacktrace.h arm64: stacktrace: Better handle corrupted stacks 2019-07-22 11:44:15 +01:00
stage2_pgtable.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00
stat.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00
string.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00
suspend.h
sync_bitops.h
syscall_wrapper.h arm64: simplify syscall wrapper ifdeffery 2019-10-14 10:55:00 +01:00
syscall.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00
sysreg.h arm64: Delete the space separator in __emit_inst 2020-04-15 13:07:12 +01:00
system_misc.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00
thread_info.h arm64: Remove TIF_NOHZ 2020-02-20 16:07:19 +01:00
timex.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00
tlb.h mm: treewide: clarify pgtable_page_{ctor,dtor}() naming 2019-09-26 10:10:44 -07:00
tlbflush.h arm64: tlb: Ensure we execute an ISB following walk cache invalidation 2019-08-27 17:38:26 +01:00
topology.h arm64 updates for 5.7: 2020-03-31 10:05:01 -07:00
traps.h arm64: remove __exception annotations 2019-10-28 11:22:38 +00:00
uaccess.h arm64 updates for 5.5: 2019-12-06 14:18:01 -08:00
unistd32.h threads-v5.6 2020-01-29 19:38:34 -08:00
unistd.h arm64: compat: Fix syscall number of compat_clock_getres 2020-03-19 19:23:46 +00:00
uprobes.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
vdso.h arm64: remove pointless __KERNEL__ guards 2019-08-05 11:06:33 +01:00
vermagic.h arch: split MODULE_ARCH_VERMAGIC definitions out to <asm/vermagic.h> 2020-04-23 10:50:26 +09:00
virt.h KVM: arm64: Ask the compiler to __always_inline functions used at HYP 2020-02-22 11:01:47 +00:00
vmalloc.h mm/vmalloc: Add empty <asm/vmalloc.h> headers and use them from <linux/vmalloc.h> 2019-12-10 10:12:55 +01:00
vmap_stack.h
word-at-a-time.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00
xor.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00