[GIT PULL] KVM/arm64 updates for 5.11
Marc Zyngier
maz at kernel.org
Mon Dec 14 12:48:48 EST 2020
Hi Paolo,
Here's the initial set of KVM/arm64 updates for 5.11. The most notable
change is the "PSCI relay" at EL2, which is the first "user visible"
feature required by the Protected KVM effort. The rest is a mixed bag
of architecture compliance (PMU accesses when no PMU is present, cache
hierarchy discovery), cleanups (EL2 vector allocation, AArch32 sysreg
handling), internal rework (exception injection, EL2 function
pointers), and general improvements (advertising CSV3, reduced GICv4
entry latency).
Note that this pull request comes with some additional bonuses in the
shape of a shared branch with the arm64 tree (arm64/for-next/uaccess),
as it was conflicting *very* badly with the new PSCI relay code.
I already have a bunch of fixes earmarked for after the merge window,
but that is probably something for another year!
Happy Christmas (and please pull)!
M.
The following changes since commit 09162bc32c880a791c6c0668ce0745cf7958f576:
Linux 5.10-rc4 (2020-11-15 16:44:31 -0800)
are available in the Git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm.git tags/kvmarm-5.11
for you to fetch changes up to 3a514592b698588326924625b6948a10c35fadd5:
Merge remote-tracking branch 'origin/kvm-arm64/psci-relay' into kvmarm-master/next (2020-12-09 10:00:24 +0000)
----------------------------------------------------------------
KVM/arm64 updates for Linux 5.11
- PSCI relay at EL2 when "protected KVM" is enabled
- New exception injection code
- Simplification of AArch32 system register handling
- Fix PMU accesses when no PMU is enabled
- Expose CSV3 on non-Meltdown hosts
- Cache hierarchy discovery fixes
- PV steal-time cleanups
- Allow function pointers at EL2
- Various host EL2 entry cleanups
- Simplification of the EL2 vector allocation
----------------------------------------------------------------
Alexandru Elisei (1):
KVM: arm64: Refuse to run VCPU if PMU is not initialized
Andrew Jones (2):
KVM: arm64: CSSELR_EL1 max is 13
KVM: arm64: selftests: Filter out DEMUX registers
David Brazdil (26):
KVM: arm64: Add kvm-arm.mode early kernel parameter
KVM: arm64: Add ARM64_KVM_PROTECTED_MODE CPU capability
psci: Support psci_ops.get_version for v0.1
psci: Split functions to v0.1 and v0.2+ variants
psci: Replace psci_function_id array with a struct
psci: Add accessor for psci_0_1_function_ids
arm64: Make cpu_logical_map() take unsigned int
arm64: Extract parts of el2_setup into a macro
KVM: arm64: Remove vector_ptr param of hyp-init
KVM: arm64: Move hyp-init params to a per-CPU struct
KVM: arm64: Init MAIR/TCR_EL2 from params struct
KVM: arm64: Add .hyp.data..ro_after_init ELF section
KVM: arm64: Support per_cpu_ptr in nVHE hyp code
KVM: arm64: Create nVHE copy of cpu_logical_map
KVM: arm64: Add SMC handler in nVHE EL2
KVM: arm64: Bootstrap PSCI SMC handler in nVHE EL2
KVM: arm64: Add offset for hyp VA <-> PA conversion
KVM: arm64: Forward safe PSCI SMCs coming from host
KVM: arm64: Extract __do_hyp_init into a helper function
KVM: arm64: Add function to enter host from KVM nVHE hyp code
KVM: arm64: Intercept host's CPU_ON SMCs
KVM: arm64: Intercept host's CPU_SUSPEND PSCI SMCs
KVM: arm64: Intercept host's SYSTEM_SUSPEND PSCI SMCs
KVM: arm64: Keep nVHE EL2 vector installed
KVM: arm64: Trap host SMCs in protected mode
KVM: arm64: Fix EL2 mode availability checks
Keqian Zhu (2):
KVM: arm64: Some fixes of PV-time interface document
KVM: arm64: Use kvm_write_guest_lock when init stolen time
Marc Zyngier (47):
KVM: arm64: Add kimg_hyp_va() helper
KVM: arm64: Turn host HVC handling into a dispatch table
KVM: arm64: Don't adjust PC on SError during SMC trap
KVM: arm64: Move kvm_vcpu_trap_il_is32bit into kvm_skip_instr32()
KVM: arm64: Make kvm_skip_instr() and co private to HYP
KVM: arm64: Move PC rollback on SError to HYP
KVM: arm64: Move VHE direct sysreg accessors into kvm_host.h
KVM: arm64: Add basic hooks for injecting exceptions from EL2
KVM: arm64: Inject AArch64 exceptions from HYP
KVM: arm64: Inject AArch32 exceptions from HYP
KVM: arm64: Remove SPSR manipulation primitives
KVM: arm64: Consolidate exception injection
KVM: arm64: Get rid of the AArch32 register mapping code
KVM: arm64: Introduce handling of AArch32 TTBCR2 traps
KVM: arm64: Move AArch32 exceptions over to AArch64 sysregs
KVM: arm64: Add AArch32 mapping annotation
KVM: arm64: Map AArch32 cp15 register to AArch64 sysregs
KVM: arm64: Map AArch32 cp14 register to AArch64 sysregs
KVM: arm64: Drop is_32bit trap attribute
KVM: arm64: Drop is_aarch32 trap attribute
KVM: arm64: Drop legacy copro shadow register
KVM: arm64: Drop kvm_coproc.h
KVM: arm64: Patch kimage_voffset instead of loading the EL1 value
KVM: arm64: Simplify __kvm_enable_ssbs()
KVM: arm64: Avoid repetitive stack access on host EL1 to EL2 exception
Merge branch 'kvm-arm64/el2-pc' into kvmarm-master/next
Merge branch 'kvm-arm64/copro-no-more' into kvmarm-master/next
Merge branch 'kvm-arm64/host-hvc-table' into kvmarm-master/next
KVM: arm64: Add kvm_vcpu_has_pmu() helper
KVM: arm64: Set ID_AA64DFR0_EL1.PMUVer to 0 when no PMU support
KVM: arm64: Refuse illegal KVM_ARM_VCPU_PMU_V3 at reset time
KVM: arm64: Inject UNDEF on PMU access when no PMU configured
KVM: arm64: Remove PMU RAZ/WI handling
KVM: arm64: Remove dead PMU sysreg decoding code
KVM: arm64: Gate kvm_pmu_update_state() on the PMU feature
KVM: arm64: Get rid of the PMU ready state
Merge branch 'kvm-arm64/pmu-undef' into kvmarm-master/next
Merge branch 'kvm-arm64/vector-rework' into kvmarm-master/next
Merge branch 'kvm-arm64/cache-demux' into kvmarm-master/next
Merge branch 'kvm-arm64/misc-5.11' into kvmarm-master/next
arm64: Make the Meltdown mitigation state available
KVM: arm64: Advertise ID_AA64PFR0_EL1.CSV3=1 if the CPUs are Meltdown-safe
Merge remote-tracking branch 'origin/kvm-arm64/csv3' into kvmarm-master/queue
Merge remote-tracking branch 'arm64/for-next/uaccess' into HEAD
Merge remote-tracking branch 'origin/kvm-arm64/misc-5.11' into kvmarm-master/queue
KVM: arm64: Fix nVHE boot on VHE systems
Merge remote-tracking branch 'origin/kvm-arm64/psci-relay' into kvmarm-master/next
Mark Rutland (18):
arm64: uaccess: move uao_* alternatives to asm-uaccess.h
arm64: ensure ERET from kthread is illegal
arm64: add C wrappers for SET_PSTATE_*()
arm64: head.S: rename el2_setup -> init_kernel_el
arm64: head.S: cleanup SCTLR_ELx initialization
arm64: head.S: always initialize PSTATE
arm64: sdei: move uaccess logic to arch/arm64/
arm64: sdei: explicitly simulate PAN/UAO entry
arm64: uaccess: rename privileged uaccess routines
arm64: uaccess: simplify __copy_user_flushcache()
arm64: uaccess: refactor __{get,put}_user
arm64: uaccess: split user/kernel routines
arm64: uaccess cleanup macro naming
arm64: uaccess: remove set_fs()
arm64: uaccess: remove addr_limit_user_check()
arm64: uaccess: remove redundant PAN toggling
arm64: uaccess: remove vestigal UAO support
arm64: mark __system_matches_cap as __maybe_unused
Shenming Lu (1):
KVM: arm64: Delay the polling of the GICR_VPENDBASER.Dirty bit
Will Deacon (17):
arm64: alternatives: Split up alternative.h
arm64: cpufeatures: Add capability for LDAPR instruction
arm64: alternatives: Remove READ_ONCE() usage during patch operation
arm64: lto: Strengthen READ_ONCE() to acquire when CONFIG_LTO=y
KVM: arm64: Remove redundant Spectre-v2 code from kvm_map_vector()
KVM: arm64: Tidy up kvm_map_vector()
KVM: arm64: Move kvm_get_hyp_vector() out of header file
KVM: arm64: Make BP hardening globals static instead
KVM: arm64: Move BP hardening helpers into spectre.h
KVM: arm64: Re-jig logic when patching hardened hyp vectors
KVM: arm64: Allocate hyp vectors statically
arm64: spectre: Rename ARM64_HARDEN_EL2_VECTORS to ARM64_SPECTRE_V3A
arm64: spectre: Consolidate spectre-v3a detection
KVM: arm64: Remove redundant hyp vectors entry
KVM: arm64: Move 'struct kvm_arch_memory_slot' out of uapi/
KVM: arm64: Remove kvm_arch_vm_ioctl_check_extension()
KVM: arm64: Remove unused __extended_idmap_trampoline() prototype
Documentation/admin-guide/kernel-parameters.txt | 10 +
Documentation/arm64/memory.rst | 2 +-
Documentation/virt/kvm/arm/pvtime.rst | 4 +-
arch/arm64/Kconfig | 25 +-
arch/arm64/include/asm/alternative-macros.h | 217 ++++++++++++
arch/arm64/include/asm/alternative.h | 267 +-------------
arch/arm64/include/asm/asm-uaccess.h | 31 +-
arch/arm64/include/asm/cpucaps.h | 8 +-
arch/arm64/include/asm/cpufeature.h | 20 +-
arch/arm64/include/asm/el2_setup.h | 181 ++++++++++
arch/arm64/include/asm/exec.h | 1 -
arch/arm64/include/asm/futex.h | 8 +-
arch/arm64/include/asm/insn.h | 3 +-
arch/arm64/include/asm/kvm_arm.h | 1 +
arch/arm64/include/asm/kvm_asm.h | 17 +-
arch/arm64/include/asm/kvm_coproc.h | 38 --
arch/arm64/include/asm/kvm_emulate.h | 70 +---
arch/arm64/include/asm/kvm_host.h | 206 ++++++++---
arch/arm64/include/asm/kvm_hyp.h | 4 +-
arch/arm64/include/asm/kvm_mmu.h | 110 +++---
arch/arm64/include/asm/mmu.h | 29 --
arch/arm64/include/asm/percpu.h | 6 +
arch/arm64/include/asm/processor.h | 4 +-
arch/arm64/include/asm/ptrace.h | 8 +-
arch/arm64/include/asm/rwonce.h | 73 ++++
arch/arm64/include/asm/sections.h | 1 +
arch/arm64/include/asm/smp.h | 4 +-
arch/arm64/include/asm/spectre.h | 65 ++++
arch/arm64/include/asm/sysreg.h | 23 +-
arch/arm64/include/asm/thread_info.h | 10 +-
arch/arm64/include/asm/uaccess.h | 174 ++++-----
arch/arm64/include/asm/virt.h | 26 ++
arch/arm64/include/uapi/asm/kvm.h | 3 -
arch/arm64/kernel/alternative.c | 7 +-
arch/arm64/kernel/armv8_deprecated.c | 4 +-
arch/arm64/kernel/asm-offsets.c | 8 +-
arch/arm64/kernel/cpu_errata.c | 19 +-
arch/arm64/kernel/cpufeature.c | 88 +++--
arch/arm64/kernel/entry.S | 19 +-
arch/arm64/kernel/head.S | 180 +++-------
arch/arm64/kernel/image-vars.h | 11 +-
arch/arm64/kernel/process.c | 29 +-
arch/arm64/kernel/proton-pack.c | 89 ++---
arch/arm64/kernel/sdei.c | 33 +-
arch/arm64/kernel/setup.c | 2 +-
arch/arm64/kernel/signal.c | 3 -
arch/arm64/kernel/sleep.S | 2 +-
arch/arm64/kernel/suspend.c | 1 -
arch/arm64/kernel/vdso/Makefile | 2 +-
arch/arm64/kernel/vdso32/Makefile | 2 +-
arch/arm64/kernel/vmlinux.lds.S | 12 +-
arch/arm64/kvm/Makefile | 4 +-
arch/arm64/kvm/aarch32.c | 232 ------------
arch/arm64/kvm/arm.c | 281 ++++++++++++---
arch/arm64/kvm/guest.c | 29 +-
arch/arm64/kvm/handle_exit.c | 24 +-
arch/arm64/kvm/hyp/Makefile | 2 +-
arch/arm64/kvm/hyp/aarch32.c | 4 +-
arch/arm64/kvm/hyp/exception.c | 331 +++++++++++++++++
arch/arm64/kvm/hyp/hyp-entry.S | 71 ++--
arch/arm64/kvm/hyp/include/hyp/adjust_pc.h | 62 ++++
arch/arm64/kvm/hyp/include/hyp/switch.h | 17 +
arch/arm64/kvm/hyp/include/nvhe/trap_handler.h | 18 +
arch/arm64/kvm/hyp/nvhe/Makefile | 5 +-
arch/arm64/kvm/hyp/nvhe/host.S | 58 ++-
arch/arm64/kvm/hyp/nvhe/hyp-init.S | 152 +++++---
arch/arm64/kvm/hyp/nvhe/hyp-main.c | 243 ++++++++-----
arch/arm64/kvm/hyp/nvhe/hyp-smp.c | 40 +++
arch/arm64/kvm/hyp/nvhe/hyp.lds.S | 1 +
arch/arm64/kvm/hyp/nvhe/psci-relay.c | 324 +++++++++++++++++
arch/arm64/kvm/hyp/nvhe/switch.c | 8 +-
arch/arm64/kvm/hyp/nvhe/sysreg-sr.c | 11 -
arch/arm64/kvm/hyp/smccc_wa.S | 32 --
arch/arm64/kvm/hyp/vgic-v2-cpuif-proxy.c | 2 +
arch/arm64/kvm/hyp/vgic-v3-sr.c | 2 +
arch/arm64/kvm/hyp/vhe/Makefile | 2 +-
arch/arm64/kvm/hyp/vhe/switch.c | 3 +
arch/arm64/kvm/inject_fault.c | 167 +++------
arch/arm64/kvm/mmio.c | 2 +-
arch/arm64/kvm/mmu.c | 2 +-
arch/arm64/kvm/pmu-emul.c | 19 +-
arch/arm64/kvm/pvtime.c | 6 +-
arch/arm64/kvm/regmap.c | 224 ------------
arch/arm64/kvm/reset.c | 57 +--
arch/arm64/kvm/sys_regs.c | 390 ++++++++-------------
arch/arm64/kvm/sys_regs.h | 9 +-
arch/arm64/kvm/va_layout.c | 104 +++++-
arch/arm64/kvm/vgic-sys-reg-v3.c | 4 -
arch/arm64/kvm/vgic/vgic-v4.c | 12 +
arch/arm64/kvm/vgic/vgic.c | 3 +
arch/arm64/lib/clear_user.S | 8 +-
arch/arm64/lib/copy_from_user.S | 8 +-
arch/arm64/lib/copy_in_user.S | 16 +-
arch/arm64/lib/copy_to_user.S | 8 +-
arch/arm64/lib/mte.S | 6 +-
arch/arm64/lib/uaccess_flushcache.c | 4 +-
arch/arm64/mm/fault.c | 5 -
arch/arm64/mm/proc.S | 2 +-
drivers/firmware/arm_sdei.c | 14 -
drivers/firmware/psci/psci.c | 126 ++++---
drivers/irqchip/irq-gic-v3-its.c | 12 +-
drivers/irqchip/irq-gic-v4.c | 19 +
include/kvm/arm_pmu.h | 3 -
include/kvm/arm_vgic.h | 1 +
include/linux/irqchip/arm-gic-v4.h | 4 +
include/linux/psci.h | 9 +
tools/testing/selftests/kvm/aarch64/get-reg-list.c | 39 ++-
107 files changed, 3110 insertions(+), 2291 deletions(-)
create mode 100644 arch/arm64/include/asm/alternative-macros.h
create mode 100644 arch/arm64/include/asm/el2_setup.h
delete mode 100644 arch/arm64/include/asm/kvm_coproc.h
create mode 100644 arch/arm64/include/asm/rwonce.h
delete mode 100644 arch/arm64/kvm/aarch32.c
create mode 100644 arch/arm64/kvm/hyp/exception.c
create mode 100644 arch/arm64/kvm/hyp/include/hyp/adjust_pc.h
create mode 100644 arch/arm64/kvm/hyp/include/nvhe/trap_handler.h
create mode 100644 arch/arm64/kvm/hyp/nvhe/hyp-smp.c
create mode 100644 arch/arm64/kvm/hyp/nvhe/psci-relay.c
delete mode 100644 arch/arm64/kvm/hyp/smccc_wa.S
delete mode 100644 arch/arm64/kvm/regmap.c
More information about the linux-arm-kernel
mailing list