Introduce '.hyp.data..percpu' as part of ongoing effort to make nVHE hyp code self-contained and independent of the rest of the kernel. The series builds on top of the "Split off nVHE hyp code" series which used objcopy to rename '.text' to '.hyp.text' and prefix all ELF symbols with '__kvm_nvhe' for all object files under kvm/hyp/nvhe. The series is structured as follows: - patch 1: Modify generic PERCPU_* linker script macros to make it possible to define multiple per-CPU ELF sections with prefixed section and symbol names. - patch 2: Improve existing hyp build rules. This could be sent and merged independently of per-CPU but this series builds on it. - patches 3-4: Replace hyp helpers for accessing per-CPU variables with common helpers modified to work correctly in hyp. Per-CPU variables can now be accessed with one API anywhere. - patches 5-7: Where VHE and nVHE use per-CPU variables defined in kernel proper, move their definitions to hyp/ where they are duplicated and owned by VHE/nVHE, respectively. Non-VHE hyp code now refers only to per-CPU variables defined in its source files. Helpers are added so that kernel proper can continue to access nVHE hyp variables, same way as it does with other nVHE symbols. - patches 8-10: Introduce '.hyp.data..percpu' ELF section and allocate memory for every CPU core during KVM init. All nVHE per-CPU state is now grouped together in ELF and in memory. Introducing a new per-CPU variable does not require adding new memory mappings any more. nVHE hyp code cannot accidentally refer to kernel-proper per-CPU data as it only has the pointer to its own per-CPU memory. Patches are rebased on v5.9-rc3 and available in branch 'topic/percpu-v2' at: https://android-kvm.googlesource.com/linux Changes v1 -> v2: * 5.9-rc3 base * partially link hyp code, add linker script David Brazdil (10): Macros to override naming of percpu symbols and sections kvm: arm64: Partially link nVHE hyp code, simplify HYPCOPY kvm: arm64: Remove __hyp_this_cpu_read kvm: arm64: Remove hyp_adr/ldr_this_cpu kvm: arm64: Add helpers for accessing nVHE hyp per-cpu vars kvm: arm64: Duplicate arm64_ssbd_callback_required for nVHE hyp kvm: arm64: Create separate instances of kvm_host_data for VHE/nVHE kvm: arm64: Mark hyp stack pages reserved kvm: arm64: Set up hyp percpu data for nVHE kvm: arm64: Remove unnecessary hyp mappings arch/arm64/include/asm/assembler.h | 27 ++++-- arch/arm64/include/asm/kvm_asm.h | 74 ++++++++------- arch/arm64/include/asm/kvm_host.h | 2 +- arch/arm64/include/asm/kvm_mmu.h | 23 ++--- arch/arm64/include/asm/percpu.h | 33 ++++++- arch/arm64/include/asm/sections.h | 1 + arch/arm64/kernel/image-vars.h | 2 - arch/arm64/kernel/vmlinux.lds.S | 10 ++ arch/arm64/kvm/arm.c | 110 ++++++++++++++++++---- arch/arm64/kvm/hyp/hyp-entry.S | 2 +- arch/arm64/kvm/hyp/include/hyp/debug-sr.h | 4 +- arch/arm64/kvm/hyp/include/hyp/switch.h | 8 +- arch/arm64/kvm/hyp/nvhe/Makefile | 56 +++++------ arch/arm64/kvm/hyp/nvhe/hyp.lds.S | 19 ++++ arch/arm64/kvm/hyp/nvhe/switch.c | 8 +- arch/arm64/kvm/hyp/vhe/switch.c | 5 +- arch/arm64/kvm/hyp/vhe/sysreg-sr.c | 4 +- arch/arm64/kvm/pmu.c | 13 ++- include/asm-generic/vmlinux.lds.h | 40 +++++--- 19 files changed, 304 insertions(+), 137 deletions(-) create mode 100644 arch/arm64/kvm/hyp/nvhe/hyp.lds.S -- 2.28.0.402.g5ffc5be6b7-goog