diff mbox series

[v2,1/2] KVM: selftests: Avoid infinite loop in hyperv_features when invtsc is missing

Message ID 20240129085847.2674082-1-vkuznets@redhat.com (mailing list archive)
State New, archived
Headers show
Series [v2,1/2] KVM: selftests: Avoid infinite loop in hyperv_features when invtsc is missing | expand

Commit Message

Vitaly Kuznetsov Jan. 29, 2024, 8:58 a.m. UTC
When X86_FEATURE_INVTSC is missing, guest_test_msrs_access() was supposed
to skip testing dependent Hyper-V invariant TSC feature. Unfortunately,
'continue' does not lead to that as stage is not incremented. Moreover,
'vm' allocated with vm_create_with_one_vcpu() is not freed and the test
runs out of available file descriptors very quickly.

Fixes: bd827bd77537 ("KVM: selftests: Test Hyper-V invariant TSC control")
Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
---
 tools/testing/selftests/kvm/x86_64/hyperv_features.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

Comments

Sean Christopherson Jan. 31, 2024, 12:59 a.m. UTC | #1
On Mon, 29 Jan 2024 09:58:46 +0100, Vitaly Kuznetsov wrote:
> When X86_FEATURE_INVTSC is missing, guest_test_msrs_access() was supposed
> to skip testing dependent Hyper-V invariant TSC feature. Unfortunately,
> 'continue' does not lead to that as stage is not incremented. Moreover,
> 'vm' allocated with vm_create_with_one_vcpu() is not freed and the test
> runs out of available file descriptors very quickly.
> 
> 
> [...]

Applied to kvm-x86 selftests, thanks!

[1/2] KVM: selftests: Avoid infinite loop in hyperv_features when invtsc is missing
      https://github.com/kvm-x86/linux/commit/8ad485527348
[2/2] KVM: selftests: Fail tests when open() fails with !ENOENT
      https://github.com/kvm-x86/linux/commit/c2a449a30fa2

--
https://github.com/kvm-x86/linux/tree/next
diff mbox series

Patch

diff --git a/tools/testing/selftests/kvm/x86_64/hyperv_features.c b/tools/testing/selftests/kvm/x86_64/hyperv_features.c
index 4f4193fc74ff..b923a285e96f 100644
--- a/tools/testing/selftests/kvm/x86_64/hyperv_features.c
+++ b/tools/testing/selftests/kvm/x86_64/hyperv_features.c
@@ -454,7 +454,7 @@  static void guest_test_msrs_access(void)
 		case 44:
 			/* MSR is not available when CPUID feature bit is unset */
 			if (!has_invtsc)
-				continue;
+				goto next_stage;
 			msr->idx = HV_X64_MSR_TSC_INVARIANT_CONTROL;
 			msr->write = false;
 			msr->fault_expected = true;
@@ -462,7 +462,7 @@  static void guest_test_msrs_access(void)
 		case 45:
 			/* MSR is vailable when CPUID feature bit is set */
 			if (!has_invtsc)
-				continue;
+				goto next_stage;
 			vcpu_set_cpuid_feature(vcpu, HV_ACCESS_TSC_INVARIANT);
 			msr->idx = HV_X64_MSR_TSC_INVARIANT_CONTROL;
 			msr->write = false;
@@ -471,7 +471,7 @@  static void guest_test_msrs_access(void)
 		case 46:
 			/* Writing bits other than 0 is forbidden */
 			if (!has_invtsc)
-				continue;
+				goto next_stage;
 			msr->idx = HV_X64_MSR_TSC_INVARIANT_CONTROL;
 			msr->write = true;
 			msr->write_val = 0xdeadbeef;
@@ -480,7 +480,7 @@  static void guest_test_msrs_access(void)
 		case 47:
 			/* Setting bit 0 enables the feature */
 			if (!has_invtsc)
-				continue;
+				goto next_stage;
 			msr->idx = HV_X64_MSR_TSC_INVARIANT_CONTROL;
 			msr->write = true;
 			msr->write_val = 1;
@@ -513,6 +513,7 @@  static void guest_test_msrs_access(void)
 			return;
 		}
 
+next_stage:
 		stage++;
 		kvm_vm_free(vm);
 	}