Lines Matching +full:0 +full:x2000
16 #define SVM_EXIT_MAX_DR_INTERCEPT 0x3f
61 asm volatile ("vmrun %0" : : "a"(virt_to_phys(vmcb))); in test_vmrun()
89 case 0: in finished_rsm_intercept()
91 report_fail("VMEXIT not due to rsm. Exit reason 0x%x", in finished_rsm_intercept()
101 report_fail("VMEXIT not due to #UD. Exit reason 0x%x", in finished_rsm_intercept()
123 asm volatile ("mov %%cr3, %0" : "=r"(test->scratch) : : "memory"); in test_cr3_intercept()
146 mmio_insn = 0x90d8200f; // mov %cr3, %rax; nop in corrupt_cr3_intercept_bypass()
158 ulong a = 0xa0000; in test_cr3_intercept_bypass()
164 asm volatile ("mmio_insn: mov %0, (%0); nop" in test_cr3_intercept_bypass()
172 vmcb->control.intercept_dr_read = 0xff; in prepare_dr_intercept()
173 vmcb->control.intercept_dr_write = 0xff; in prepare_dr_intercept()
178 unsigned int i, failcnt = 0; in test_dr_intercept()
181 for (i = 0; i < 8; i++) { in test_dr_intercept()
184 case 0: in test_dr_intercept()
185 asm volatile ("mov %%dr0, %0" : "=r"(test->scratch) : : "memory"); in test_dr_intercept()
188 asm volatile ("mov %%dr1, %0" : "=r"(test->scratch) : : "memory"); in test_dr_intercept()
191 asm volatile ("mov %%dr2, %0" : "=r"(test->scratch) : : "memory"); in test_dr_intercept()
194 asm volatile ("mov %%dr3, %0" : "=r"(test->scratch) : : "memory"); in test_dr_intercept()
197 asm volatile ("mov %%dr4, %0" : "=r"(test->scratch) : : "memory"); in test_dr_intercept()
200 asm volatile ("mov %%dr5, %0" : "=r"(test->scratch) : : "memory"); in test_dr_intercept()
203 asm volatile ("mov %%dr6, %0" : "=r"(test->scratch) : : "memory"); in test_dr_intercept()
206 asm volatile ("mov %%dr7, %0" : "=r"(test->scratch) : : "memory"); in test_dr_intercept()
217 for (i = 0; i < 8; i++) { in test_dr_intercept()
220 case 0: in test_dr_intercept()
221 asm volatile ("mov %0, %%dr0" : : "r"(test->scratch) : "memory"); in test_dr_intercept()
224 asm volatile ("mov %0, %%dr1" : : "r"(test->scratch) : "memory"); in test_dr_intercept()
227 asm volatile ("mov %0, %%dr2" : : "r"(test->scratch) : "memory"); in test_dr_intercept()
230 asm volatile ("mov %0, %%dr3" : : "r"(test->scratch) : "memory"); in test_dr_intercept()
233 asm volatile ("mov %0, %%dr4" : : "r"(test->scratch) : "memory"); in test_dr_intercept()
236 asm volatile ("mov %0, %%dr5" : : "r"(test->scratch) : "memory"); in test_dr_intercept()
239 asm volatile ("mov %0, %%dr6" : : "r"(test->scratch) : "memory"); in test_dr_intercept()
242 asm volatile ("mov %0, %%dr7" : : "r"(test->scratch) : "memory"); in test_dr_intercept()
318 memset(msr_bitmap, 0, MSR_BITMAP_SIZE); in prepare_msr_intercept()
334 case 0: in get_msrpm_bit_nr()
335 range_nr = 0; in get_msrpm_bit_nr()
337 case 0xc0000000: in get_msrpm_bit_nr()
340 case 0xc0010000: in get_msrpm_bit_nr()
353 u64 val, exp, arb_val = 0xef8056791234abcd; /* Arbitrary value */ in __test_msr_intercept()
357 for (msr = 0; msr <= 0xc0012000; msr++) { in __test_msr_intercept()
358 if (msr == 0xC0010131 /* MSR_SEV_STATUS */) { in __test_msr_intercept()
372 if (msr == 0x2000 + 1) in __test_msr_intercept()
373 msr = 0xc0000000 - 1; in __test_msr_intercept()
374 else if (msr == 0xc0002000 + 1) in __test_msr_intercept()
375 msr = 0xc0010000 - 1; in __test_msr_intercept()
384 report_fail("Expected RDMSR(0x%x) to #VMEXIT, got exception '%u'", in __test_msr_intercept()
387 report_fail("Expected RDMSR(0x%x) to #VMEXIT, got scratch '%ld", in __test_msr_intercept()
403 report_fail("Expected WRMSR(0x%x) to #VMEXIT, got exception '%u'", in __test_msr_intercept()
406 report_fail("Expected WRMSR(0x%x) to #VMEXIT, got scratch '%ld' (wanted %ld)", in __test_msr_intercept()
412 if (get_msrpm_bit_nr(msr) < 0) { in __test_msr_intercept()
413 report(msr == 0x2000 || in __test_msr_intercept()
414 msr == 0xc0000000 - 1 || msr == 0xc0002000 || in __test_msr_intercept()
415 msr == 0xc0010000 - 1 || msr == 0xc0012000, in __test_msr_intercept()
416 "MSR 0x%x not covered by an MSRPM range", msr); in __test_msr_intercept()
430 report_fail("RDMSR 0x%x, Wanted -1 (no intercept), got 0x%lx", in __test_msr_intercept()
438 report_fail("RDMSR 0x%x, wanted val '0%lx', got val '0x%lx'", in __test_msr_intercept()
447 report_fail("WRMSR 0x%x, Wanted -1 (no intercept), got 0x%lx", in __test_msr_intercept()
491 memset(msr_bitmap, 0xff, MSR_BITMAP_SIZE); in msr_intercept_finished()
496 if (bit_nr < 0) in msr_intercept_finished()
500 case 0: in msr_intercept_finished()
519 if (is_x2apic && msr >= 0x800 && msr <= 0x8ff) in msr_intercept_finished()
524 if (is_x2apic && msr >= 0x800 && msr <= 0x8ff) in msr_intercept_finished()
533 report_fail("Wanted MSR VM-Exit, got reason 0x%x", exit_code); in msr_intercept_finished()
549 test->scratch = ((get_regs().rdx << 32) | (vmcb->save.rax & 0xffffffff)); in msr_intercept_finished()
567 test->scratch = 0; in prepare_mode_switch()
582 " movl $0xc0000080, %%ecx\n" /* EFER */ in test_mode_switch()
595 " btcl $0, %%eax\n" /* clear PE */ in test_mode_switch()
597 " ljmpl $0, $4f\n" /* jump to real-mode */ in test_mode_switch()
601 " btsl $0, %%eax\n" /* set PE */ in test_mode_switch()
609 " movl $0xc0000080, %%ecx\n" /* EFER */ in test_mode_switch()
642 case 0: in mode_switch_finished()
644 if ((cr0 & 0x80000001) || /* CR0.PG, CR0.PE */ in mode_switch_finished()
645 (cr4 & 0x00000020) || /* CR4.PAE */ in mode_switch_finished()
646 (efer & 0x00000500)) /* EFER.LMA, EFER.LME */ in mode_switch_finished()
651 if (((cr0 & 0x80000001) != 0x80000001) || /* CR0.PG, CR0.PE */ in mode_switch_finished()
652 ((cr4 & 0x00000020) != 0x00000020) || /* CR4.PAE */ in mode_switch_finished()
653 ((efer & 0x00000500) != 0x00000500)) /* EFER.LMA, EFER.LME */ in mode_switch_finished()
674 test->scratch = 0; in prepare_ioio()
675 memset(io_bitmap, 0, 8192); in prepare_ioio()
676 io_bitmap[8192] = 0xFF; in prepare_ioio()
681 // stage 0, test IO pass in test_ioio()
682 inb(0x5000); in test_ioio()
683 outb(0x0, 0x5000); in test_ioio()
684 if (get_test_stage(test) != 0) in test_ioio()
688 io_bitmap[0] = 0xFF; in test_ioio()
690 inb(0x0); in test_ioio()
694 outw(0x0, 0x0); in test_ioio()
698 inl(0x0); in test_ioio()
703 io_bitmap[0x5000 / 8] = (1 << (0x5000 % 8)); in test_ioio()
704 inb(0x5000); in test_ioio()
708 io_bitmap[0x9000 / 8] = (1 << (0x9000 % 8)); in test_ioio()
709 inw(0x9000); in test_ioio()
714 io_bitmap[0x5000 / 8] = (1 << (0x5000 % 8)); in test_ioio()
715 inl(0x4FFF); in test_ioio()
721 inl(0x7FFF); in test_ioio()
726 io_bitmap[0x8000 / 8] = 1 << (0x8000 % 8); in test_ioio()
727 inl(0x7FFF); in test_ioio()
731 io_bitmap[0] = 0; in test_ioio()
732 inl(0xFFFF); in test_ioio()
736 io_bitmap[0] = 0xFF; in test_ioio()
737 io_bitmap[8192] = 0; in test_ioio()
738 inl(0xFFFF); in test_ioio()
777 memset(io_bitmap, 0, 8193); in check_ioio()
783 vmcb->control.asid = 0; in prepare_asid_zero()
830 #define TSC_OFFSET_VALUE (~0ull << 48)
870 wrmsr(MSR_IA32_TSC_ADJUST, 0); in tsc_adjust_check()
902 report_fail("unexpected vm exit code 0x%x", vmcb->control.exit_code); in svm_tsc_scale_run_testcase()
922 for (i = 0 ; i < TSC_SCALE_ITERATIONS; i++) { in svm_tsc_scale_test()
943 latvmrun_max = latvmexit_max = 0; in latency_prepare()
944 vmrun_sum = vmexit_sum = 0; in latency_prepare()
993 return runs == 0; in latency_finished()
1016 latvmload_max = latvmsave_max = latstgi_max = latclgi_max = 0; in lat_svm_insn_prepare()
1025 for ( ; runs != 0; runs--) { in lat_svm_insn_finished()
1027 asm volatile("vmload %0\n\t" : : "a"(vmcb_phys) : "memory"); in lat_svm_insn_finished()
1036 asm volatile("vmsave %0\n\t" : : "a"(vmcb_phys) : "memory"); in lat_svm_insn_finished()
1094 } while (0)
1107 int ipi_vector = 0xf1; in pending_event_prepare()
1121 APIC_DM_FIXED | ipi_vector, 0); in pending_event_prepare()
1123 set_test_stage(test, 0); in pending_event_prepare()
1134 case 0: in pending_event_finished()
1136 report_fail("VMEXIT not due to pending interrupt. Exit reason 0x%x", in pending_event_finished()
1181 handle_irq(0xf1, pending_event_ipi_isr); in pending_event_cli_prepare()
1184 APIC_DM_FIXED | 0xf1, 0); in pending_event_cli_prepare()
1186 set_test_stage(test, 0); in pending_event_cli_prepare()
1217 "Wanted VMMCALL VM-Exit, got exit reason 0x%x", in pending_event_cli_finished()
1221 case 0: in pending_event_cli_finished()
1230 APIC_DM_FIXED | 0xf1, 0); in pending_event_cli_finished()
1270 apic_write(APIC_EOI, 0); in timer_isr()
1278 set_test_stage(test, 0); in interrupt_prepare()
1289 for (loops = 0; loops < 10000000 && !timer_fired; loops++) in interrupt_test()
1301 for (loops = 0; loops < 10000000 && !timer_fired; loops++) in interrupt_test()
1337 case 0: in interrupt_finished()
1340 report_fail("VMEXIT not due to vmmcall. Exit reason 0x%x", in interrupt_finished()
1353 report_fail("VMEXIT not due to intr intercept. Exit reason 0x%x", in interrupt_finished()
1393 set_test_stage(test, 0); in nmi_prepare()
1398 apic_icr_write(APIC_DEST_SELF | APIC_DEST_PHYSICAL | APIC_DM_NMI | APIC_INT_ASSERT, 0); in nmi_test()
1406 apic_icr_write(APIC_DEST_SELF | APIC_DEST_PHYSICAL | APIC_DM_NMI | APIC_INT_ASSERT, 0); in nmi_test()
1414 case 0: in nmi_finished()
1416 report_fail("VMEXIT not due to vmmcall. Exit reason 0x%x", in nmi_finished()
1427 report_fail("VMEXIT not due to NMI intercept. Exit reason 0x%x", in nmi_finished()
1463 apic_icr_write(APIC_DEST_PHYSICAL | APIC_DM_NMI | APIC_INT_ASSERT, id_map[0]); in nmi_message_thread()
1470 apic_icr_write(APIC_DEST_PHYSICAL | APIC_DM_NMI | APIC_INT_ASSERT, id_map[0]); in nmi_message_thread()
1509 report_fail("VMEXIT not due to vmmcall. Exit reason 0x%x", in nmi_hlt_finished()
1520 report_fail("VMEXIT not due to NMI intercept. Exit reason 0x%x", in nmi_hlt_finished()
1568 case 0: in vnmi_finished()
1570 report_fail("Wanted ERR VM-Exit, got 0x%x", in vnmi_finished()
1581 report_fail("Wanted VMMCALL VM-Exit, got 0x%x", in vnmi_finished()
1592 report_fail("Wanted VMMCALL VM-Exit, got 0x%x", in vnmi_finished()
1618 static volatile int count_exc = 0;
1641 case 0: in exc_inject_finished()
1643 report_fail("VMEXIT not due to vmmcall. Exit reason 0x%x", in exc_inject_finished()
1653 report_fail("VMEXIT not due to error. Exit reason 0x%x", in exc_inject_finished()
1657 report(count_exc == 0, "exception with vector 2 not injected"); in exc_inject_finished()
1663 report_fail("VMEXIT not due to vmmcall. Exit reason 0x%x", in exc_inject_finished()
1697 handle_irq(0xf1, virq_isr); in virq_inject_prepare()
1700 (0x0f << V_INTR_PRIO_SHIFT); // Set to the highest priority in virq_inject_prepare()
1701 vmcb->control.int_vector = 0xf1; in virq_inject_prepare()
1704 set_test_stage(test, 0); in virq_inject_prepare()
1739 case 0: in virq_inject_finished()
1741 report_fail("VMEXIT not due to vmmcall. Exit reason 0x%x", in virq_inject_finished()
1752 (0x0f << V_INTR_PRIO_SHIFT); in virq_inject_finished()
1757 report_fail("VMEXIT not due to vintr. Exit reason 0x%x", in virq_inject_finished()
1770 report_fail("VMEXIT not due to vmmcall. Exit reason 0x%x", in virq_inject_finished()
1777 (0x08 << V_INTR_PRIO_SHIFT); in virq_inject_finished()
1779 vmcb->control.int_ctl |= 0x0a & V_TPR_MASK; in virq_inject_finished()
1784 report_fail("VMEXIT not due to vmmcall. Exit reason 0x%x", in virq_inject_finished()
1794 report_fail("VMEXIT not due to vmmcall. Exit reason 0x%x", in virq_inject_finished()
1832 report_fail("VMEXIT not due to vmmcall. Exit reason 0x%x", in virq_inject_within_shadow_finished()
1873 static volatile int isr_cnt = 0;
1874 static volatile uint8_t io_port_var = 0xAA;
1880 apic_write(APIC_EOI, 0); in reg_corruption_isr()
1886 set_test_stage(test, 0); in reg_corruption_prepare()
1903 "movw $0x4d0, %%dx\n\t" // IO port in reg_corruption_test()
1905 "movb $0xAA, %[io_port_var]\n\t" in reg_corruption_test()
1931 if (guest_rip == insb_instruction_label && io_port_var != 0xAA) { in reg_corruption_finished()
1977 for (i = 0; i < 5 && atomic_read(&cpu_online_count) < orig_cpu_count; i++) in init_startup_prepare()
2001 apic_icr_write(APIC_DEST_SELF | APIC_DEST_PHYSICAL | APIC_DM_INIT | APIC_INT_ASSERT, 0); in init_intercept_test()
2009 report_fail("VMEXIT not due to init intercept. Exit reason 0x%x", in init_intercept_finished()
2037 static volatile u8 host_rflags_guest_main_flag = 0;
2038 static volatile u8 host_rflags_db_handler_flag = 0;
2063 host_rflags_guest_main_flag = 0; in host_rflags_db_handler()
2069 write_dr7(0x403); in host_rflags_db_handler()
2082 set_test_stage(test, 0); in host_rflags_prepare()
2094 if (get_test_stage(test) > 0) { in host_rflags_test()
2109 case 0: in host_rflags_finished()
2111 report_fail("Unexpected VMEXIT. Exit reason 0x%x", in host_rflags_finished()
2126 " invoked before guest main. Exit reason 0x%x", in host_rflags_finished()
2142 " Exit reason 0x%x, RIP actual: %lx, RIP expected: " in host_rflags_finished()
2148 host_rflags_guest_main_flag = 0; in host_rflags_finished()
2160 " Exit reason 0x%x, RIP actual: %lx, RIP expected: " in host_rflags_finished()
2256 case 0: \
2266 report(r == exit_code, "Test CR%d %s%d:%d: %lx, wanted exit 0x%x, got 0x%x", \
2310 "CR0.PG=1 (%lx) and CR4.PAE=0 (%lx)", efer, cr0, cr4); in test_efer()
2315 * determine if CR4.PAE=0 or CR0.PE=0 triggered the in test_efer()
2323 "CR0.PG=1 and CR0.PE=0 (%lx)", efer, cr0); in test_efer()
2357 report (svm_vmrun() == SVM_EXIT_VMMCALL, "Test CR0 CD=1,NW=0: %lx", in test_cr0()
2366 report (svm_vmrun() == SVM_EXIT_VMMCALL, "Test CR0 CD=0,NW=0: %lx", in test_cr0()
2370 report (svm_vmrun() == SVM_EXIT_ERR, "Test CR0 CD=0,NW=1: %lx", in test_cr0()
2392 SVM_TEST_CR_RESERVED_BITS(0, 63, 1, 3, cr3_saved, in test_cr3()
2396 report(svm_vmrun() == SVM_EXIT_VMMCALL, "Test CR3 63:0: %lx", in test_cr3()
2401 * [11:5] [2:0] - long mode (PCIDE=0) in test_cr3()
2402 * [2:0] - PAE legacy mode in test_cr3()
2412 SVM_TEST_CR_RESERVED_BITS(0, 11, 1, 3, cr3_saved, in test_cr3()
2416 report(svm_vmrun() == SVM_EXIT_VMMCALL, "Test CR3 63:0: %lx", in test_cr3()
2426 pdpe[0] &= ~1ULL; in test_cr3()
2428 SVM_TEST_CR_RESERVED_BITS(0, 11, 1, 3, cr3_saved, in test_cr3()
2429 SVM_CR3_LONG_RESERVED_MASK, SVM_EXIT_NPF, "(PCIDE=0) "); in test_cr3()
2431 pdpe[0] |= 1ULL; in test_cr3()
2437 pdpe[0] &= ~1ULL; in test_cr3()
2439 SVM_TEST_CR_RESERVED_BITS(0, 2, 1, 3, cr3_saved, in test_cr3()
2442 pdpe[0] |= 1ULL; in test_cr3()
2580 asm volatile ("vmload %0" : : "a"(vmcb_phys) : "memory"); \
2581 asm volatile ("vmsave %0" : : "a"(vmcb_phys) : "memory"); \
2667 guest_rflags_test_trap_rip = 0; in svm_test_singlestep()
2671 guest_rflags_test_trap_rip == 0, "Test EFLAGS.TF on VMRUN: trap not expected"); in svm_test_singlestep()
2682 static unsigned long volatile physical = 0;
2731 report_fail("Got #GP exception - svm errata reproduced at 0x%lx", in svm_vmrun_errata_test()
2751 asm volatile ("vmload %0" : : "a"(vmcb_phys)); in vmload_vmsave_guest_main()
2752 asm volatile ("vmsave %0" : : "a"(vmcb_phys)); in vmload_vmsave_guest_main()
2824 case 0: in vgif_finished()
2882 for (i = 0 ; i < pause_test_counter ; i++) in pause_filter_test_guest_main()
2888 for (i = 0; i < wait_counter; i++) in pause_filter_test_guest_main()
2891 for (i = 0 ; i < pause_test_counter ; i++) in pause_filter_test_guest_main()
2923 pause_filter_run_test(10, 9, 0, 0); in pause_filter_test()
2926 pause_filter_run_test(20, 21, 0, 0); in pause_filter_test()
2963 } while (0)
2975 } while (0)
2978 …report(false, "LBR guest test failed. Exit reason 0x%x, RIP = %lx, from = %lx, to = %lx, ex from …
3014 wrmsr(MSR_IA32_DEBUGCTLMSR, 0); in svm_lbrv_test_guest1()
3018 if (rdmsr(MSR_IA32_DEBUGCTLMSR) != 0) in svm_lbrv_test_guest1()
3035 if (dbgctl != 0) in svm_lbrv_test_guest2()
3043 wrmsr(MSR_IA32_DEBUGCTLMSR, 0); in svm_lbrv_test_guest2()
3058 wrmsr(MSR_IA32_DEBUGCTLMSR, 0); in svm_lbrv_test0()
3062 TEST_EXPECT_EQ(dbgctl, 0); in svm_lbrv_test0()
3072 vmcb->control.virt_ext = 0; in svm_lbrv_test1()
3084 TEST_EXPECT_EQ(dbgctl, 0); in svm_lbrv_test1()
3093 vmcb->control.virt_ext = 0; in svm_lbrv_test2()
3097 wrmsr(MSR_IA32_DEBUGCTLMSR, 0); in svm_lbrv_test2()
3100 wrmsr(MSR_IA32_DEBUGCTLMSR, 0); in svm_lbrv_test2()
3107 TEST_EXPECT_EQ(dbgctl, 0); in svm_lbrv_test2()
3127 wrmsr(MSR_IA32_DEBUGCTLMSR, 0); in svm_lbrv_nested_test1()
3134 if (vmcb->save.dbgctl != 0) { in svm_lbrv_nested_test1()
3135 report(false, "unexpected virtual guest MSR_IA32_DEBUGCTLMSR value 0x%lx", vmcb->save.dbgctl); in svm_lbrv_nested_test1()
3154 vmcb->save.dbgctl = 0; in svm_lbrv_nested_test2()
3162 wrmsr(MSR_IA32_DEBUGCTLMSR, 0); in svm_lbrv_nested_test2()
3195 *counter = 0; in svm_intr_intercept_mix_run_guest()
3211 "Wanted VM-Exit reason 0x%x, got 0x%x", in svm_intr_intercept_mix_run_guest()
3224 report(0, "must not reach here"); in svm_intr_intercept_mix_if_guest()
3230 handle_irq(0x55, dummy_isr); in svm_intr_intercept_mix_if()
3238 apic_icr_write(APIC_DEST_SELF | APIC_DEST_PHYSICAL | APIC_DM_FIXED | 0x55, 0); in svm_intr_intercept_mix_if()
3258 report(0, "must not reach here"); in svm_intr_intercept_mix_gif_guest()
3263 handle_irq(0x55, dummy_isr); in svm_intr_intercept_mix_gif()
3271 apic_icr_write(APIC_DEST_SELF | APIC_DEST_PHYSICAL | APIC_DM_FIXED | 0x55, 0); in svm_intr_intercept_mix_gif()
3284 apic_icr_write(APIC_DEST_SELF | APIC_DEST_PHYSICAL | APIC_DM_FIXED | 0x55, 0); in svm_intr_intercept_mix_gif_guest2()
3288 report(0, "must not reach here"); in svm_intr_intercept_mix_gif_guest2()
3293 handle_irq(0x55, dummy_isr); in svm_intr_intercept_mix_gif2()
3312 apic_icr_write(APIC_DEST_SELF | APIC_DEST_PHYSICAL | APIC_DM_NMI, 0); in svm_intr_intercept_mix_nmi_guest()
3317 report(0, "must not reach here"); in svm_intr_intercept_mix_nmi_guest()
3340 apic_icr_write(APIC_DEST_SELF | APIC_DEST_PHYSICAL | APIC_DM_SMI, 0); in svm_intr_intercept_mix_smi_guest()
3343 report(0, "must not reach here"); in svm_intr_intercept_mix_smi_guest()
3361 run_in_user(generate_usermode_ac, AC_VECTOR, 0, 0, 0, 0, &hit_ac); in svm_l2_ac_test()
3421 for (i = 0; i < ARRAY_SIZE(svm_exception_tests); i++) { in svm_exception_test()