Lines Matching refs:vmcb

303 	svm->vmcb->save.efer = efer | EFER_SVME;  in svm_set_efer()
304 vmcb_mark_dirty(svm->vmcb, VMCB_CR); in svm_set_efer()
313 if (svm->vmcb->control.int_state & SVM_INTERRUPT_SHADOW_MASK) in svm_get_interrupt_shadow()
323 svm->vmcb->control.int_state &= ~SVM_INTERRUPT_SHADOW_MASK; in svm_set_interrupt_shadow()
325 svm->vmcb->control.int_state |= SVM_INTERRUPT_SHADOW_MASK; in svm_set_interrupt_shadow()
333 if (nrips && svm->vmcb->control.next_rip != 0) { in skip_emulated_instruction()
335 svm->next_rip = svm->vmcb->control.next_rip; in skip_emulated_instruction()
370 svm->int3_rip = rip + svm->vmcb->save.cs.base; in svm_queue_exception()
374 svm->vmcb->control.event_inj = nr in svm_queue_exception()
378 svm->vmcb->control.event_inj_err = error_code; in svm_queue_exception()
768 svm->vmcb->control.virt_ext |= LBR_CTL_ENABLE_MASK; in svm_enable_lbrv()
779 svm->vmcb->control.virt_ext &= ~LBR_CTL_ENABLE_MASK; in svm_disable_lbrv()
793 svm->vmcb->save.rflags &= ~X86_EFLAGS_TF; in disable_nmi_singlestep()
795 svm->vmcb->save.rflags &= ~X86_EFLAGS_RF; in disable_nmi_singlestep()
802 struct vmcb_control_area *control = &svm->vmcb->control; in grow_ple_window()
811 vmcb_mark_dirty(svm->vmcb, VMCB_INTERCEPTS); in grow_ple_window()
820 struct vmcb_control_area *control = &svm->vmcb->control; in shrink_ple_window()
829 vmcb_mark_dirty(svm->vmcb, VMCB_INTERCEPTS); in shrink_ple_window()
1071 g_tsc_offset = svm->vmcb->control.tsc_offset - in svm_write_l1_tsc_offset()
1077 svm->vmcb->control.tsc_offset - g_tsc_offset, in svm_write_l1_tsc_offset()
1080 svm->vmcb->control.tsc_offset = offset + g_tsc_offset; in svm_write_l1_tsc_offset()
1082 vmcb_mark_dirty(svm->vmcb, VMCB_INTERCEPTS); in svm_write_l1_tsc_offset()
1083 return svm->vmcb->control.tsc_offset; in svm_write_l1_tsc_offset()
1103 struct vmcb_control_area *control = &svm->vmcb->control; in init_vmcb()
1104 struct vmcb_save_area *save = &svm->vmcb->save; in init_vmcb()
1243 svm->vmcb->control.virt_ext |= VIRTUAL_VMLOAD_VMSAVE_ENABLE_MASK; in init_vmcb()
1249 svm->vmcb->control.int_ctl |= V_GIF_ENABLE_MASK; in init_vmcb()
1253 svm->vmcb->control.nested_ctl |= SVM_NESTED_CTL_SEV_ENABLE; in init_vmcb()
1257 vmcb_mark_all_dirty(svm->vmcb); in init_vmcb()
1319 svm->vmcb = page_address(vmcb_page); in svm_create_vcpu()
1335 static void svm_clear_current_vmcb(struct vmcb *vmcb) in svm_clear_current_vmcb() argument
1340 cmpxchg(&per_cpu(svm_data, i)->current_vmcb, vmcb, NULL); in svm_clear_current_vmcb()
1352 svm_clear_current_vmcb(svm->vmcb); in svm_free_vcpu()
1369 vmcb_mark_all_dirty(svm->vmcb); in svm_vcpu_load()
1393 if (sd->current_vmcb != svm->vmcb) { in svm_vcpu_load()
1394 sd->current_vmcb = svm->vmcb; in svm_vcpu_load()
1425 unsigned long rflags = svm->vmcb->save.rflags; in svm_get_rflags()
1447 to_svm(vcpu)->vmcb->save.rflags = rflags; in svm_set_rflags()
1474 control = &svm->vmcb->control; in svm_set_vintr()
1479 vmcb_mark_dirty(svm->vmcb, VMCB_INTR); in svm_set_vintr()
1487 svm->vmcb->control.int_ctl &= ~V_IRQ_INJECTION_BITS_MASK; in svm_clear_vintr()
1491 WARN_ON((svm->vmcb->control.int_ctl & V_TPR_MASK) != in svm_clear_vintr()
1493 svm->vmcb->control.int_ctl |= svm->nested.ctl.int_ctl & in svm_clear_vintr()
1496 svm->vmcb->control.int_vector = svm->nested.ctl.int_vector; in svm_clear_vintr()
1499 vmcb_mark_dirty(svm->vmcb, VMCB_INTR); in svm_clear_vintr()
1504 struct vmcb_save_area *save = &to_svm(vcpu)->vmcb->save; in svm_seg()
1591 var->dpl = to_svm(vcpu)->vmcb->save.cpl; in svm_get_segment()
1598 struct vmcb_save_area *save = &to_svm(vcpu)->vmcb->save; in svm_get_cpl()
1607 dt->size = svm->vmcb->save.idtr.limit; in svm_get_idt()
1608 dt->address = svm->vmcb->save.idtr.base; in svm_get_idt()
1615 svm->vmcb->save.idtr.limit = dt->size; in svm_set_idt()
1616 svm->vmcb->save.idtr.base = dt->address ; in svm_set_idt()
1617 vmcb_mark_dirty(svm->vmcb, VMCB_DT); in svm_set_idt()
1624 dt->size = svm->vmcb->save.gdtr.limit; in svm_get_gdt()
1625 dt->address = svm->vmcb->save.gdtr.base; in svm_get_gdt()
1632 svm->vmcb->save.gdtr.limit = dt->size; in svm_set_gdt()
1633 svm->vmcb->save.gdtr.base = dt->address ; in svm_set_gdt()
1634 vmcb_mark_dirty(svm->vmcb, VMCB_DT); in svm_set_gdt()
1640 u64 *hcr0 = &svm->vmcb->save.cr0; in update_cr0_intercept()
1645 vmcb_mark_dirty(svm->vmcb, VMCB_CR); in update_cr0_intercept()
1664 svm->vmcb->save.efer |= EFER_LMA | EFER_LME; in svm_set_cr0()
1669 svm->vmcb->save.efer &= ~(EFER_LMA | EFER_LME); in svm_set_cr0()
1685 svm->vmcb->save.cr0 = cr0; in svm_set_cr0()
1686 vmcb_mark_dirty(svm->vmcb, VMCB_CR); in svm_set_cr0()
1698 unsigned long old_cr4 = to_svm(vcpu)->vmcb->save.cr4; in svm_set_cr4()
1707 to_svm(vcpu)->vmcb->save.cr4 = cr4; in svm_set_cr4()
1708 vmcb_mark_dirty(to_svm(vcpu)->vmcb, VMCB_CR); in svm_set_cr4()
1737 svm->vmcb->save.cpl = (var->dpl & 3); in svm_set_segment()
1739 vmcb_mark_dirty(svm->vmcb, VMCB_SEG); in svm_set_segment()
1759 svm->vmcb->control.tlb_ctl = TLB_CONTROL_FLUSH_ALL_ASID; in new_asid()
1763 svm->vmcb->control.asid = sd->next_asid++; in new_asid()
1765 vmcb_mark_dirty(svm->vmcb, VMCB_ASID); in new_asid()
1770 struct vmcb *vmcb = svm->vmcb; in svm_set_dr6() local
1772 if (unlikely(value != vmcb->save.dr6)) { in svm_set_dr6()
1773 vmcb->save.dr6 = value; in svm_set_dr6()
1774 vmcb_mark_dirty(vmcb, VMCB_DR); in svm_set_dr6()
1790 vcpu->arch.dr6 = svm->vmcb->save.dr6; in svm_sync_dirty_debug_regs()
1791 vcpu->arch.dr7 = svm->vmcb->save.dr7; in svm_sync_dirty_debug_regs()
1800 svm->vmcb->save.dr7 = value; in svm_set_dr7()
1801 vmcb_mark_dirty(svm->vmcb, VMCB_DR); in svm_set_dr7()
1806 u64 fault_address = svm->vmcb->control.exit_info_2; in pf_interception()
1807 u64 error_code = svm->vmcb->control.exit_info_1; in pf_interception()
1811 svm->vmcb->control.insn_bytes : NULL, in pf_interception()
1812 svm->vmcb->control.insn_len); in pf_interception()
1817 u64 fault_address = __sme_clr(svm->vmcb->control.exit_info_2); in npf_interception()
1818 u64 error_code = svm->vmcb->control.exit_info_1; in npf_interception()
1823 svm->vmcb->control.insn_bytes : NULL, in npf_interception()
1824 svm->vmcb->control.insn_len); in npf_interception()
1835 u32 payload = (svm->vmcb->save.dr6 ^ DR6_RTM) & ~DR6_FIXED_1; in db_interception()
1849 kvm_run->debug.arch.dr6 = svm->vmcb->save.dr6; in db_interception()
1850 kvm_run->debug.arch.dr7 = svm->vmcb->save.dr7; in db_interception()
1852 svm->vmcb->save.cs.base + svm->vmcb->save.rip; in db_interception()
1865 kvm_run->debug.arch.pc = svm->vmcb->save.cs.base + svm->vmcb->save.rip; in bp_interception()
1884 u32 error_code = svm->vmcb->control.exit_info_1; in gp_interception()
1991 clear_page(svm->vmcb); in shutdown_interception()
2001 u32 io_info = svm->vmcb->control.exit_info_1; /* address size bug? */ in io_interception()
2013 svm->next_rip = svm->vmcb->control.exit_info_2; in io_interception()
2046 struct vmcb *nested_vmcb; in vmload_interception()
2053 ret = kvm_vcpu_map(&svm->vcpu, gpa_to_gfn(svm->vmcb->save.rax), &map); in vmload_interception()
2064 nested_svm_vmloadsave(nested_vmcb, svm->vmcb); in vmload_interception()
2072 struct vmcb *nested_vmcb; in vmsave_interception()
2079 ret = kvm_vcpu_map(&svm->vcpu, gpa_to_gfn(svm->vmcb->save.rax), &map); in vmsave_interception()
2090 nested_svm_vmloadsave(svm->vmcb, nested_vmcb); in vmsave_interception()
2164 trace_kvm_invlpga(svm->vmcb->save.rip, kvm_rcx_read(&svm->vcpu), in invlpga_interception()
2175 trace_kvm_skinit(svm->vmcb->save.rip, kvm_rax_read(&svm->vcpu)); in skinit_interception()
2208 int int_type = svm->vmcb->control.exit_int_info & in task_switch_interception()
2210 int int_vec = svm->vmcb->control.exit_int_info & SVM_EVTINJ_VEC_MASK; in task_switch_interception()
2212 svm->vmcb->control.exit_int_info & SVM_EXITINTINFO_TYPE_MASK; in task_switch_interception()
2214 svm->vmcb->control.exit_int_info & SVM_EXITINTINFO_VALID; in task_switch_interception()
2218 tss_selector = (u16)svm->vmcb->control.exit_info_1; in task_switch_interception()
2220 if (svm->vmcb->control.exit_info_2 & in task_switch_interception()
2223 else if (svm->vmcb->control.exit_info_2 & in task_switch_interception()
2237 if (svm->vmcb->control.exit_info_2 & in task_switch_interception()
2241 (u32)svm->vmcb->control.exit_info_2; in task_switch_interception()
2294 kvm_mmu_invlpg(&svm->vcpu, svm->vmcb->control.exit_info_1); in invlpg_interception()
2333 svm->vmcb->control.exit_code = SVM_EXIT_CR0_SEL_WRITE; in check_selective_cr0_intercepted()
2351 if (unlikely((svm->vmcb->control.exit_info_1 & CR_VALID) == 0)) in cr_interception()
2354 reg = svm->vmcb->control.exit_info_1 & SVM_EXITINFO_REG_MASK; in cr_interception()
2355 if (svm->vmcb->control.exit_code == SVM_EXIT_CR0_SEL_WRITE) in cr_interception()
2358 cr = svm->vmcb->control.exit_code - SVM_EXIT_READ_CR0; in cr_interception()
2434 reg = svm->vmcb->control.exit_info_1 & SVM_EXITINFO_REG_MASK; in dr_interception()
2435 dr = svm->vmcb->control.exit_code - SVM_EXIT_READ_DR0; in dr_interception()
2492 msr_info->data = svm->vmcb->save.star; in svm_get_msr()
2496 msr_info->data = svm->vmcb->save.lstar; in svm_get_msr()
2499 msr_info->data = svm->vmcb->save.cstar; in svm_get_msr()
2502 msr_info->data = svm->vmcb->save.kernel_gs_base; in svm_get_msr()
2505 msr_info->data = svm->vmcb->save.sfmask; in svm_get_msr()
2509 msr_info->data = svm->vmcb->save.sysenter_cs; in svm_get_msr()
2531 msr_info->data = svm->vmcb->save.dbgctl; in svm_get_msr()
2534 msr_info->data = svm->vmcb->save.br_from; in svm_get_msr()
2537 msr_info->data = svm->vmcb->save.br_to; in svm_get_msr()
2540 msr_info->data = svm->vmcb->save.last_excp_from; in svm_get_msr()
2543 msr_info->data = svm->vmcb->save.last_excp_to; in svm_get_msr()
2632 svm->vmcb->save.g_pat = data; in svm_set_msr()
2633 vmcb_mark_dirty(svm->vmcb, VMCB_NPT); in svm_set_msr()
2686 svm->vmcb->save.star = data; in svm_set_msr()
2690 svm->vmcb->save.lstar = data; in svm_set_msr()
2693 svm->vmcb->save.cstar = data; in svm_set_msr()
2696 svm->vmcb->save.kernel_gs_base = data; in svm_set_msr()
2699 svm->vmcb->save.sfmask = data; in svm_set_msr()
2703 svm->vmcb->save.sysenter_cs = data; in svm_set_msr()
2707 svm->vmcb->save.sysenter_eip = data; in svm_set_msr()
2711 svm->vmcb->save.sysenter_esp = data; in svm_set_msr()
2738 svm->vmcb->save.dbgctl = data; in svm_set_msr()
2739 vmcb_mark_dirty(svm->vmcb, VMCB_LBR); in svm_set_msr()
2797 if (svm->vmcb->control.exit_info_1) in msr_interception()
2864 type = svm->vmcb->control.exit_info_2; in invpcid_interception()
2865 gva = svm->vmcb->control.exit_info_1; in invpcid_interception()
2947 struct vmcb_control_area *control = &svm->vmcb->control; in dump_vmcb()
2948 struct vmcb_save_area *save = &svm->vmcb->save; in dump_vmcb()
3065 struct vmcb_control_area *control = &to_svm(vcpu)->vmcb->control; in svm_get_exit_info()
3081 u32 exit_code = svm->vmcb->control.exit_code; in handle_exit()
3086 vcpu->arch.cr0 = svm->vmcb->save.cr0; in handle_exit()
3088 vcpu->arch.cr3 = svm->vmcb->save.cr3; in handle_exit()
3104 if (svm->vmcb->control.exit_code == SVM_EXIT_ERR) { in handle_exit()
3107 = svm->vmcb->control.exit_code; in handle_exit()
3168 svm->vmcb->control.event_inj = SVM_EVTINJ_VALID | SVM_EVTINJ_TYPE_NMI; in svm_inject_nmi()
3181 svm->vmcb->control.event_inj = vcpu->arch.interrupt.nr | in svm_set_irq()
3204 struct vmcb *vmcb = svm->vmcb; in svm_nmi_blocked() local
3213 ret = (vmcb->control.int_state & SVM_INTERRUPT_SHADOW_MASK) || in svm_nmi_blocked()
3255 struct vmcb *vmcb = svm->vmcb; in svm_interrupt_blocked() local
3275 return (vmcb->control.int_state & SVM_INTERRUPT_SHADOW_MASK); in svm_interrupt_blocked()
3338 svm->vmcb->save.rflags |= (X86_EFLAGS_TF | X86_EFLAGS_RF); in enable_nmi_window()
3363 svm->vmcb->control.tlb_ctl = TLB_CONTROL_FLUSH_ASID; in svm_flush_tlb()
3372 invlpga(gva, svm->vmcb->control.asid); in svm_flush_tlb_gva()
3387 int cr8 = svm->vmcb->control.int_ctl & V_TPR_MASK; in sync_cr8_to_lapic()
3402 svm->vmcb->control.int_ctl &= ~V_TPR_MASK; in sync_lapic_to_cr8()
3403 svm->vmcb->control.int_ctl |= cr8 & V_TPR_MASK; in sync_lapic_to_cr8()
3410 u32 exitintinfo = svm->vmcb->control.exit_int_info; in svm_complete_interrupts()
3456 u32 err = svm->vmcb->control.exit_int_info_err; in svm_complete_interrupts()
3473 struct vmcb_control_area *control = &svm->vmcb->control; in svm_cancel_injection()
3483 if (to_svm(vcpu)->vmcb->control.exit_code == SVM_EXIT_MSR && in svm_exit_handlers_fastpath()
3484 to_svm(vcpu)->vmcb->control.exit_info_1) in svm_exit_handlers_fastpath()
3550 svm->vmcb->save.rax = vcpu->arch.regs[VCPU_REGS_RAX]; in svm_vcpu_run()
3551 svm->vmcb->save.rsp = vcpu->arch.regs[VCPU_REGS_RSP]; in svm_vcpu_run()
3552 svm->vmcb->save.rip = vcpu->arch.regs[VCPU_REGS_RIP]; in svm_vcpu_run()
3560 if (svm->nmi_singlestep && svm->vmcb->control.event_inj) { in svm_vcpu_run()
3574 svm->vmcb->save.cr2 = vcpu->arch.cr2; in svm_vcpu_run()
3622 vcpu->arch.cr2 = svm->vmcb->save.cr2; in svm_vcpu_run()
3623 vcpu->arch.regs[VCPU_REGS_RAX] = svm->vmcb->save.rax; in svm_vcpu_run()
3624 vcpu->arch.regs[VCPU_REGS_RSP] = svm->vmcb->save.rsp; in svm_vcpu_run()
3625 vcpu->arch.regs[VCPU_REGS_RIP] = svm->vmcb->save.rip; in svm_vcpu_run()
3627 if (unlikely(svm->vmcb->control.exit_code == SVM_EXIT_NMI)) in svm_vcpu_run()
3635 if (unlikely(svm->vmcb->control.exit_code == SVM_EXIT_NMI)) in svm_vcpu_run()
3646 svm->vmcb->control.tlb_ctl = TLB_CONTROL_DO_NOTHING; in svm_vcpu_run()
3647 vmcb_mark_all_clean(svm->vmcb); in svm_vcpu_run()
3650 if (svm->vmcb->control.exit_code == SVM_EXIT_EXCP_BASE + PF_VECTOR) in svm_vcpu_run()
3663 if (unlikely(svm->vmcb->control.exit_code == in svm_vcpu_run()
3683 svm->vmcb->control.nested_cr3 = cr3; in svm_load_mmu_pgd()
3684 vmcb_mark_dirty(svm->vmcb, VMCB_NPT); in svm_load_mmu_pgd()
3692 svm->vmcb->save.cr3 = cr3; in svm_load_mmu_pgd()
3693 vmcb_mark_dirty(svm->vmcb, VMCB_CR); in svm_load_mmu_pgd()
3866 struct vmcb *vmcb = svm->vmcb; in svm_check_intercept() local
3917 vmcb->control.exit_info_1 = 1; in svm_check_intercept()
3919 vmcb->control.exit_info_1 = 0; in svm_check_intercept()
3956 vmcb->control.exit_info_1 = exit_info; in svm_check_intercept()
3957 vmcb->control.exit_info_2 = info->next_rip; in svm_check_intercept()
3967 vmcb->control.next_rip = info->next_rip; in svm_check_intercept()
3968 vmcb->control.exit_code = icpt_info.exit_code; in svm_check_intercept()
4029 svm->vmcb->save.rax = vcpu->arch.regs[VCPU_REGS_RAX]; in svm_pre_enter_smm()
4030 svm->vmcb->save.rsp = vcpu->arch.regs[VCPU_REGS_RSP]; in svm_pre_enter_smm()
4031 svm->vmcb->save.rip = vcpu->arch.regs[VCPU_REGS_RIP]; in svm_pre_enter_smm()
4176 (vmcb_is_intercept(&svm->vmcb->control, INTERCEPT_INIT)); in svm_apic_init_signal_blocked()