Signed-off-by: Andrew Jones <[email protected]>
---
 x86/vmx_tests.c | 204 ++++++++++++++------------------------------------------
 1 file changed, 49 insertions(+), 155 deletions(-)

diff --git a/x86/vmx_tests.c b/x86/vmx_tests.c
index 184fafc75f2d0..2630f23d1e33a 100644
--- a/x86/vmx_tests.c
+++ b/x86/vmx_tests.c
@@ -271,13 +271,8 @@ static void test_ctrl_pat_main()
        wrmsr(MSR_IA32_CR_PAT, 0x6);
        vmcall();
        guest_ia32_pat = rdmsr(MSR_IA32_CR_PAT);
-       if (ctrl_enter_rev.clr & ENT_LOAD_PAT) {
-               if (guest_ia32_pat != ia32_pat) {
-                       report("Entry load PAT", 0);
-                       return;
-               }
-               report("Entry load PAT", 1);
-       }
+       if (ctrl_enter_rev.clr & ENT_LOAD_PAT)
+               report("Entry load PAT", guest_ia32_pat == ia32_pat);
 }
 
 static int test_ctrl_pat_exit_handler()
@@ -295,19 +290,12 @@ static int test_ctrl_pat_exit_handler()
                        printf("\tEXI_SAVE_PAT is not supported\n");
                        vmcs_write(GUEST_PAT, 0x6);
                } else {
-                       if (guest_pat == 0x6)
-                               report("Exit save PAT", 1);
-                       else
-                               report("Exit save PAT", 0);
+                       report("Exit save PAT", guest_pat == 0x6);
                }
                if (!(ctrl_exit_rev.clr & EXI_LOAD_PAT))
                        printf("\tEXI_LOAD_PAT is not supported\n");
-               else {
-                       if (rdmsr(MSR_IA32_CR_PAT) == ia32_pat)
-                               report("Exit load PAT", 1);
-                       else
-                               report("Exit load PAT", 0);
-               }
+               else
+                       report("Exit load PAT", rdmsr(MSR_IA32_CR_PAT) == 
ia32_pat);
                vmcs_write(GUEST_PAT, ia32_pat);
                vmcs_write(GUEST_RIP, guest_rip + 3);
                return VMX_TEST_RESUME;
@@ -350,13 +338,8 @@ static void test_ctrl_efer_main()
        wrmsr(MSR_EFER, ia32_efer);
        vmcall();
        guest_ia32_efer = rdmsr(MSR_EFER);
-       if (ctrl_enter_rev.clr & ENT_LOAD_EFER) {
-               if (guest_ia32_efer != ia32_efer) {
-                       report("Entry load EFER", 0);
-                       return;
-               }
-               report("Entry load EFER", 1);
-       }
+       if (ctrl_enter_rev.clr & ENT_LOAD_EFER)
+               report("Entry load EFER", guest_ia32_efer == ia32_efer);
 }
 
 static int test_ctrl_efer_exit_handler()
@@ -374,19 +357,13 @@ static int test_ctrl_efer_exit_handler()
                        printf("\tEXI_SAVE_EFER is not supported\n");
                        vmcs_write(GUEST_EFER, ia32_efer);
                } else {
-                       if (guest_efer == ia32_efer)
-                               report("Exit save EFER", 1);
-                       else
-                               report("Exit save EFER", 0);
+                       report("Exit save EFER", guest_efer == ia32_efer);
                }
                if (!(ctrl_exit_rev.clr & EXI_LOAD_EFER)) {
                        printf("\tEXI_LOAD_EFER is not supported\n");
                        wrmsr(MSR_EFER, ia32_efer ^ EFER_NX);
                } else {
-                       if (rdmsr(MSR_EFER) == (ia32_efer ^ EFER_NX))
-                               report("Exit load EFER", 1);
-                       else
-                               report("Exit load EFER", 0);
+                       report("Exit load EFER", rdmsr(MSR_EFER) == (ia32_efer 
^ EFER_NX));
                }
                vmcs_write(GUEST_PAT, ia32_efer);
                vmcs_write(GUEST_RIP, guest_rip + 3);
@@ -436,20 +413,12 @@ static void cr_shadowing_main()
        vmx_set_test_stage(4);
        vmcall();
        cr0 = read_cr0();
-       if (vmx_get_test_stage() != 5) {
-               if (cr0 == guest_cr0)
-                       report("Read shadowing CR0", 1);
-               else
-                       report("Read shadowing CR0", 0);
-       }
+       if (vmx_get_test_stage() != 5)
+               report("Read shadowing CR0", cr0 == guest_cr0);
        vmx_set_test_stage(5);
        cr4 = read_cr4();
