[PATCH v4 00/19] Introduce separate nVHE hyp context
Andrew Scull
ascull at google.com
Tue Sep 15 06:46:24 EDT 2020
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. Topics include:
- RAS for nVHE
- Panicking from guest vectors with SCS
- Switching to hyp context
- Migrating hyp interface off of function pointers
First 4 patches are small refactors. Then an exception vector is added
just for the nVHE host to untangle the existing EL2 vector e.g. to
separate the RAS cases.
Hyp panics from the guest context, e.g. from an invalid vector, are
fixed so they have a chance of completely cleanly with features that
depend on register state such as x18 for shadow call stack (SCS) enabled
on VHE.
Finally, 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.
>From v3:
- https://lore.kernel.org/kvmarm/20200903135307.251331-1-ascull@google.com/
- Rebased onto 5.9-rc4
- Addressed review comments
>From v2:
- https://lore.kernel.org/kvmarm/20200820103446.959000-1-ascull@google.com/
- Rebased onto 5.9-rc3.
- Removed some of the unused separation of host and hyp.
>From v1:
- https://lore.kernel.org/kvmarm/20200715184438.1390996-1-ascull@google.com/
- 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 at kernel.org>
Cc: James Morse <james.morse at arm.com>
Cc: Suzuki Poulose <suzuki.poulose at arm.com>
Cc: Sudeep Holla <sudeep.holla at arm.com>
Cc: Will Deacon <will at kernel.org>
Cc: Catalin Marinas <catalin.marinas at arm.com>
Cc: kernel-team at android.com
Cc: kvmarm at lists.cs.columbia.edu
Cc: linux-arm-kernel at lists.infradead.org
*** BLURB HERE ***
Andrew Scull (19):
KVM: arm64: Remove __activate_vm wrapper
KVM: arm64: Remove hyp_panic arguments
KVM: arm64: Remove kvm_host_data_t typedef
KVM: arm64: Choose hyp symbol based on context
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: 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
KVM: arm64: nVHE: Pass pointers consistently to hyp-init
smccc: Define vendor hyp owned service call region
smccc: Use separate variables for args and results
KVM: arm64: nVHE: Migrate hyp interface to SMCCC
KVM: arm64: nVHE: Migrate hyp-init to SMCCC
KVM: arm64: nVHE: Fix pointers during SMCCC convertion
arch/arm64/include/asm/kvm_asm.h | 100 ++++++++++++-
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 | 76 +---------
arch/arm64/kvm/hyp/include/hyp/switch.h | 15 +-
arch/arm64/kvm/hyp/nvhe/Makefile | 2 +-
arch/arm64/kvm/hyp/nvhe/host.S | 187 ++++++++++++++++++++++++
arch/arm64/kvm/hyp/nvhe/hyp-init.S | 67 +++++----
arch/arm64/kvm/hyp/nvhe/hyp-main.c | 117 +++++++++++++++
arch/arm64/kvm/hyp/nvhe/switch.c | 41 +++---
arch/arm64/kvm/hyp/nvhe/tlb.c | 2 -
arch/arm64/kvm/hyp/vhe/switch.c | 24 +--
arch/arm64/kvm/vgic/vgic-v3.c | 4 +-
include/linux/arm-smccc.h | 74 ++++------
20 files changed, 602 insertions(+), 315 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.618.gf4bc123cb7-goog
More information about the linux-arm-kernel
mailing list