On Thu, Mar 18, 2021 at 12:25:30PM +0000, Marc Zyngier wrote:
> ZCR_EL2 controls the upper bound for ZCR_EL1, and is set to
> a potentially lower limit when the guest uses SVE. In order
> to restore the SVE state on the EL1 host, we must first
> reset ZCR_EL2 to its original value.
>
> To make it as lazy as possible on the EL1 host side, set
> the SVE trapping in place when returning exiting from
"returning exiting"?
> diff --git a/arch/arm64/kvm/hyp/nvhe/switch.c
> b/arch/arm64/kvm/hyp/nvhe/switch.c
> index f3d0e9eca56c..60adc7ff4caa 100644
> --- a/arch/arm64/kvm/hyp/nvhe/switch.c
> +++ b/arch/arm64/kvm/hyp/nvhe/switch.c
> @@ -68,7 +68,7 @@ static void __activate_traps(struct kvm_vcpu *vcpu)
> static void __deactivate_traps(struct kvm_vcpu *vcpu)
> {
> extern char __kvm_hyp_host_vector[];
> - u64 mdcr_el2;
> + u64 mdcr_el2, cptr;
>
> ___deactivate_traps(vcpu);
>
> @@ -101,7 +101,12 @@ static void __deactivate_traps(struct kvm_vcpu *vcpu)
> write_sysreg(HCR_HOST_NVHE_PROTECTED_FLAGS, hcr_el2);
> else
> write_sysreg(HCR_HOST_NVHE_FLAGS, hcr_el2);
> - write_sysreg(CPTR_EL2_DEFAULT, cptr_el2);
> +
> + cptr = CPTR_EL2_DEFAULT;
> + if (vcpu_has_sve(vcpu) && (vcpu->arch.flags & KVM_ARM64_FP_ENABLED))
> + cptr |= CPTR_EL2_TZ;
Acked-by: Will Deacon <[email protected]>
Will
_______________________________________________
kvmarm mailing list
[email protected]
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm