]> www.infradead.org Git - users/hch/misc.git/commitdiff
KVM: arm64: Initialize HCRX_EL2 traps in pKVM
authorFuad Tabba <tabba@google.com>
Fri, 14 Mar 2025 11:18:30 +0000 (11:18 +0000)
committerOliver Upton <oliver.upton@linux.dev>
Fri, 14 Mar 2025 23:00:49 +0000 (16:00 -0700)
Initialize and set the traps controlled by the HCRX_EL2 in pKVM.

Reviewed-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Fuad Tabba <tabba@google.com>
Link: https://lore.kernel.org/r/20250314111832.4137161-3-tabba@google.com
Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
arch/arm64/kvm/hyp/nvhe/pkvm.c

index ac85bc51b8d3110192851faeaa07c706e4acf5c5..c34a6da5fbecc12e54da8c2f5571c8cdc56bfb29 100644 (file)
@@ -166,8 +166,13 @@ static int pkvm_vcpu_init_traps(struct pkvm_hyp_vcpu *hyp_vcpu)
 
        pkvm_vcpu_reset_hcr(vcpu);
 
-       if ((!pkvm_hyp_vcpu_is_protected(hyp_vcpu)))
+       if ((!pkvm_hyp_vcpu_is_protected(hyp_vcpu))) {
+               struct kvm_vcpu *host_vcpu = hyp_vcpu->host_vcpu;
+
+               /* Trust the host for non-protected vcpu features. */
+               vcpu->arch.hcrx_el2 = host_vcpu->arch.hcrx_el2;
                return 0;
+       }
 
        ret = pkvm_check_pvm_cpu_features(vcpu);
        if (ret)
@@ -175,6 +180,7 @@ static int pkvm_vcpu_init_traps(struct pkvm_hyp_vcpu *hyp_vcpu)
 
        pvm_init_traps_hcr(vcpu);
        pvm_init_traps_mdcr(vcpu);
+       vcpu_set_hcrx(vcpu);
 
        return 0;
 }