| /linux/tools/testing/selftests/kvm/x86/ |
| H A D | hyperv_svm_test.c | 70 struct vmcb *vmcb = svm->vmcb; in guest_code() 71 struct hv_vmcb_enlightenments *hve = &vmcb->control.hv_enlightenments; in guest_code() 92 run_guest(vmcb, svm->vmcb_gpa); in guest_code() 93 GUEST_ASSERT(vmcb->control.exit_code == SVM_EXIT_VMMCALL); in guest_code() 95 vmcb->save.rip += 3; in guest_code() 98 vmcb->control.intercept |= 1ULL << INTERCEPT_MSR_PROT; in guest_code() 100 run_guest(vmcb, svm->vmcb_gpa); in guest_code() 101 GUEST_ASSERT(vmcb in guest_code() 73 struct vmcb *vmcb = svm->vmcb; guest_code() local [all...] |
| H A D | nested_vmsave_vmload_test.c | 75 svm->vmcb->control.intercept |= (BIT_ULL(INTERCEPT_VMSAVE) | in l1_guest_code() 79 svm->vmcb->control.misc_ctl2 &= ~SVM_MISC2_ENABLE_V_VMLOAD_VMSAVE; in l1_guest_code() 81 svm->vmcb->save.rip = (u64)l2_guest_code_vmsave; in l1_guest_code() 82 run_guest(svm->vmcb, svm->vmcb_gpa); in l1_guest_code() 83 GUEST_ASSERT_EQ(svm->vmcb->control.exit_code, SVM_EXIT_VMSAVE); in l1_guest_code() 85 svm->vmcb->save.rip = (u64)l2_guest_code_vmload; in l1_guest_code() 86 run_guest(svm->vmcb, svm->vmcb_gpa); in l1_guest_code() 87 GUEST_ASSERT_EQ(svm->vmcb->control.exit_code, SVM_EXIT_VMLOAD); in l1_guest_code() 90 svm->vmcb->control.misc_ctl2 |= SVM_MISC2_ENABLE_V_VMLOAD_VMSAVE; in l1_guest_code() 92 svm->vmcb in l1_guest_code() [all...] |
| H A D | svm_nested_soft_inject_test.c | 81 struct vmcb *vmcb = svm->vmcb; in l1_guest_code() 89 vmcb->control.intercept_exceptions |= BIT(PF_VECTOR) | BIT(UD_VECTOR); in l1_guest_code() 90 vmcb->control.intercept |= BIT(INTERCEPT_NMI) | BIT(INTERCEPT_HLT); in l1_guest_code() 93 vmcb->control.event_inj = SVM_EVTINJ_VALID | SVM_EVTINJ_TYPE_NMI; in l1_guest_code() 95 vmcb->control.event_inj = INT_NR | SVM_EVTINJ_VALID | SVM_EVTINJ_TYPE_SOFT; in l1_guest_code() 97 vmcb->control.next_rip = vmcb->save.rip; in l1_guest_code() 100 run_guest(vmcb, sv in l1_guest_code() 83 struct vmcb *vmcb = svm->vmcb; l1_guest_code() local [all...] |
| H A D | nested_emulation_test.c | 58 struct vmcb *vmcb = svm->vmcb; in guest_code() local 61 vmcb->save.idtr.limit = 0; in guest_code() 62 vmcb->save.rip = (u64)l2_guest_code; in guest_code() 64 vmcb->control.intercept |= BIT_ULL(INTERCEPT_SHUTDOWN) | in guest_code() 67 vmcb->control.intercept_exceptions = 0; in guest_code() 98 struct vmcb *vmcb = svm->vmcb; in guest_code() local [all...] |
| H A D | svm_lbr_nested_state.c | 39 #define CHECK_BRANCH_VMCB(b, vmcb) \ 41 GUEST_ASSERT_EQ((b)->from, vmcb->save.br_from); \ argument 42 GUEST_ASSERT_EQ((b)->to, vmcb->save.br_to); \ 56 struct vmcb *vmcb = svm->vmcb; in l1_guest_code() 68 vmcb->control.misc_ctl2 = SVM_MISC2_ENABLE_V_LBR; in l1_guest_code() 70 vmcb->control.misc_ctl2 &= ~SVM_MISC2_ENABLE_V_LBR; in l1_guest_code() 72 run_guest(vmcb, svm->vmcb_gpa); in l1_guest_code() 73 GUEST_ASSERT(svm->vmcb in l1_guest_code() 59 struct vmcb *vmcb = svm->vmcb; l1_guest_code() local [all...] |
| H A D | svm_int_ctl_test.c | 57 struct vmcb *vmcb = svm->vmcb; in l1_guest_code() 65 vmcb->control.int_ctl &= ~V_INTR_MASKING_MASK; in l1_guest_code() 68 vmcb->control.intercept &= ~(BIT(INTERCEPT_INTR) | BIT(INTERCEPT_VINTR)); in l1_guest_code() 71 vmcb->control.int_ctl |= V_IRQ_MASK | (0x1 << V_INTR_PRIO_SHIFT); in l1_guest_code() 72 vmcb->control.int_vector = VINTR_IRQ_NUMBER; in l1_guest_code() 74 run_guest(vmcb, svm->vmcb_gpa); in l1_guest_code() 75 GUEST_ASSERT(vmcb->control.exit_code == SVM_EXIT_VMMCALL); in l1_guest_code() 59 struct vmcb *vmcb = svm->vmcb; l1_guest_code() local
|
| H A D | state_test.c | 36 struct vmcb *vmcb = svm->vmcb; in svm_l1_guest_code() 42 vmcb->control.int_ctl |= (V_GIF_ENABLE_MASK | V_GIF_MASK); in svm_l1_guest_code() 45 run_guest(vmcb, svm->vmcb_gpa); in svm_l1_guest_code() 46 GUEST_ASSERT(vmcb->control.exit_code == SVM_EXIT_VMMCALL); in svm_l1_guest_code() 48 vmcb->save.rip += 3; in svm_l1_guest_code() 49 run_guest(vmcb, svm->vmcb_gpa); in svm_l1_guest_code() 50 GUEST_ASSERT(vmcb->control.exit_code == SVM_EXIT_VMMCALL); in svm_l1_guest_code() 224 struct vmcb *vmc in guest_code() 39 struct vmcb *vmcb = svm->vmcb; svm_l1_guest_code() local 231 struct vmcb *vmcb = (struct vmcb *)state->nested.data.svm; svm_check_nested_state() local [all...] |
| H A D | nested_invalid_cr3_test.c | 26 save_cr3 = svm->vmcb->save.cr3; in l1_svm_code() 27 svm->vmcb->save.cr3 = -1ull; in l1_svm_code() 28 run_guest(svm->vmcb, svm->vmcb_gpa); in l1_svm_code() 29 GUEST_ASSERT(svm->vmcb->control.exit_code == SVM_EXIT_ERR); in l1_svm_code() 32 svm->vmcb->save.cr3 = save_cr3; in l1_svm_code() 33 run_guest(svm->vmcb, svm->vmcb_gpa); in l1_svm_code() 34 GUEST_ASSERT(svm->vmcb->control.exit_code == SVM_EXIT_VMMCALL); in l1_svm_code()
|
| H A D | svm_nested_shutdown_test.c | 22 struct vmcb *vmcb = svm->vmcb; in l1_guest_code() 26 vmcb->control.intercept &= ~(BIT(INTERCEPT_SHUTDOWN)); in l1_guest_code() 33 run_guest(vmcb, svm->vmcb_gpa); in l1_guest_code() 24 struct vmcb *vmcb = svm->vmcb; l1_guest_code() local
|
| H A D | svm_vmcall_test.c | 22 struct vmcb *vmcb = svm->vmcb; in l1_guest_code() 27 run_guest(vmcb, svm->vmcb_gpa); in l1_guest_code() 29 GUEST_ASSERT(vmcb->control.exit_code == SVM_EXIT_VMMCALL); in l1_guest_code() 24 struct vmcb *vmcb = svm->vmcb; l1_guest_code() local
|
| H A D | triple_fault_event_test.c | 41 struct vmcb *vmcb = svm->vmcb; in l1_guest_code_vmx() 46 vmcb->control.intercept &= ~(BIT(INTERCEPT_SHUTDOWN)); in l1_guest_code_svm() 48 run_guest(vmcb, svm->vmcb_gpa); in l1_guest_code_svm() 45 struct vmcb *vmcb = svm->vmcb; l1_guest_code_svm() local
|
| H A D | nested_exceptions_test.c | 75 struct vmcb *vmcb = svm->vmcb; in svm_run_l2() 76 struct vmcb_control_area *ctrl = &vmcb->control; in svm_run_l2() 78 vmcb->save.rip = (u64)l2_code; in svm_run_l2() 79 run_guest(vmcb, svm->vmcb_gpa); in svm_run_l2() 91 struct vmcb_control_area *ctrl = &svm->vmcb->control; in l1_svm_code() 94 svm->vmcb->save.idtr.limit = 0; in l1_svm_code() 77 struct vmcb *vmcb = svm->vmcb; svm_run_l2() local
|
| H A D | kvm_buslock_test.c | 37 struct vmcb *vmcb = svm->vmcb; in l1_svm_code() 40 run_guest(vmcb, svm->vmcb_gpa); in l1_svm_code() local
|
| H A D | aperfmperf_test.c | 65 struct vmcb *vmcb = svm->vmcb; in l1_svm_code() 68 run_guest(vmcb, svm->vmcb_gpa); in l1_svm_code() local
|
| H A D | nested_tsc_adjust_test.c | 105 svm->vmcb->control.tsc_offset = TSC_OFFSET_VALUE; in l1_guest_code() 106 run_guest(svm->vmcb, svm->vmcb_gpa); in l1_guest_code() 107 GUEST_ASSERT(svm->vmcb->control.exit_code == SVM_EXIT_VMMCALL); in l1_guest_code()
|
| H A D | smm_test.c | 93 run_guest(svm->vmcb, svm->vmcb_gpa); in guest_code() 94 run_guest(svm->vmcb, svm->vmcb_gpa); in guest_code()
|
| H A D | svm_nested_vmcb12_gpa.c | 51 run_guest(svm->vmcb, svm->vmcb_gpa); 52 GUEST_ASSERT(svm->vmcb->control.exit_code == SVM_EXIT_VMMCALL); in l1_vmexit()
|
| H A D | nested_tsc_scaling_test.c | 92 run_guest(svm->vmcb, svm->vmcb_gpa); in l1_svm_code() 93 GUEST_ASSERT(svm->vmcb->control.exit_code == SVM_EXIT_VMMCALL); in l1_svm_code()
|
| H A D | nested_dirty_log_test.c | 125 run_guest(svm->vmcb, svm->vmcb_gpa); in l1_svm_code() 127 GUEST_ASSERT_EQ(svm->vmcb->control.exit_code, SVM_EXIT_VMMCALL); in l1_svm_code()
|
| /linux/arch/x86/kvm/svm/ |
| H A D | svm_onhyperv.h | 20 struct hv_vmcb_enlightenments *hve = &to_svm(vcpu)->vmcb->control.hv_enlightenments; in svm_hv_is_enlightened_tlb_enabled() 26 static inline void svm_hv_init_vmcb(struct vmcb *vmcb) in svm_hv_init_vmcb() argument 28 struct hv_vmcb_enlightenments *hve = &vmcb->control.hv_enlightenments; in svm_hv_init_vmcb() 30 BUILD_BUG_ON(sizeof(vmcb->control.hv_enlightenments) != in svm_hv_init_vmcb() 31 sizeof(vmcb->control.reserved_sw)); in svm_hv_init_vmcb() 44 struct vmcb *vmcb = to_svm(vcpu)->vmcb; in svm_hv_vmcb_dirty_nested_enlightenments() local 45 struct hv_vmcb_enlightenments *hve = &vmcb->control.hv_enlightenments; in svm_hv_vmcb_dirty_nested_enlightenments() 48 vmcb_mark_dirty(vmcb, HV_VMCB_NESTED_ENLIGHTENMENTS); in svm_hv_vmcb_dirty_nested_enlightenments() 51 static inline void svm_hv_update_vp_id(struct vmcb *vmcb, struct kvm_vcpu *vcpu) in svm_hv_update_vp_id() argument 53 struct hv_vmcb_enlightenments *hve = &vmcb->control.hv_enlightenments; in svm_hv_update_vp_id() [all …]
|
| H A D | svm.c | 272 svm->vmcb->save.efer = efer | EFER_SVME; in svm_set_efer() 273 vmcb_mark_dirty(svm->vmcb, VMCB_CR); in svm_set_efer() 282 if (svm->vmcb->control.int_state & SVM_INTERRUPT_SHADOW_MASK) in svm_get_interrupt_shadow() 292 svm->vmcb->control.int_state &= ~SVM_INTERRUPT_SHADOW_MASK; in svm_set_interrupt_shadow() 294 svm->vmcb->control.int_state |= SVM_INTERRUPT_SHADOW_MASK; in svm_set_interrupt_shadow() 312 if (nrips && svm->vmcb->control.next_rip != 0) { in __svm_skip_emulated_instruction() 314 svm->next_rip = svm->vmcb->control.next_rip; in __svm_skip_emulated_instruction() 319 old_rflags = svm->vmcb->save.rflags; in __svm_skip_emulated_instruction() 325 svm->vmcb->save.rflags = old_rflags; in __svm_skip_emulated_instruction() 376 svm->soft_int_csbase = svm->vmcb in svm_update_soft_interrupt_rip() 643 struct vmcb *vmcb = svm->vmcb01.ptr; set_dr_intercepts() local 667 struct vmcb *vmcb = svm->vmcb01.ptr; clr_dr_intercepts() local 1129 struct vmcb *vmcb = svm->vmcb01.ptr; init_vmcb() local 1528 struct vmcb *vmcb = to_svm(vcpu)->vmcb; svm_get_if_flag() local 1915 struct vmcb *vmcb = to_svm(vcpu)->vmcb; svm_set_dr6() local 4015 struct vmcb *vmcb = svm->vmcb; svm_nmi_blocked() local 4047 struct vmcb *vmcb = svm->vmcb; svm_interrupt_blocked() local 4839 struct vmcb *vmcb = svm->vmcb; svm_check_intercept() local [all...] |
| H A D | svm_onhyperv.c | 26 hve = &to_svm(vcpu)->vmcb->control.hv_enlightenments; in svm_hv_enable_l2_tlb_flush() 32 vmcb_mark_dirty(to_svm(vcpu)->vmcb, HV_VMCB_NESTED_ENLIGHTENMENTS); in svm_hv_enable_l2_tlb_flush()
|
| /linux/tools/testing/selftests/kvm/lib/x86/ |
| H A D | svm.c | 33 svm->vmcb = (void *)vm_alloc_page(vm); in vcpu_alloc_svm() 34 svm->vmcb_hva = addr_gva2hva(vm, (uintptr_t)svm->vmcb); in vcpu_alloc_svm() 35 svm->vmcb_gpa = addr_gva2gpa(vm, (uintptr_t)svm->vmcb); in vcpu_alloc_svm() 85 struct vmcb *vmcb = svm->vmcb; in generic_svm_setup() 87 struct vmcb_save_area *save = &vmcb->save; in generic_svm_setup() 88 struct vmcb_control_area *ctrl = &vmcb->control; in generic_svm_setup() 99 memset(vmcb, 0, sizeof(*vmcb)); in generic_svm_setup() 86 struct vmcb *vmcb = svm->vmcb; generic_svm_setup() local 161 run_guest(struct vmcb * vmcb,u64 vmcb_gpa) run_guest() argument [all...] |
| H A D | memstress.c | 53 run_guest(svm->vmcb, svm->vmcb_gpa); 54 GUEST_ASSERT_EQ(svm->vmcb->control.exit_code, SVM_EXIT_VMMCALL); in l1_svm_code()
|
| /linux/tools/testing/selftests/kvm/include/x86/ |
| H A D | svm_util.h | 17 struct vmcb *vmcb; /* gva */ member 64 void run_guest(struct vmcb *vmcb, u64 vmcb_gpa); in kvm_cpu_has_npt()
|