-       if (vmx_get_test_stage() != 6) {
-               if (cr4 == guest_cr4)
-                       report("Read shadowing CR4", 1);
-               else
-                       report("Read shadowing CR4", 0);
-       }
+       if (vmx_get_test_stage() != 6)
+               report("Read shadowing CR4", cr4 == guest_cr4);
        // Test write shadow (same value with shadow)
        vmx_set_test_stage(6);
        write_cr0(guest_cr0);
@@ -470,40 +439,28 @@ static void cr_shadowing_main()
                "mov %%rsi, %%cr0\n\t"
                ::"m"(tmp)
                :"rsi", "memory", "cc");
-       if (vmx_get_test_stage() != 9)
-               report("Write shadowing different X86_CR0_TS", 0);
-       else
-               report("Write shadowing different X86_CR0_TS", 1);
+       report("Write shadowing different X86_CR0_TS", vmx_get_test_stage() == 
9);
        vmx_set_test_stage(9);
        tmp = guest_cr0 ^ X86_CR0_MP;
        asm volatile("mov %0, %%rsi\n\t"
                "mov %%rsi, %%cr0\n\t"
                ::"m"(tmp)
                :"rsi", "memory", "cc");
-       if (vmx_get_test_stage() != 10)
-               report("Write shadowing different X86_CR0_MP", 0);
-       else
-               report("Write shadowing different X86_CR0_MP", 1);
+       report("Write shadowing different X86_CR0_MP", vmx_get_test_stage() == 
10);
        vmx_set_test_stage(10);
        tmp = guest_cr4 ^ X86_CR4_TSD;
        asm volatile("mov %0, %%rsi\n\t"
                "mov %%rsi, %%cr4\n\t"
                ::"m"(tmp)
                :"rsi", "memory", "cc");
-       if (vmx_get_test_stage() != 11)
-               report("Write shadowing different X86_CR4_TSD", 0);
-       else
-               report("Write shadowing different X86_CR4_TSD", 1);
+       report("Write shadowing different X86_CR4_TSD", vmx_get_test_stage() == 
11);
        vmx_set_test_stage(11);
        tmp = guest_cr4 ^ X86_CR4_DE;
        asm volatile("mov %0, %%rsi\n\t"
                "mov %%rsi, %%cr4\n\t"
                ::"m"(tmp)
                :"rsi", "memory", "cc");
-       if (vmx_get_test_stage() != 12)
-               report("Write shadowing different X86_CR4_DE", 0);
-       else
-               report("Write shadowing different X86_CR4_DE", 1);
+       report("Write shadowing different X86_CR4_DE", vmx_get_test_stage() == 
12);
 }
 
 static int cr_shadowing_exit_handler()
