All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] [kvm-unit-tests] VMX: clean up switch statements for the "stage" state machine
@ 2013-10-28 13:08 Paolo Bonzini
  0 siblings, 0 replies; only message in thread
From: Paolo Bonzini @ 2013-10-28 13:08 UTC (permalink / raw)
  To: kvm

See comments made during the original review of these tests, at
http://permalink.gmane.org/gmane.comp.emulators.kvm.devel/114001.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 x86/vmx_tests.c | 38 ++++++++++++++++++++++++++------------
 1 file changed, 26 insertions(+), 12 deletions(-)

diff --git a/x86/vmx_tests.c b/x86/vmx_tests.c
index 3f584ed..90338a0 100644
--- a/x86/vmx_tests.c
+++ b/x86/vmx_tests.c
@@ -201,9 +201,10 @@ int preemption_timer_exit_handler()
 			report("Preemption timer", 0);
 			break;
 		default:
-			printf("Invalid stage.\n");
+			// Should not reach here
+			printf("ERROR : unexpected stage, %d\n", get_stage());
 			print_vmexit_info();
-			break;
+			return VMX_TEST_VMEXIT;
 		}
 		break;
 	default:
@@ -505,7 +506,7 @@ static int cr_shadowing_exit_handler()
 	exit_qual = vmcs_read(EXI_QUALIFICATION);
 	switch (reason) {
 	case VMX_VMCALL:
-		switch (stage) {
+		switch (get_stage()) {
 		case 0:
 			if (guest_cr0 == vmcs_read(GUEST_CR0))
 				report("Read through CR0", 1);
@@ -550,11 +551,16 @@ static int cr_shadowing_exit_handler()
 			else
 				report("Write shadowing CR4 (same value)", 0);
 			break;
+		default:
+			// Should not reach here
+			printf("ERROR : unexpected stage, %d\n", get_stage());
+			print_vmexit_info();
+			return VMX_TEST_VMEXIT;
 		}
 		vmcs_write(GUEST_RIP, guest_rip + insn_len);
 		return VMX_TEST_RESUME;
 	case VMX_CR:
-		switch (stage) {
+		switch (get_stage()) {
 		case 4:
 			report("Read shadowing CR0", 0);
 			set_stage(stage + 1);
@@ -583,6 +589,11 @@ static int cr_shadowing_exit_handler()
 			if (exit_qual == 0x604)
 				set_stage(stage + 1);
 			break;
+		default:
+			// Should not reach here
+			printf("ERROR : unexpected stage, %d\n", get_stage());
+			print_vmexit_info();
+			return VMX_TEST_VMEXIT;
 		}
 		vmcs_write(GUEST_RIP, guest_rip + insn_len);
 		return VMX_TEST_RESUME;
@@ -684,7 +695,11 @@ static int iobmp_exit_handler()
 	insn_len = vmcs_read(EXI_INST_LEN);
 	switch (reason) {
 	case VMX_IO:
-		switch (stage) {
+		switch (get_stage()) {
+		case 0:
+		case 1:
+			set_stage(stage + 1);
+			break;
 		case 2:
 			if ((exit_qual & VMX_IO_SIZE_MASK) != _VMX_IO_BYTE)
 				report("I/O bitmap - I/O width, byte", 0);
@@ -730,12 +745,11 @@ static int iobmp_exit_handler()
 			if (((exit_qual & VMX_IO_PORT_MASK) >> VMX_IO_PORT_SHIFT) == 0xFFFF)
 				set_stage(stage + 1);
 			break;
-		case 0:
-		case 1:
-			set_stage(stage + 1);
 		default:
 			// Should not reach here
-			break;
+			printf("ERROR : unexpected stage, %d\n", get_stage());
+			print_vmexit_info();
+			return VMX_TEST_VMEXIT;
 		}
 		vmcs_write(GUEST_RIP, guest_rip + insn_len);
 		return VMX_TEST_RESUME;
@@ -1080,7 +1094,7 @@ static int ept_exit_handler()
 			break;
 		// Should not reach here
 		default:
-			printf("ERROR - unknown stage, %d.\n", get_stage());
+			printf("ERROR - unexpected stage, %d.\n", get_stage());
 			print_vmexit_info();
 			return VMX_TEST_VMEXIT;
 		}
@@ -1098,7 +1112,7 @@ static int ept_exit_handler()
 			break;
 		// Should not reach here
 		default:
-			printf("ERROR - unknown stage, %d.\n", get_stage());
+			printf("ERROR - unexpected stage, %d.\n", get_stage());
 			print_vmexit_info();
 			return VMX_TEST_VMEXIT;
 		}
@@ -1122,7 +1136,7 @@ static int ept_exit_handler()
 			break;
 		default:
 			// Should not reach here
-			printf("ERROR : unknown stage, %d\n", get_stage());
+			printf("ERROR : unexpected stage, %d\n", get_stage());
 			print_vmexit_info();
 			return VMX_TEST_VMEXIT;
 		}
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2013-10-28 13:08 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-10-28 13:08 [PATCH] [kvm-unit-tests] VMX: clean up switch statements for the "stage" state machine Paolo Bonzini

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.