| /linux/tools/testing/selftests/kvm/x86/ |
| H A D | hyperv_svm_test.c | 73 struct vmcb *vmcb = svm->vmcb; in guest_code() local 74 struct hv_vmcb_enlightenments *hve = &vmcb->control.hv_enlightenments; in guest_code() 96 run_guest(vmcb, svm->vmcb_gpa); in guest_code() 97 GUEST_ASSERT(vmcb->control.exit_code == SVM_EXIT_VMMCALL); in guest_code() 99 vmcb->save.rip += 3; in guest_code() 102 vmcb->control.intercept |= 1ULL << INTERCEPT_MSR_PROT; in guest_code() 104 run_guest(vmcb, svm->vmcb_gpa); in guest_code() 105 GUEST_ASSERT(vmcb->control.exit_code == SVM_EXIT_MSR); in guest_code() 106 vmcb->save.rip += 2; /* rdmsr */ in guest_code() 110 run_guest(vmcb, svm->vmcb_gpa); in guest_code() [all …]
|
| H A D | nested_vmsave_vmload_test.c | 79 svm->vmcb->control.intercept |= (BIT_ULL(INTERCEPT_VMSAVE) | in l1_guest_code() 83 svm->vmcb->control.virt_ext &= ~VIRTUAL_VMLOAD_VMSAVE_ENABLE_MASK; in l1_guest_code() 85 svm->vmcb->save.rip = (u64)l2_guest_code_vmsave; 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_VMSAVE); in l1_guest_code() 89 svm->vmcb->save.rip = (u64)l2_guest_code_vmload; in l1_guest_code() 90 run_guest(svm->vmcb, svm->vmcb_gpa); in l1_guest_code() 91 GUEST_ASSERT_EQ(svm->vmcb->control.exit_code, SVM_EXIT_VMLOAD); in l1_guest_code() 94 svm->vmcb->control.virt_ext |= VIRTUAL_VMLOAD_VMSAVE_ENABLE_MASK; in l1_guest_code() 96 svm->vmcb->save.rip = (u64)l2_guest_code_vmsave; in l1_guest_code() [all …]
|
| H A D | svm_nested_soft_inject_test.c | 83 struct vmcb *vmcb = svm->vmcb; in l1_guest_code() local 93 vmcb->control.intercept_exceptions |= BIT(PF_VECTOR) | BIT(UD_VECTOR); in l1_guest_code() 94 vmcb->control.intercept |= BIT(INTERCEPT_NMI) | BIT(INTERCEPT_HLT); in l1_guest_code() 97 vmcb->control.event_inj = SVM_EVTINJ_VALID | SVM_EVTINJ_TYPE_NMI; in l1_guest_code() 99 vmcb->control.event_inj = INT_NR | SVM_EVTINJ_VALID | SVM_EVTINJ_TYPE_SOFT; in l1_guest_code() 101 vmcb->control.next_rip = vmcb->save.rip; in l1_guest_code() 104 run_guest(vmcb, svm->vmcb_gpa); in l1_guest_code() 105 __GUEST_ASSERT(vmcb->control.exit_code == SVM_EXIT_VMMCALL, in l1_guest_code() 107 vmcb->control.exit_code, in l1_guest_code() 108 vmcb->control.exit_info_1, vmcb->control.exit_info_2); in l1_guest_code() [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 100 run_guest(vmcb, svm->vmcb_gpa); in guest_code() 101 exit_reason = vmcb->control.exit_code; in guest_code() 102 exit_insn_len = vmcb->control.next_rip - vmcb->save.rip; in guest_code() 103 GUEST_ASSERT_EQ(vmcb->save.rip, (u64)l2_instruction); in guest_code()
|
| H A D | svm_int_ctl_test.c | 59 struct vmcb *vmcb = svm->vmcb; in l1_guest_code() local 68 vmcb->control.int_ctl &= ~V_INTR_MASKING_MASK; in l1_guest_code() 71 vmcb->control.intercept &= ~(BIT(INTERCEPT_INTR) | BIT(INTERCEPT_VINTR)); in l1_guest_code() 74 vmcb->control.int_ctl |= V_IRQ_MASK | (0x1 << V_INTR_PRIO_SHIFT); in l1_guest_code() 75 vmcb->control.int_vector = VINTR_IRQ_NUMBER; in l1_guest_code() 77 run_guest(vmcb, svm->vmcb_gpa); in l1_guest_code() 78 GUEST_ASSERT(vmcb->control.exit_code == SVM_EXIT_VMMCALL); in l1_guest_code()
|
| H A D | nested_invalid_cr3_test.c | 30 save_cr3 = svm->vmcb->save.cr3; in l1_svm_code() 31 svm->vmcb->save.cr3 = -1ull; in l1_svm_code() 32 run_guest(svm->vmcb, svm->vmcb_gpa); in l1_svm_code() 33 GUEST_ASSERT(svm->vmcb->control.exit_code == SVM_EXIT_ERR); in l1_svm_code() 36 svm->vmcb->save.cr3 = save_cr3; in l1_svm_code() 37 run_guest(svm->vmcb, svm->vmcb_gpa); in l1_svm_code() 38 GUEST_ASSERT(svm->vmcb->control.exit_code == SVM_EXIT_VMMCALL); in l1_svm_code()
|
| H A D | svm_nested_shutdown_test.c | 24 struct vmcb *vmcb = svm->vmcb; in l1_guest_code() local 29 vmcb->control.intercept &= ~(BIT(INTERCEPT_SHUTDOWN)); in l1_guest_code() 36 run_guest(vmcb, svm->vmcb_gpa); in l1_guest_code()
|
| H A D | svm_vmcall_test.c | 24 struct vmcb *vmcb = svm->vmcb; in l1_guest_code() local 30 run_guest(vmcb, svm->vmcb_gpa); in l1_guest_code() 32 GUEST_ASSERT(vmcb->control.exit_code == SVM_EXIT_VMMCALL); in l1_guest_code()
|
| H A D | state_test.c | 37 struct vmcb *vmcb = svm->vmcb; in svm_l1_guest_code() local 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()
|
| H A D | nested_exceptions_test.c | 77 struct vmcb *vmcb = svm->vmcb; in svm_run_l2() local 78 struct vmcb_control_area *ctrl = &vmcb->control; in svm_run_l2() 80 vmcb->save.rip = (u64)l2_code; in svm_run_l2() 81 run_guest(vmcb, svm->vmcb_gpa); in svm_run_l2() 93 struct vmcb_control_area *ctrl = &svm->vmcb->control; in l1_svm_code() 97 svm->vmcb->save.idtr.limit = 0; in l1_svm_code()
|
| H A D | triple_fault_event_test.c | 45 struct vmcb *vmcb = svm->vmcb; in l1_guest_code_svm() local 51 vmcb->control.intercept &= ~(BIT(INTERCEPT_SHUTDOWN)); in l1_guest_code_svm() 53 run_guest(vmcb, svm->vmcb_gpa); in l1_guest_code_svm()
|
| H A D | kvm_buslock_test.c | 40 struct vmcb *vmcb = svm->vmcb; in l1_svm_code() local 43 run_guest(vmcb, svm->vmcb_gpa); in l1_svm_code()
|
| H A D | aperfmperf_test.c | 68 struct vmcb *vmcb = svm->vmcb; in l1_svm_code() local 71 run_guest(vmcb, svm->vmcb_gpa); in l1_svm_code()
|
| H A D | nested_tsc_adjust_test.c | 111 svm->vmcb->control.tsc_offset = TSC_OFFSET_VALUE; in l1_guest_code() 112 run_guest(svm->vmcb, svm->vmcb_gpa); in l1_guest_code() 113 GUEST_ASSERT(svm->vmcb->control.exit_code == SVM_EXIT_VMMCALL); in l1_guest_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.h | 136 struct vmcb *ptr; 255 struct vmcb *vmcb; member 351 struct vmcb *save_area; 355 struct vmcb **sev_vmcbs; 402 static inline void vmcb_mark_all_dirty(struct vmcb *vmcb) in vmcb_mark_all_dirty() argument 404 vmcb->control.clean = 0; in vmcb_mark_all_dirty() 407 static inline void vmcb_mark_all_clean(struct vmcb *vmcb) in vmcb_mark_all_clean() argument 409 vmcb->control.clean = VMCB_ALL_CLEAN_MASK in vmcb_mark_all_clean() 413 static inline void vmcb_mark_dirty(struct vmcb *vmcb, int bit) in vmcb_mark_dirty() argument 415 vmcb->control.clean &= ~(1 << bit); in vmcb_mark_dirty() [all …]
|
| H A D | svm.c | 249 svm->vmcb->save.efer = efer | EFER_SVME; in svm_set_efer() 250 vmcb_mark_dirty(svm->vmcb, VMCB_CR); in svm_set_efer() 259 if (svm->vmcb->control.int_state & SVM_INTERRUPT_SHADOW_MASK) in svm_get_interrupt_shadow() 269 svm->vmcb->control.int_state &= ~SVM_INTERRUPT_SHADOW_MASK; in svm_set_interrupt_shadow() 271 svm->vmcb->control.int_state |= SVM_INTERRUPT_SHADOW_MASK; in svm_set_interrupt_shadow() 289 if (nrips && svm->vmcb->control.next_rip != 0) { in __svm_skip_emulated_instruction() 291 svm->next_rip = svm->vmcb->control.next_rip; in __svm_skip_emulated_instruction() 296 old_rflags = svm->vmcb->save.rflags; in __svm_skip_emulated_instruction() 302 svm->vmcb->save.rflags = old_rflags; in __svm_skip_emulated_instruction() 353 svm->soft_int_csbase = svm->vmcb->save.cs.base; in svm_update_soft_interrupt_rip() [all …]
|
| H A D | nested.c | 40 struct vmcb *vmcb = svm->vmcb; in nested_svm_inject_npf_exit() local 42 if (vmcb->control.exit_code != SVM_EXIT_NPF) { in nested_svm_inject_npf_exit() 47 vmcb->control.exit_code = SVM_EXIT_NPF; in nested_svm_inject_npf_exit() 48 vmcb->control.exit_info_1 = (1ULL << 32); in nested_svm_inject_npf_exit() 49 vmcb->control.exit_info_2 = fault->address; in nested_svm_inject_npf_exit() 52 vmcb->control.exit_info_1 &= ~0xffffffffULL; in nested_svm_inject_npf_exit() 53 vmcb->control.exit_info_1 |= fault->error_code; in nested_svm_inject_npf_exit() 131 vmcb_mark_dirty(svm->vmcb, VMCB_INTERCEPTS); in recalc_intercepts() 136 c = &svm->vmcb->control; in recalc_intercepts() 326 svm->vmcb->control.msrpm_base_pa = __sme_set(__pa(svm->nested.msrpm)); in nested_svm_merge_msrpm() [all …]
|
| H A D | avic.c | 188 struct vmcb *vmcb = svm->vmcb01.ptr; in avic_activate_vmcb() local 191 vmcb->control.int_ctl &= ~(AVIC_ENABLE_MASK | X2APIC_MODE_MASK); in avic_activate_vmcb() 192 vmcb->control.avic_physical_id &= ~AVIC_PHYSICAL_MAX_INDEX_MASK; in avic_activate_vmcb() 193 vmcb->control.avic_physical_id |= avic_get_max_physical_id(vcpu); in avic_activate_vmcb() 194 vmcb->control.int_ctl |= AVIC_ENABLE_MASK; in avic_activate_vmcb() 206 vmcb->control.int_ctl |= X2APIC_MODE_MASK; in avic_activate_vmcb() 224 struct vmcb *vmcb = svm->vmcb01.ptr; in avic_deactivate_vmcb() local 226 vmcb->control.int_ctl &= ~(AVIC_ENABLE_MASK | X2APIC_MODE_MASK); in avic_deactivate_vmcb() 227 vmcb->control.avic_physical_id &= ~AVIC_PHYSICAL_MAX_INDEX_MASK; in avic_deactivate_vmcb() 365 void avic_init_vmcb(struct vcpu_svm *svm, struct vmcb *vmcb) in avic_init_vmcb() argument [all …]
|
| H A D | hyperv.c | 19 svm->vmcb->control.exit_code = HV_SVM_EXITCODE_ENL; in svm_hv_inject_synthetic_vmexit_post_tlb_flush() 20 svm->vmcb->control.exit_info_1 = HV_SVM_ENL_EXITCODE_TRAP_AFTER_FLUSH; in svm_hv_inject_synthetic_vmexit_post_tlb_flush() 21 svm->vmcb->control.exit_info_2 = 0; in svm_hv_inject_synthetic_vmexit_post_tlb_flush()
|
| H A D | sev.c | 886 if (svm->vcpu.guest_debug || (svm->vmcb->save.dr7 & ~DR7_FIXED_1)) in sev_es_sync_vmsa() 895 memcpy(save, &svm->vmcb->save, sizeof(svm->vmcb->save)); in sev_es_sync_vmsa() 2034 dst_svm->vmcb->control.ghcb_gpa = src_svm->vmcb->control.ghcb_gpa; in sev_migrate_from() 2035 dst_svm->vmcb->control.vmsa_pa = src_svm->vmcb->control.vmsa_pa; in sev_migrate_from() 2039 src_svm->vmcb->control.ghcb_gpa = INVALID_PAGE; in sev_migrate_from() 2040 src_svm->vmcb->control.vmsa_pa = INVALID_PAGE; in sev_migrate_from() 3287 struct vmcb_control_area *control = &svm->vmcb->control; in dump_ghcb() 3304 pr_err("GHCB (GPA=%016llx) snapshot:\n", svm->vmcb->control.ghcb_gpa); in dump_ghcb() 3337 struct vmcb_control_area *control = &svm->vmcb->control; in sev_es_sync_from_ghcb() 3364 svm->vmcb->save.cpl = kvm_ghcb_get_cpl_if_valid(svm); in sev_es_sync_from_ghcb() [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 | 36 svm->vmcb = (void *)vm_vaddr_alloc_page(vm); in vcpu_alloc_svm() 37 svm->vmcb_hva = addr_gva2hva(vm, (uintptr_t)svm->vmcb); in vcpu_alloc_svm() 38 svm->vmcb_gpa = addr_gva2gpa(vm, (uintptr_t)svm->vmcb); in vcpu_alloc_svm() 86 struct vmcb *vmcb = svm->vmcb; in generic_svm_setup() local 88 struct vmcb_save_area *save = &vmcb->save; in generic_svm_setup() 89 struct vmcb_control_area *ctrl = &vmcb->control; in generic_svm_setup() 100 memset(vmcb, 0, sizeof(*vmcb)); in generic_svm_setup() 124 vmcb->save.rip = (u64)guest_rip; in generic_svm_setup() 125 vmcb->save.rsp = (u64)guest_rsp; in generic_svm_setup() 161 void run_guest(struct vmcb *vmcb, uint64_t vmcb_gpa) in run_guest() argument [all …]
|
| H A D | memstress.c | 64 run_guest(svm->vmcb, svm->vmcb_gpa); in l1_svm_code() 65 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 61 void run_guest(struct vmcb *vmcb, uint64_t vmcb_gpa);
|