Commit d99fb82f authored by Oliver Upton's avatar Oliver Upton
Browse files

KVM: arm64: Hoist NV+SVE check into KVM_ARM_VCPU_INIT ioctl handler

Move the feature check out of kvm_reset_vcpu() so we can make the
function succeed uncondtitionally.

Link: https://lore.kernel.org/r/20230920195036.1169791-7-oliver.upton@linux.dev


Signed-off-by: default avatarOliver Upton <oliver.upton@linux.dev>
parent 12405b09
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -1239,6 +1239,11 @@ static int kvm_vcpu_init_check_features(struct kvm_vcpu *vcpu,
	    test_bit(KVM_ARM_VCPU_PTRAUTH_GENERIC, &features))
		return -EINVAL;

	/* Disallow NV+SVE for the time being */
	if (test_bit(KVM_ARM_VCPU_HAS_EL2, &features) &&
	    test_bit(KVM_ARM_VCPU_SVE, &features))
		return -EINVAL;

	if (!test_bit(KVM_ARM_VCPU_EL1_32BIT, &features))
		return 0;

+1 −7
Original line number Diff line number Diff line
@@ -208,12 +208,6 @@ int kvm_reset_vcpu(struct kvm_vcpu *vcpu)
	if (loaded)
		kvm_arch_vcpu_put(vcpu);

	/* Disallow NV+SVE for the time being */
	if (vcpu_has_nv(vcpu) && vcpu_has_feature(vcpu, KVM_ARM_VCPU_SVE)) {
		ret = -EINVAL;
		goto out;
	}

	if (!kvm_arm_vcpu_sve_finalized(vcpu)) {
		if (test_bit(KVM_ARM_VCPU_SVE, vcpu->arch.features))
			kvm_vcpu_enable_sve(vcpu);
@@ -267,7 +261,7 @@ int kvm_reset_vcpu(struct kvm_vcpu *vcpu)

	/* Reset timer */
	ret = kvm_timer_vcpu_reset(vcpu);
out:

	if (loaded)
		kvm_arch_vcpu_load(vcpu, smp_processor_id());
	preempt_enable();