As a step on the way to isolating hyp from the host on nVHE as part of Android's "Protected KVM" project, this series introduces a separate register context for hyp visiting these topics on the way: - RAS for nVHE - Panicking from guest vectors with SCS - Switching to hyp context - Migration hyp interface off of function pointers After four small refactors, focus turns to adding a new exception vector for the nVHE hyp to use with the host. With this new freedom, the erroneous consumption of the host's RAS errors by nVHE is corrected. Following this, attention turns to fixing hyp panics from the guest context, e.g. an invalid vector, so they have a chance of completely cleanly with features such as shadow call stack (SCS) enabled on VHE. Then, hyp is made to switch to its own context rather than borrowing the host context before migrating the hyp interface from raw function pointers to SMCCC based functions IDs. This series is based on v5.8-rc1 and has been tested on a VIM 3L. >From v1: - https://lore.kernel.org/kvmarm/20200715184438.1390996-1-ascull@xxxxxxxxxx/ - HVC microbenchmark overhead cut from over 15% to under 6%. - Abandon the symmetry of a run loop in hyp and treating the host as a vCPU as there was little practical benefit for the overhead it introduced. Cc: Marc Zyngier <maz@xxxxxxxxxx> Cc: James Morse <james.morse@xxxxxxx> Cc: Suzuki Poulose <suzuki.poulose@xxxxxxx> Cc: Sudeep Holla <sudeep.holla@xxxxxxx> Cc: Will Deacon <will@xxxxxxxxxx> Cc: Catalin Marinas <catalin.marinas@xxxxxxx> Cc: kernel-team@xxxxxxxxxxx Cc: kvmarm@xxxxxxxxxxxxxxxxxxxxx Cc: linux-arm-kernel@xxxxxxxxxxxxxxxxxxx Andrew Scull (20): KVM: arm64: Remove __activate_vm wrapper KVM: arm64: Remove hyp_panic arguments KVM: arm64: Remove kvm_host_data_t typedef KVM: arm64: Restrict symbol aliasing to outside nVHE KVM: arm64: Save chosen hyp vector to a percpu variable KVM: arm64: nVHE: Use separate vector for the host KVM: arm64: nVHE: Don't consume host SErrors with ESB KVM: arm64: Preserve host DISR_EL1 KVM: arm64: Introduce hyp context KVM: arm64: Update context references from host to hyp KVM: arm64: Restore hyp when panicking in guest context KVM: arm64: Share context save and restore macros KVM: arm64: nVHE: Switch to hyp context for EL2 KVM: arm64: nVHE: Handle hyp panics smccc: Cast arguments to unsigned long KVM: arm64: nVHE: Pass pointers consistently to hyp-init KVM: arm64: nVHE: Migrate hyp interface to SMCCC KVM: arm64: nVHE: Migrate hyp-init to SMCCC KVM: arm64: nVHE: Fix pointers during SMCCC convertion KVM: arm64: nVHE: Handle stub HVCs in the host loop arch/arm64/include/asm/kvm_asm.h | 78 ++++++++++ arch/arm64/include/asm/kvm_host.h | 26 ++-- arch/arm64/include/asm/kvm_hyp.h | 9 +- arch/arm64/include/asm/kvm_ptrauth.h | 6 +- arch/arm64/kernel/image-vars.h | 2 + arch/arm64/kvm/Makefile | 2 +- arch/arm64/kvm/arm.c | 34 +++- arch/arm64/kvm/hyp.S | 34 ---- arch/arm64/kvm/hyp/entry.S | 95 +++++------- arch/arm64/kvm/hyp/hyp-entry.S | 83 +--------- arch/arm64/kvm/hyp/include/hyp/switch.h | 9 +- arch/arm64/kvm/hyp/include/hyp/sysreg-sr.h | 16 +- arch/arm64/kvm/hyp/nvhe/Makefile | 2 +- arch/arm64/kvm/hyp/nvhe/host.S | 156 +++++++++++++++++++ arch/arm64/kvm/hyp/nvhe/hyp-init.S | 80 ++++++---- arch/arm64/kvm/hyp/nvhe/hyp-main.c | 171 +++++++++++++++++++++ arch/arm64/kvm/hyp/nvhe/switch.c | 37 ++--- arch/arm64/kvm/hyp/nvhe/tlb.c | 2 - arch/arm64/kvm/hyp/vhe/switch.c | 18 ++- arch/arm64/kvm/vgic/vgic-v3.c | 4 +- include/linux/arm-smccc.h | 20 +-- 21 files changed, 606 insertions(+), 278 deletions(-) delete mode 100644 arch/arm64/kvm/hyp.S create mode 100644 arch/arm64/kvm/hyp/nvhe/host.S create mode 100644 arch/arm64/kvm/hyp/nvhe/hyp-main.c -- 2.28.0.220.ged08abb693-goog _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/mailman/listinfo/kvmarm