From 07dac217aea66e8e7f0168b6d5ce08fa89710737 Mon Sep 17 00:00:00 2001 From: Will Deacon Date: Thu, 7 Jul 2022 15:49:12 +0100 Subject: [PATCH] Revert "ANDROID: KVM: arm64: Do not pass host struct pointers to kvm_arch_vcpu_load()" This reverts commit ab9f8c82007d72b46771e09532333f0060d40a25. Bug: 233587962 Signed-off-by: Will Deacon Change-Id: I86c1cceabbc4b73beeac96279056da86d8443a2c --- arch/arm64/kvm/arm.c | 4 +--- arch/arm64/kvm/hyp/nvhe/hyp-main.c | 13 ++++++++----- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c index 1d52e03a3fdb..e776c75251de 100644 --- a/arch/arm64/kvm/arm.c +++ b/arch/arm64/kvm/arm.c @@ -579,9 +579,7 @@ nommu: kvm_arch_vcpu_load_debug_state_flags(vcpu); if (is_protected_kvm_enabled()) { - kvm_call_hyp_nvhe(__pkvm_vcpu_load, - vcpu->kvm->arch.pkvm.shadow_handle, - vcpu->vcpu_idx, vcpu->arch.hcr_el2); + kvm_call_hyp_nvhe(__pkvm_vcpu_load, vcpu); kvm_call_hyp(__vgic_v3_restore_vmcr_aprs, &vcpu->arch.vgic_cpu.vgic_v3); } diff --git a/arch/arm64/kvm/hyp/nvhe/hyp-main.c b/arch/arm64/kvm/hyp/nvhe/hyp-main.c index 5946fb5462c0..1086ff2e4245 100644 --- a/arch/arm64/kvm/hyp/nvhe/hyp-main.c +++ b/arch/arm64/kvm/hyp/nvhe/hyp-main.c @@ -616,10 +616,9 @@ static void fpsimd_host_restore(void) static void handle___pkvm_vcpu_load(struct kvm_cpu_context *host_ctxt) { - DECLARE_REG(int, shadow_handle, host_ctxt, 1); - DECLARE_REG(int, vcpu_idx, host_ctxt, 2); - DECLARE_REG(u64, hcr_el2, host_ctxt, 3); + DECLARE_REG(struct kvm_vcpu *, vcpu, host_ctxt, 1); struct pkvm_loaded_state *state; + int handle; /* Why did you bother? */ if (!is_protected_kvm_enabled()) @@ -631,7 +630,10 @@ static void handle___pkvm_vcpu_load(struct kvm_cpu_context *host_ctxt) if (state->vcpu) return; - state->vcpu = get_shadow_vcpu(shadow_handle, vcpu_idx); + vcpu = kern_hyp_va(vcpu); + + handle = READ_ONCE(vcpu->arch.pkvm.shadow_handle); + state->vcpu = get_shadow_vcpu(handle, vcpu->vcpu_idx); if (!state->vcpu) return; @@ -645,7 +647,8 @@ static void handle___pkvm_vcpu_load(struct kvm_cpu_context *host_ctxt) /* Propagate WFx trapping flags, trap ptrauth */ state->vcpu->arch.hcr_el2 &= ~(HCR_TWE | HCR_TWI | HCR_API | HCR_APK); - state->vcpu->arch.hcr_el2 |= hcr_el2 & (HCR_TWE | HCR_TWI); + state->vcpu->arch.hcr_el2 |= vcpu->arch.hcr_el2 & (HCR_TWE | + HCR_TWI); } }