Lines Matching refs:test
40 static void null_test(struct svm_test *test) in null_test() argument
44 static bool null_check(struct svm_test *test) in null_check() argument
49 static void prepare_no_vmrun_int(struct svm_test *test) in prepare_no_vmrun_int() argument
54 static bool check_no_vmrun_int(struct svm_test *test) in check_no_vmrun_int() argument
59 static void test_vmrun(struct svm_test *test) in test_vmrun() argument
64 static bool check_vmrun(struct svm_test *test) in check_vmrun() argument
69 static void prepare_rsm_intercept(struct svm_test *test) in prepare_rsm_intercept() argument
71 default_prepare(test); in prepare_rsm_intercept()
76 static void test_rsm_intercept(struct svm_test *test) in test_rsm_intercept() argument
81 static bool check_rsm_intercept(struct svm_test *test) in check_rsm_intercept() argument
83 return get_test_stage(test) == 2; in check_rsm_intercept()
86 static bool finished_rsm_intercept(struct svm_test *test) in finished_rsm_intercept() argument
88 switch (get_test_stage(test)) { in finished_rsm_intercept()
96 inc_test_stage(test); in finished_rsm_intercept()
106 inc_test_stage(test); in finished_rsm_intercept()
112 return get_test_stage(test) == 2; in finished_rsm_intercept()
115 static void prepare_cr3_intercept(struct svm_test *test) in prepare_cr3_intercept() argument
117 default_prepare(test); in prepare_cr3_intercept()
121 static void test_cr3_intercept(struct svm_test *test) in test_cr3_intercept() argument
123 asm volatile ("mov %%cr3, %0" : "=r"(test->scratch) : : "memory"); in test_cr3_intercept()
126 static bool check_cr3_intercept(struct svm_test *test) in check_cr3_intercept() argument
131 static bool check_cr3_nointercept(struct svm_test *test) in check_cr3_nointercept() argument
133 return null_check(test) && test->scratch == read_cr3(); in check_cr3_nointercept()
138 struct svm_test *test = _test; in corrupt_cr3_intercept_bypass() local
141 while (!__sync_bool_compare_and_swap(&test->scratch, 1, 2)) in corrupt_cr3_intercept_bypass()
149 static void prepare_cr3_intercept_bypass(struct svm_test *test) in prepare_cr3_intercept_bypass() argument
151 default_prepare(test); in prepare_cr3_intercept_bypass()
153 on_cpu_async(1, corrupt_cr3_intercept_bypass, test); in prepare_cr3_intercept_bypass()
156 static void test_cr3_intercept_bypass(struct svm_test *test) in test_cr3_intercept_bypass() argument
160 test->scratch = 1; in test_cr3_intercept_bypass()
161 while (test->scratch != 2) in test_cr3_intercept_bypass()
166 test->scratch = a; in test_cr3_intercept_bypass()
169 static void prepare_dr_intercept(struct svm_test *test) in prepare_dr_intercept() argument
171 default_prepare(test); in prepare_dr_intercept()
176 static void test_dr_intercept(struct svm_test *test) in test_dr_intercept() argument
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()
210 if (test->scratch != i) { 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()
246 if (test->scratch != i) { in test_dr_intercept()
252 test->scratch = failcnt; in test_dr_intercept()
255 static bool dr_intercept_finished(struct svm_test *test) in dr_intercept_finished() argument
270 test->scratch = (n % 16); in dr_intercept_finished()
278 static bool check_dr_intercept(struct svm_test *test) in check_dr_intercept() argument
280 return !test->scratch; in check_dr_intercept()
288 static void prepare_next_rip(struct svm_test *test) in prepare_next_rip() argument
294 static void test_next_rip(struct svm_test *test) in test_next_rip() argument
301 static bool check_next_rip(struct svm_test *test) in check_next_rip() argument
311 static void prepare_msr_intercept(struct svm_test *test) in prepare_msr_intercept() argument
313 default_prepare(test); in prepare_msr_intercept()
319 static void test_msr_intercept(struct svm_test *test) in test_msr_intercept() argument
341 test->scratch = -1; in test_msr_intercept()
346 if (test->scratch != msr_index) in test_msr_intercept()
358 if (test->scratch != msr_value) in test_msr_intercept()
362 test->scratch = -2; in test_msr_intercept()
365 static bool msr_intercept_finished(struct svm_test *test) in msr_intercept_finished() argument
417 test->scratch = in msr_intercept_finished()
420 test->scratch = get_regs().rcx; in msr_intercept_finished()
425 static bool check_msr_intercept(struct svm_test *test) in check_msr_intercept() argument
428 return (test->scratch == -2); in check_msr_intercept()
431 static void prepare_mode_switch(struct svm_test *test) in prepare_mode_switch() argument
437 test->scratch = 0; in prepare_mode_switch()
440 static void test_mode_switch(struct svm_test *test) in test_mode_switch() argument
495 static bool mode_switch_finished(struct svm_test *test) in mode_switch_finished() argument
511 switch (test->scratch) { in mode_switch_finished()
529 test->scratch += 1; in mode_switch_finished()
531 return test->scratch == 2; in mode_switch_finished()
534 static bool check_mode_switch(struct svm_test *test) in check_mode_switch() argument
536 return test->scratch == 2; in check_mode_switch()
541 static void prepare_ioio(struct svm_test *test) in prepare_ioio() argument
544 test->scratch = 0; in prepare_ioio()
549 static void test_ioio(struct svm_test *test) in test_ioio() argument
554 if (get_test_stage(test) != 0) in test_ioio()
559 inc_test_stage(test); in test_ioio()
561 if (get_test_stage(test) != 2) in test_ioio()
565 if (get_test_stage(test) != 3) in test_ioio()
569 if (get_test_stage(test) != 4) in test_ioio()
575 if (get_test_stage(test) != 5) in test_ioio()
580 if (get_test_stage(test) != 6) in test_ioio()
586 if (get_test_stage(test) != 7) in test_ioio()
590 inc_test_stage(test); in test_ioio()
592 if (get_test_stage(test) != 8) in test_ioio()
595 inc_test_stage(test); in test_ioio()
598 if (get_test_stage(test) != 10) in test_ioio()
603 if (get_test_stage(test) != 11) in test_ioio()
609 inc_test_stage(test); in test_ioio()
610 if (get_test_stage(test) != 12) in test_ioio()
616 report_fail("stage %d", get_test_stage(test)); in test_ioio()
617 test->scratch = -1; in test_ioio()
620 static bool ioio_finished(struct svm_test *test) in ioio_finished() argument
632 test->scratch += 1; in ioio_finished()
645 static bool check_ioio(struct svm_test *test) in check_ioio() argument
648 return test->scratch != -1; in check_ioio()
651 static void prepare_asid_zero(struct svm_test *test) in prepare_asid_zero() argument
656 static void test_asid_zero(struct svm_test *test) in test_asid_zero() argument
661 static bool check_asid_zero(struct svm_test *test) in check_asid_zero() argument
666 static void sel_cr0_bug_prepare(struct svm_test *test) in sel_cr0_bug_prepare() argument
671 static bool sel_cr0_bug_finished(struct svm_test *test) in sel_cr0_bug_finished() argument
676 static void sel_cr0_bug_test(struct svm_test *test) in sel_cr0_bug_test() argument
694 static bool sel_cr0_bug_check(struct svm_test *test) in sel_cr0_bug_check() argument
708 static void tsc_adjust_prepare(struct svm_test *test) in tsc_adjust_prepare() argument
710 default_prepare(test); in tsc_adjust_prepare()
718 static void tsc_adjust_test(struct svm_test *test) in tsc_adjust_test() argument
736 static bool tsc_adjust_check(struct svm_test *test) in tsc_adjust_check() argument
750 static void svm_tsc_scale_guest(struct svm_test *test) in svm_tsc_scale_guest() argument
808 static void latency_prepare(struct svm_test *test) in latency_prepare() argument
810 default_prepare(test); in latency_prepare()
818 static void latency_test(struct svm_test *test) in latency_test() argument
841 static bool latency_finished(struct svm_test *test) in latency_finished() argument
866 static bool latency_finished_clean(struct svm_test *test) in latency_finished_clean() argument
869 return latency_finished(test); in latency_finished_clean()
872 static bool latency_check(struct svm_test *test) in latency_check() argument
881 static void lat_svm_insn_prepare(struct svm_test *test) in lat_svm_insn_prepare() argument
883 default_prepare(test); in lat_svm_insn_prepare()
890 static bool lat_svm_insn_finished(struct svm_test *test) in lat_svm_insn_finished() argument
938 static bool lat_svm_insn_check(struct svm_test *test) in lat_svm_insn_check() argument
957 #define report_svm_guest(cond, test, fmt, args...) \ argument
961 set_test_stage(test, -1); \
975 static void pending_event_prepare(struct svm_test *test) in pending_event_prepare() argument
979 default_prepare(test); in pending_event_prepare()
993 set_test_stage(test, 0); in pending_event_prepare()
996 static void pending_event_test(struct svm_test *test) in pending_event_test() argument
1001 static bool pending_event_finished(struct svm_test *test) in pending_event_finished() argument
1003 switch (get_test_stage(test)) { in pending_event_finished()
1035 inc_test_stage(test); in pending_event_finished()
1037 return get_test_stage(test) == 2; in pending_event_finished()
1040 static bool pending_event_check(struct svm_test *test) in pending_event_check() argument
1042 return get_test_stage(test) == 2; in pending_event_check()
1045 static void pending_event_cli_prepare(struct svm_test *test) in pending_event_cli_prepare() argument
1047 default_prepare(test); in pending_event_cli_prepare()
1056 set_test_stage(test, 0); in pending_event_cli_prepare()
1059 static void pending_event_cli_prepare_gif_clear(struct svm_test *test) in pending_event_cli_prepare_gif_clear() argument
1064 static void pending_event_cli_test(struct svm_test *test) in pending_event_cli_test() argument
1066 report_svm_guest(!pending_event_ipi_fired, test, in pending_event_cli_test()
1072 report_svm_guest(pending_event_ipi_fired, test, in pending_event_cli_test()
1084 static bool pending_event_cli_finished(struct svm_test *test) in pending_event_cli_finished() argument
1086 report_svm_guest(vmcb->control.exit_code == SVM_EXIT_VMMCALL, test, in pending_event_cli_finished()
1090 switch (get_test_stage(test)) { in pending_event_cli_finished()
1123 inc_test_stage(test); in pending_event_cli_finished()
1125 return get_test_stage(test) == 2; in pending_event_cli_finished()
1128 static bool pending_event_cli_check(struct svm_test *test) in pending_event_cli_check() argument
1130 return get_test_stage(test) == 2; in pending_event_cli_check()
1143 static void interrupt_prepare(struct svm_test *test) in interrupt_prepare() argument
1145 default_prepare(test); in interrupt_prepare()
1148 set_test_stage(test, 0); in interrupt_prepare()
1151 static void interrupt_test(struct svm_test *test) in interrupt_test() argument
1162 report_svm_guest(timer_fired, test, in interrupt_test()
1174 report_svm_guest(timer_fired, test, in interrupt_test()
1186 report_svm_guest(timer_fired, test, "direct interrupt + hlt"); in interrupt_test()
1198 report_svm_guest(timer_fired, test, "intercepted interrupt + hlt"); in interrupt_test()
1204 static bool interrupt_finished(struct svm_test *test) in interrupt_finished() argument
1206 switch (get_test_stage(test)) { in interrupt_finished()
1241 inc_test_stage(test); in interrupt_finished()
1243 return get_test_stage(test) == 5; in interrupt_finished()
1246 static bool interrupt_check(struct svm_test *test) in interrupt_check() argument
1248 return get_test_stage(test) == 5; in interrupt_check()
1258 static void nmi_prepare(struct svm_test *test) in nmi_prepare() argument
1260 default_prepare(test); in nmi_prepare()
1263 set_test_stage(test, 0); in nmi_prepare()
1266 static void nmi_test(struct svm_test *test) in nmi_test() argument
1270 report_svm_guest(nmi_fired, test, "direct NMI while running guest"); in nmi_test()
1278 report_svm_guest(nmi_fired, test, "intercepted pending NMI delivered to guest"); in nmi_test()
1281 static bool nmi_finished(struct svm_test *test) in nmi_finished() argument
1283 switch (get_test_stage(test)) { in nmi_finished()
1312 inc_test_stage(test); in nmi_finished()
1314 return get_test_stage(test) == 3; in nmi_finished()
1317 static bool nmi_check(struct svm_test *test) in nmi_check() argument
1319 return get_test_stage(test) == 3; in nmi_check()
1326 struct svm_test *test = _test; in nmi_message_thread() local
1328 while (get_test_stage(test) != 1) in nmi_message_thread()
1335 while (get_test_stage(test) != 2) in nmi_message_thread()
1343 static void nmi_hlt_test(struct svm_test *test) in nmi_hlt_test() argument
1347 on_cpu_async(1, nmi_message_thread, test); in nmi_hlt_test()
1351 set_test_stage(test, 1); in nmi_hlt_test()
1355 report_svm_guest(nmi_fired, test, "direct NMI + hlt"); in nmi_hlt_test()
1364 set_test_stage(test, 2); in nmi_hlt_test()
1368 report_svm_guest(nmi_fired, test, "intercepted NMI + hlt"); in nmi_hlt_test()
1371 set_test_stage(test, 3); in nmi_hlt_test()
1374 static bool nmi_hlt_finished(struct svm_test *test) in nmi_hlt_finished() argument
1376 switch (get_test_stage(test)) { in nmi_hlt_finished()
1405 return get_test_stage(test) == 3; in nmi_hlt_finished()
1408 static bool nmi_hlt_check(struct svm_test *test) in nmi_hlt_check() argument
1410 return get_test_stage(test) == 3; in nmi_hlt_check()
1413 static void vnmi_prepare(struct svm_test *test) in vnmi_prepare() argument
1415 nmi_prepare(test); in vnmi_prepare()
1426 static void vnmi_test(struct svm_test *test) in vnmi_test() argument
1428 report_svm_guest(!nmi_fired, test, "No vNMI before injection"); in vnmi_test()
1431 report_svm_guest(nmi_fired, test, "vNMI delivered after injection"); in vnmi_test()
1435 static bool vnmi_finished(struct svm_test *test) in vnmi_finished() argument
1437 switch (get_test_stage(test)) { in vnmi_finished()
1478 inc_test_stage(test); in vnmi_finished()
1480 return get_test_stage(test) == 3; in vnmi_finished()
1483 static bool vnmi_check(struct svm_test *test) in vnmi_check() argument
1485 return get_test_stage(test) == 3; in vnmi_check()
1495 static void exc_inject_prepare(struct svm_test *test) in exc_inject_prepare() argument
1497 default_prepare(test); in exc_inject_prepare()
1503 static void exc_inject_test(struct svm_test *test) in exc_inject_test() argument
1508 static bool exc_inject_finished(struct svm_test *test) in exc_inject_finished() argument
1510 switch (get_test_stage(test)) { in exc_inject_finished()
1546 inc_test_stage(test); in exc_inject_finished()
1548 return get_test_stage(test) == 3; in exc_inject_finished()
1551 static bool exc_inject_check(struct svm_test *test) in exc_inject_check() argument
1553 return count_exc == 1 && get_test_stage(test) == 3; in exc_inject_check()
1565 static void virq_inject_prepare(struct svm_test *test) in virq_inject_prepare() argument
1568 default_prepare(test); in virq_inject_prepare()
1574 set_test_stage(test, 0); in virq_inject_prepare()
1577 static void virq_inject_test(struct svm_test *test) in virq_inject_test() argument
1579 report_svm_guest(!virq_fired, test, "virtual IRQ blocked after L2 cli"); in virq_inject_test()
1583 report_svm_guest(virq_fired, test, "virtual IRQ fired after L2 sti"); in virq_inject_test()
1587 report_svm_guest(!virq_fired, test, "intercepted VINTR blocked after L2 cli"); in virq_inject_test()
1591 report_svm_guest(virq_fired, test, "intercepted VINTR fired after L2 sti"); in virq_inject_test()
1597 report_svm_guest(!virq_fired, test, in virq_inject_test()
1604 static bool virq_inject_finished(struct svm_test *test) in virq_inject_finished() argument
1608 switch (get_test_stage(test)) { in virq_inject_finished()
1674 inc_test_stage(test); in virq_inject_finished()
1676 return get_test_stage(test) == 5; in virq_inject_finished()
1679 static bool virq_inject_check(struct svm_test *test) in virq_inject_check() argument
1681 return get_test_stage(test) == 5; in virq_inject_check()
1684 static void virq_inject_within_shadow_prepare(struct svm_test *test) in virq_inject_within_shadow_prepare() argument
1686 virq_inject_prepare(test); in virq_inject_within_shadow_prepare()
1691 extern void virq_inject_within_shadow_test(struct svm_test *test);
1694 static void virq_inject_within_shadow_prepare_gif_clear(struct svm_test *test) in virq_inject_within_shadow_prepare_gif_clear() argument
1696 vmcb->save.rip = (unsigned long) test->guest_func; in virq_inject_within_shadow_prepare_gif_clear()
1699 static bool virq_inject_within_shadow_finished(struct svm_test *test) in virq_inject_within_shadow_finished() argument
1713 inc_test_stage(test); in virq_inject_within_shadow_finished()
1718 static bool virq_inject_within_shadow_check(struct svm_test *test) in virq_inject_within_shadow_check() argument
1720 return get_test_stage(test) == 1; in virq_inject_within_shadow_check()
1753 static void reg_corruption_prepare(struct svm_test *test) in reg_corruption_prepare() argument
1755 default_prepare(test); in reg_corruption_prepare()
1756 set_test_stage(test, 0); in reg_corruption_prepare()
1768 static void reg_corruption_test(struct svm_test *test) in reg_corruption_test() argument
1786 static bool reg_corruption_finished(struct svm_test *test) in reg_corruption_finished() argument
1791 set_test_stage(test, 1); in reg_corruption_finished()
1815 static bool reg_corruption_check(struct svm_test *test) in reg_corruption_check() argument
1817 return get_test_stage(test) == 1; in reg_corruption_check()
1827 static void init_startup_prepare(struct svm_test *test) in init_startup_prepare() argument
1851 static bool init_startup_finished(struct svm_test *test) in init_startup_finished() argument
1856 static bool init_startup_check(struct svm_test *test) in init_startup_check() argument
1863 static void init_intercept_prepare(struct svm_test *test) in init_intercept_prepare() argument
1869 static void init_intercept_test(struct svm_test *test) in init_intercept_test() argument
1874 static bool init_intercept_finished(struct svm_test *test) in init_intercept_finished() argument
1892 static bool init_intercept_check(struct svm_test *test) in init_intercept_check() argument
1948 static void host_rflags_prepare(struct svm_test *test) in host_rflags_prepare() argument
1950 default_prepare(test); in host_rflags_prepare()
1952 set_test_stage(test, 0); in host_rflags_prepare()
1955 static void host_rflags_prepare_gif_clear(struct svm_test *test) in host_rflags_prepare_gif_clear() argument
1961 static void host_rflags_test(struct svm_test *test) in host_rflags_test() argument
1964 if (get_test_stage(test) > 0) { in host_rflags_test()
1970 if (get_test_stage(test) == 4) in host_rflags_test()
1976 static bool host_rflags_finished(struct svm_test *test) in host_rflags_finished() argument
1978 switch (get_test_stage(test)) { in host_rflags_finished()
2042 inc_test_stage(test); in host_rflags_finished()
2043 return get_test_stage(test) == 5; in host_rflags_finished()
2046 static bool host_rflags_check(struct svm_test *test) in host_rflags_check() argument
2048 return get_test_stage(test) == 4; in host_rflags_check()
2063 static void svm_cr4_osxsave_test_guest(struct svm_test *test) in svm_cr4_osxsave_test_guest() argument
2091 static void basic_guest_main(struct svm_test *test) in basic_guest_main() argument
2506 extern void guest_rflags_test_guest(struct svm_test *test);
2617 static void vmload_vmsave_guest_main(struct svm_test *test) in vmload_vmsave_guest_main() argument
2680 static void prepare_vgif_enabled(struct svm_test *test) in prepare_vgif_enabled() argument
2682 default_prepare(test); in prepare_vgif_enabled()
2685 static void test_vgif(struct svm_test *test) in test_vgif() argument
2690 static bool vgif_finished(struct svm_test *test) in vgif_finished() argument
2692 switch (get_test_stage(test)) in vgif_finished()
2701 inc_test_stage(test); in vgif_finished()
2715 inc_test_stage(test); in vgif_finished()
2729 inc_test_stage(test); in vgif_finished()
2737 return get_test_stage(test) == 3; in vgif_finished()
2740 static bool vgif_check(struct svm_test *test) in vgif_check() argument
2742 return get_test_stage(test) == 3; in vgif_check()
2749 static void pause_filter_test_guest_main(struct svm_test *test) in pause_filter_test_guest_main() argument
3087 static void svm_intr_intercept_mix_if_guest(struct svm_test *test) in svm_intr_intercept_mix_if_guest() argument
3113 static void svm_intr_intercept_mix_gif_guest(struct svm_test *test) in svm_intr_intercept_mix_gif_guest() argument
3146 static void svm_intr_intercept_mix_gif_guest2(struct svm_test *test) in svm_intr_intercept_mix_gif_guest2() argument
3173 static void svm_intr_intercept_mix_nmi_guest(struct svm_test *test) in svm_intr_intercept_mix_nmi_guest() argument
3203 static void svm_intr_intercept_mix_smi_guest(struct svm_test *test) in svm_intr_intercept_mix_smi_guest() argument
3301 static void shutdown_intercept_test_guest(struct svm_test *test) in shutdown_intercept_test_guest() argument