@@ -521,28 +478,16 @@ static int cr_shadowing_exit_handler()
        case VMX_VMCALL:
                switch (vmx_get_test_stage()) {
                case 0:
-                       if (guest_cr0 == vmcs_read(GUEST_CR0))
-                               report("Read through CR0", 1);
-                       else
-                               report("Read through CR0", 0);
+                       report("Read through CR0", guest_cr0 == 
vmcs_read(GUEST_CR0));
                        break;
                case 1:
-                       if (guest_cr4 == vmcs_read(GUEST_CR4))
-                               report("Read through CR4", 1);
-                       else
-                               report("Read through CR4", 0);
+                       report("Read through CR4", guest_cr4 == 
vmcs_read(GUEST_CR4));
                        break;
                case 2:
-                       if (guest_cr0 == vmcs_read(GUEST_CR0))
-                               report("Write through CR0", 1);
-                       else
-                               report("Write through CR0", 0);
+                       report("Write through CR0", guest_cr0 == 
vmcs_read(GUEST_CR0));
                        break;
                case 3:
-                       if (guest_cr4 == vmcs_read(GUEST_CR4))
-                               report("Write through CR4", 1);
-                       else
-                               report("Write through CR4", 0);
+                       report("Write through CR4", guest_cr4 == 
vmcs_read(GUEST_CR4));
                        break;
                case 4:
                        guest_cr0 = vmcs_read(GUEST_CR0) ^ (X86_CR0_TS | 
X86_CR0_MP);
@@ -553,16 +498,12 @@ static int cr_shadowing_exit_handler()
                        vmcs_write(CR4_READ_SHADOW, guest_cr4 & (X86_CR4_TSD | 
X86_CR4_DE));
                        break;
                case 6:
-                       if (guest_cr0 == (vmcs_read(GUEST_CR0) ^ (X86_CR0_TS | 
X86_CR0_MP)))
-                               report("Write shadowing CR0 (same value)", 1);
-                       else
-                               report("Write shadowing CR0 (same value)", 0);
+                       report("Write shadowing CR0 (same value)",
+                                       guest_cr0 == (vmcs_read(GUEST_CR0) ^ 
(X86_CR0_TS | X86_CR0_MP)));
                        break;
                case 7:
-                       if (guest_cr4 == (vmcs_read(GUEST_CR4) ^ (X86_CR4_TSD | 
X86_CR4_DE)))
-                               report("Write shadowing CR4 (same value)", 1);
-                       else
-                               report("Write shadowing CR4 (same value)", 0);
+                       report("Write shadowing CR4 (same value)",
+                                       guest_cr4 == (vmcs_read(GUEST_CR4) ^ 
(X86_CR4_TSD | X86_CR4_DE)));
                        break;
                default:
                        // Should not reach here
@@ -642,59 +583,37 @@ static void iobmp_main()
        vmx_set_test_stage(0);
        inb(0x5000);
        outb(0x0, 0x5000);
-       if (vmx_get_test_stage() != 0)
-               report("I/O bitmap - I/O pass", 0);
-       else
-               report("I/O bitmap - I/O pass", 1);
+       report("I/O bitmap - I/O pass", vmx_get_test_stage() == 0);
        // test IO width, in/out
        ((u8 *)io_bitmap_a)[0] = 0xFF;
        vmx_set_test_stage(2);
        inb(0x0);
-       if (vmx_get_test_stage() != 3)
-               report("I/O bitmap - trap in", 0);
-       else
-               report("I/O bitmap - trap in", 1);
+       report("I/O bitmap - trap in", vmx_get_test_stage() == 3);
        vmx_set_test_stage(3);
        outw(0x0, 0x0);
-       if (vmx_get_test_stage() != 4)
-               report("I/O bitmap - trap out", 0);
-       else
-               report("I/O bitmap - trap out", 1);
+       report("I/O bitmap - trap out", vmx_get_test_stage() == 4);
        vmx_set_test_stage(4);
        inl(0x0);
-       if (vmx_get_test_stage() != 5)
-               report("I/O bitmap - I/O width, long", 0);
+       report("I/O bitmap - I/O width, long", vmx_get_test_stage() == 5);
        // test low/high IO port
        vmx_set_test_stage(5);
        ((u8 *)io_bitmap_a)[0x5000 / 8] = (1 << (0x5000 % 8));
        inb(0x5000);
-       if (vmx_get_test_stage() == 6)
-               report("I/O bitmap - I/O port, low part", 1);
-       else
-               report("I/O bitmap - I/O port, low part", 0);
+       report("I/O bitmap - I/O port, low part", vmx_get_test_stage() == 6);
        vmx_set_test_stage(6);
        ((u8 *)io_bitmap_b)[0x1000 / 8] = (1 << (0x1000 % 8));
        inb(0x9000);
-       if (vmx_get_test_stage() == 7)
-               report("I/O bitmap - I/O port, high part", 1);
-       else
-               report("I/O bitmap - I/O port, high part", 0);
+       report("I/O bitmap - I/O port, high part", vmx_get_test_stage() == 7);
        // test partial pass
        vmx_set_test_stage(7);
        inl(0x4FFF);
-       if (vmx_get_test_stage() == 8)
-               report("I/O bitmap - partial pass", 1);
-       else
-               report("I/O bitmap - partial pass", 0);
+       report("I/O bitmap - partial pass", vmx_get_test_stage() == 8);
        // test overrun
        vmx_set_test_stage(8);
        memset(io_bitmap_a, 0x0, PAGE_SIZE);
        memset(io_bitmap_b, 0x0, PAGE_SIZE);
        inl(0xFFFF);
-       if (vmx_get_test_stage() == 9)
-               report("I/O bitmap - overrun", 1);
-       else
-               report("I/O bitmap - overrun", 0);
+       report("I/O bitmap - overrun", vmx_get_test_stage() == 9);
        vmx_set_test_stage(9);
        vmcall();
        outb(0x0, 0x0);
@@ -725,32 +644,21 @@ static int iobmp_exit_handler()
                        vmx_inc_test_stage();
                        break;
                case 2:
-                       if ((exit_qual & VMX_IO_SIZE_MASK) != _VMX_IO_BYTE)
-                               report("I/O bitmap - I/O width, byte", 0);
-                       else
-                               report("I/O bitmap - I/O width, byte", 1);
-                       if (!(exit_qual & VMX_IO_IN))
-                               report("I/O bitmap - I/O direction, in", 0);
-                       else
-                               report("I/O bitmap - I/O direction, in", 1);
+                       report("I/O bitmap - I/O width, byte",
+                                       (exit_qual & VMX_IO_SIZE_MASK) == 
_VMX_IO_BYTE);
+                       report("I/O bitmap - I/O direction, in", exit_qual & 
VMX_IO_IN);
                        vmx_inc_test_stage();
                        break;
                case 3:
-                       if ((exit_qual & VMX_IO_SIZE_MASK) != _VMX_IO_WORD)
-                               report("I/O bitmap - I/O width, word", 0);
-                       else
-                               report("I/O bitmap - I/O width, word", 1);
-                       if (!(exit_qual & VMX_IO_IN))
-                               report("I/O bitmap - I/O direction, out", 1);
-                       else
-                               report("I/O bitmap - I/O direction, out", 0);
+                       report("I/O bitmap - I/O width, word",
+                                       (exit_qual & VMX_IO_SIZE_MASK) == 
_VMX_IO_WORD);
+                       report("I/O bitmap - I/O direction, out",
+                                       !(exit_qual & VMX_IO_IN));
                        vmx_inc_test_stage();
                        break;
                case 4:
-                       if ((exit_qual & VMX_IO_SIZE_MASK) != _VMX_IO_LONG)
-                               report("I/O bitmap - I/O width, long", 0);
-                       else
-                               report("I/O bitmap - I/O width, long", 1);
+                       report("I/O bitmap - I/O width, long",
+                                       (exit_qual & VMX_IO_SIZE_MASK) == 
_VMX_IO_LONG);
                        vmx_inc_test_stage();
                        break;
                case 5:
@@ -922,8 +830,6 @@ static int insn_intercept_init()
 
 static void insn_intercept_main()
 {
-       char msg[80];
-
        for (cur_insn = 0; insn_table[cur_insn].name != NULL; cur_insn++) {
                vmx_set_test_stage(cur_insn * 2);
                if ((insn_table[cur_insn].type == INSN_CPU0 &&
@@ -943,9 +849,8 @@ static void insn_intercept_main()
                        /* skip hlt, it stalls the guest and is tested below */
                        if (insn_table[cur_insn].insn_func != insn_hlt)
                                insn_table[cur_insn].insn_func();
-                       snprintf(msg, sizeof(msg), "execute %s",
-                                insn_table[cur_insn].name);
-                       report(msg, vmx_get_test_stage() == cur_insn * 2);
+                       report("execute %s", vmx_get_test_stage() == cur_insn * 
2,
+                                       insn_table[cur_insn].name);
                } else if (insn_table[cur_insn].type != INSN_ALWAYS_TRAP)
                        printf("\tCPU_CTRL%d.CPU_%s always traps.\n",
                               insn_table[cur_insn].type - INSN_CPU0,
@@ -954,9 +859,8 @@ static void insn_intercept_main()
                vmcall();
 
                insn_table[cur_insn].insn_func();
-               snprintf(msg, sizeof(msg), "intercept %s",
-                        insn_table[cur_insn].name);
-               report(msg, vmx_get_test_stage() == cur_insn * 2 + 1);
+               report("intercept %s", vmx_get_test_stage() == cur_insn * 2 + 1,
+                               insn_table[cur_insn].name);
 
                vmx_set_test_stage(cur_insn * 2 + 1);
                vmcall();
@@ -1115,28 +1019,18 @@ static void ept_main()
        vmx_set_test_stage(2);
        vmcall();
        *((u32 *)data_page1) = MAGIC_VAL_1;
-       if (vmx_get_test_stage() != 3) {
-               report("EPT misconfigurations", 0);
-               goto t1;
-       }
-       report("EPT misconfigurations", 1);
+       report("EPT misconfigurations", vmx_get_test_stage() == 3);
 t1:
        // Test EPT violation
        vmx_set_test_stage(3);
        vmcall();
        *((u32 *)data_page1) = MAGIC_VAL_1;
-       if (vmx_get_test_stage() == 4)
-               report("EPT violation - page permission", 1);
-       else
-               report("EPT violation - page permission", 0);
+       report("EPT violation - page permission", vmx_get_test_stage() == 4);
        // Violation caused by EPT paging structure
        vmx_set_test_stage(4);
        vmcall();
        *((u32 *)data_page1) = MAGIC_VAL_2;
-       if (vmx_get_test_stage() == 5)
-               report("EPT violation - paging structure", 1);
-       else
-               report("EPT violation - paging structure", 0);
+       report("EPT violation - paging structure", vmx_get_test_stage() == 5);
 
        // Test EPT access to L1 MMIO
        vmx_set_test_stage(6);
-- 
1.9.3

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to