diff options
author | Oliver Upton <[email protected]> | 2023-09-20 19:50:31 +0000 |
---|---|---|
committer | Oliver Upton <[email protected]> | 2023-09-21 18:13:28 +0000 |
commit | be9c0c018389e0722a97ac5cd3152afff1111e37 (patch) | |
tree | 0eac554530e24e12598a4c2ab5a0021bee14be64 | |
parent | 9116db11feb521d9eaa850d3a6a8b713f59c6971 (diff) |
KVM: arm64: Hoist SVE check into KVM_ARM_VCPU_INIT ioctl handler
Test that the system supports SVE before ever getting to
kvm_reset_vcpu().
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Oliver Upton <[email protected]>
-rw-r--r-- | arch/arm64/kvm/arm.c | 3 | ||||
-rw-r--r-- | arch/arm64/kvm/reset.c | 14 |
2 files changed, 6 insertions, 11 deletions
diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c index 18cbd3c9a4d7..e73e134fa2fa 100644 --- a/arch/arm64/kvm/arm.c +++ b/arch/arm64/kvm/arm.c @@ -1200,6 +1200,9 @@ static unsigned long system_supported_vcpu_features(void) if (!kvm_arm_support_pmu_v3()) clear_bit(KVM_ARM_VCPU_PMU_V3, &features); + if (!system_supports_sve()) + clear_bit(KVM_ARM_VCPU_SVE, &features); + return features; } diff --git a/arch/arm64/kvm/reset.c b/arch/arm64/kvm/reset.c index 5b5c74cb901d..3cb08d35b8e0 100644 --- a/arch/arm64/kvm/reset.c +++ b/arch/arm64/kvm/reset.c @@ -73,11 +73,8 @@ int __init kvm_arm_init_sve(void) return 0; } -static int kvm_vcpu_enable_sve(struct kvm_vcpu *vcpu) +static void kvm_vcpu_enable_sve(struct kvm_vcpu *vcpu) { - if (!system_supports_sve()) - return -EINVAL; - vcpu->arch.sve_max_vl = kvm_sve_max_vl; /* @@ -86,8 +83,6 @@ static int kvm_vcpu_enable_sve(struct kvm_vcpu *vcpu) * kvm_arm_vcpu_finalize(), which freezes the configuration. */ vcpu_set_flag(vcpu, GUEST_HAS_SVE); - - return 0; } /* @@ -231,11 +226,8 @@ int kvm_reset_vcpu(struct kvm_vcpu *vcpu) } if (!kvm_arm_vcpu_sve_finalized(vcpu)) { - if (test_bit(KVM_ARM_VCPU_SVE, vcpu->arch.features)) { - ret = kvm_vcpu_enable_sve(vcpu); - if (ret) - goto out; - } + if (test_bit(KVM_ARM_VCPU_SVE, vcpu->arch.features)) + kvm_vcpu_enable_sve(vcpu); } else { kvm_vcpu_reset_sve(vcpu); } |