]> xenbits.xensource.com Git - people/pauldu/linux.git/commitdiff
KVM: arm64: Hoist SVE check into KVM_ARM_VCPU_INIT ioctl handler
authorOliver Upton <oliver.upton@linux.dev>
Wed, 20 Sep 2023 19:50:31 +0000 (19:50 +0000)
committerOliver Upton <oliver.upton@linux.dev>
Thu, 21 Sep 2023 18:13:28 +0000 (18:13 +0000)
Test that the system supports SVE before ever getting to
kvm_reset_vcpu().

Link: https://lore.kernel.org/r/20230920195036.1169791-4-oliver.upton@linux.dev
Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
arch/arm64/kvm/arm.c
arch/arm64/kvm/reset.c

index 18cbd3c9a4d777dfb11e3289c1e365c930b76cb5..e73e134fa2fae9da4f7fcbaf29761dc0e11c5ca7 100644 (file)
@@ -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;
 }
 
index 5b5c74cb901d7a1ddc8931d75a12459e793167fc..3cb08d35b8e04c1ab2e4ab78109fb6a4c2f0dd02 100644 (file)
@@ -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);
        }