Lines Matching defs:ctxt
87 #define emul_to_vcpu(ctxt) \
88 ((struct kvm_vcpu *)(ctxt)->vcpu)
291 static int emulator_fix_hypercall(struct x86_emulate_ctxt *ctxt);
6172 static int kvm_fetch_guest_virt(struct x86_emulate_ctxt *ctxt,
6176 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
6216 static int emulator_read_std(struct x86_emulate_ctxt *ctxt,
6220 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
6229 static int kvm_read_guest_phys_system(struct x86_emulate_ctxt *ctxt,
6232 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
6269 static int emulator_write_std(struct x86_emulate_ctxt *ctxt, gva_t addr, void *val,
6273 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
6454 struct x86_emulate_ctxt *ctxt = vcpu->arch.emulate_ctxt;
6463 if (ctxt->gpa_available && emulator_can_use_gpa(ctxt) &&
6464 (addr & ~PAGE_MASK) == (ctxt->gpa_val & ~PAGE_MASK)) {
6465 gpa = ctxt->gpa_val;
6495 static int emulator_read_write(struct x86_emulate_ctxt *ctxt,
6501 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
6522 if (ctxt->mode != X86EMUL_MODE_PROT64)
6549 static int emulator_read_emulated(struct x86_emulate_ctxt *ctxt,
6555 return emulator_read_write(ctxt, addr, val, bytes,
6559 static int emulator_write_emulated(struct x86_emulate_ctxt *ctxt,
6565 return emulator_read_write(ctxt, addr, (void *)val, bytes,
6579 static int emulator_cmpxchg_emulated(struct x86_emulate_ctxt *ctxt,
6587 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
6649 return emulator_write_emulated(ctxt, addr, new, bytes, exception);
6717 static int emulator_pio_in_emulated(struct x86_emulate_ctxt *ctxt,
6721 return emulator_pio_in(emul_to_vcpu(ctxt), size, port, val, count);
6734 static int emulator_pio_out_emulated(struct x86_emulate_ctxt *ctxt,
6738 return emulator_pio_out(emul_to_vcpu(ctxt), size, port, val, count);
6746 static void emulator_invlpg(struct x86_emulate_ctxt *ctxt, ulong address)
6748 kvm_mmu_invlpg(emul_to_vcpu(ctxt), address);
6778 static void emulator_wbinvd(struct x86_emulate_ctxt *ctxt)
6780 kvm_emulate_wbinvd_noskip(emul_to_vcpu(ctxt));
6783 static int emulator_get_dr(struct x86_emulate_ctxt *ctxt, int dr,
6786 return kvm_get_dr(emul_to_vcpu(ctxt), dr, dest);
6789 static int emulator_set_dr(struct x86_emulate_ctxt *ctxt, int dr,
6793 return __kvm_set_dr(emul_to_vcpu(ctxt), dr, value);
6801 static unsigned long emulator_get_cr(struct x86_emulate_ctxt *ctxt, int cr)
6803 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
6830 static int emulator_set_cr(struct x86_emulate_ctxt *ctxt, int cr, ulong val)
6832 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
6859 static int emulator_get_cpl(struct x86_emulate_ctxt *ctxt)
6861 return kvm_x86_ops.get_cpl(emul_to_vcpu(ctxt));
6864 static void emulator_get_gdt(struct x86_emulate_ctxt *ctxt, struct desc_ptr *dt)
6866 kvm_x86_ops.get_gdt(emul_to_vcpu(ctxt), dt);
6869 static void emulator_get_idt(struct x86_emulate_ctxt *ctxt, struct desc_ptr *dt)
6871 kvm_x86_ops.get_idt(emul_to_vcpu(ctxt), dt);
6874 static void emulator_set_gdt(struct x86_emulate_ctxt *ctxt, struct desc_ptr *dt)
6876 kvm_x86_ops.set_gdt(emul_to_vcpu(ctxt), dt);
6879 static void emulator_set_idt(struct x86_emulate_ctxt *ctxt, struct desc_ptr *dt)
6881 kvm_x86_ops.set_idt(emul_to_vcpu(ctxt), dt);
6885 struct x86_emulate_ctxt *ctxt, int seg)
6887 return get_segment_base(emul_to_vcpu(ctxt), seg);
6890 static bool emulator_get_segment(struct x86_emulate_ctxt *ctxt, u16 *selector,
6896 kvm_get_segment(emul_to_vcpu(ctxt), &var, seg);
6926 static void emulator_set_segment(struct x86_emulate_ctxt *ctxt, u16 selector,
6930 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
6956 static int emulator_get_msr(struct x86_emulate_ctxt *ctxt,
6959 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
6972 static int emulator_set_msr(struct x86_emulate_ctxt *ctxt,
6975 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
6988 static u64 emulator_get_smbase(struct x86_emulate_ctxt *ctxt)
6990 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
6995 static void emulator_set_smbase(struct x86_emulate_ctxt *ctxt, u64 smbase)
6997 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
7002 static int emulator_check_pmc(struct x86_emulate_ctxt *ctxt,
7005 return kvm_pmu_is_valid_rdpmc_ecx(emul_to_vcpu(ctxt), pmc);
7008 static int emulator_read_pmc(struct x86_emulate_ctxt *ctxt,
7011 return kvm_pmu_rdpmc(emul_to_vcpu(ctxt), pmc, pdata);
7014 static void emulator_halt(struct x86_emulate_ctxt *ctxt)
7016 emul_to_vcpu(ctxt)->arch.halt_request = 1;
7019 static int emulator_intercept(struct x86_emulate_ctxt *ctxt,
7023 return kvm_x86_ops.check_intercept(emul_to_vcpu(ctxt), info, stage,
7024 &ctxt->exception);
7027 static bool emulator_get_cpuid(struct x86_emulate_ctxt *ctxt,
7031 return kvm_cpuid(emul_to_vcpu(ctxt), eax, ebx, ecx, edx, exact_only);
7034 static bool emulator_guest_has_long_mode(struct x86_emulate_ctxt *ctxt)
7036 return guest_cpuid_has(emul_to_vcpu(ctxt), X86_FEATURE_LM);
7039 static bool emulator_guest_has_movbe(struct x86_emulate_ctxt *ctxt)
7041 return guest_cpuid_has(emul_to_vcpu(ctxt), X86_FEATURE_MOVBE);
7044 static bool emulator_guest_has_fxsr(struct x86_emulate_ctxt *ctxt)
7046 return guest_cpuid_has(emul_to_vcpu(ctxt), X86_FEATURE_FXSR);
7049 static bool emulator_guest_has_rdpid(struct x86_emulate_ctxt *ctxt)
7051 return guest_cpuid_has(emul_to_vcpu(ctxt), X86_FEATURE_RDPID);
7054 static ulong emulator_read_gpr(struct x86_emulate_ctxt *ctxt, unsigned reg)
7056 return kvm_register_read(emul_to_vcpu(ctxt), reg);
7059 static void emulator_write_gpr(struct x86_emulate_ctxt *ctxt, unsigned reg, ulong val)
7061 kvm_register_write(emul_to_vcpu(ctxt), reg, val);
7064 static void emulator_set_nmi_mask(struct x86_emulate_ctxt *ctxt, bool masked)
7066 kvm_x86_ops.set_nmi_mask(emul_to_vcpu(ctxt), masked);
7069 static unsigned emulator_get_hflags(struct x86_emulate_ctxt *ctxt)
7071 return emul_to_vcpu(ctxt)->arch.hflags;
7074 static void emulator_set_hflags(struct x86_emulate_ctxt *ctxt, unsigned emul_flags)
7076 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
7082 static int emulator_pre_leave_smm(struct x86_emulate_ctxt *ctxt,
7085 return kvm_x86_ops.pre_leave_smm(emul_to_vcpu(ctxt), smstate);
7088 static void emulator_post_leave_smm(struct x86_emulate_ctxt *ctxt)
7090 kvm_smm_changed(emul_to_vcpu(ctxt));
7093 static int emulator_set_xcr(struct x86_emulate_ctxt *ctxt, u32 index, u64 xcr)
7095 return __kvm_set_xcr(emul_to_vcpu(ctxt), index, xcr);
7167 struct x86_emulate_ctxt *ctxt = vcpu->arch.emulate_ctxt;
7168 if (ctxt->exception.vector == PF_VECTOR)
7169 return kvm_inject_emulated_page_fault(vcpu, &ctxt->exception);
7171 if (ctxt->exception.error_code_valid)
7172 kvm_queue_exception_e(vcpu, ctxt->exception.vector,
7173 ctxt->exception.error_code);
7175 kvm_queue_exception(vcpu, ctxt->exception.vector);
7181 struct x86_emulate_ctxt *ctxt;
7183 ctxt = kmem_cache_zalloc(x86_emulator_cache, GFP_KERNEL_ACCOUNT);
7184 if (!ctxt) {
7189 ctxt->vcpu = vcpu;
7190 ctxt->ops = &emulate_ops;
7191 vcpu->arch.emulate_ctxt = ctxt;
7193 return ctxt;
7198 struct x86_emulate_ctxt *ctxt = vcpu->arch.emulate_ctxt;
7203 ctxt->gpa_available = false;
7204 ctxt->eflags = kvm_get_rflags(vcpu);
7205 ctxt->tf = (ctxt->eflags & X86_EFLAGS_TF) != 0;
7207 ctxt->eip = kvm_rip_read(vcpu);
7208 ctxt->mode = (!is_protmode(vcpu)) ? X86EMUL_MODE_REAL :
7209 (ctxt->eflags & X86_EFLAGS_VM) ? X86EMUL_MODE_VM86 :
7217 ctxt->interruptibility = 0;
7218 ctxt->have_exception = false;
7219 ctxt->exception.vector = -1;
7220 ctxt->perm_ok = false;
7222 init_decode_cache(ctxt);
7228 struct x86_emulate_ctxt *ctxt = vcpu->arch.emulate_ctxt;
7233 ctxt->op_bytes = 2;
7234 ctxt->ad_bytes = 2;
7235 ctxt->_eip = ctxt->eip + inc_eip;
7236 ret = emulate_int_real(ctxt, irq);
7241 ctxt->eip = ctxt->_eip;
7242 kvm_rip_write(vcpu, ctxt->eip);
7243 kvm_set_rflags(vcpu, ctxt->eflags);
7352 static bool retry_instruction(struct x86_emulate_ctxt *ctxt,
7355 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
7383 if (x86_page_table_writing_insn(ctxt))
7386 if (ctxt->eip == last_retry_eip && last_retry_addr == cr2_or_gpa)
7389 vcpu->arch.last_retry_eip = ctxt->eip;
7506 static bool is_vmware_backdoor_opcode(struct x86_emulate_ctxt *ctxt)
7508 switch (ctxt->opcode_len) {
7510 switch (ctxt->b) {
7527 switch (ctxt->b) {
7550 struct x86_emulate_ctxt *ctxt = vcpu->arch.emulate_ctxt;
7555 ctxt->ud = emulation_type & EMULTYPE_TRAP_UD;
7557 r = x86_decode_insn(ctxt, insn, insn_len);
7570 struct x86_emulate_ctxt *ctxt = vcpu->arch.emulate_ctxt;
7611 if (ctxt->have_exception &&
7617 WARN_ON_ONCE(ctxt->exception.vector == UD_VECTOR ||
7618 exception_type(ctxt->exception.vector) == EXCPT_TRAP);
7627 !is_vmware_backdoor_opcode(ctxt)) {
7638 kvm_rip_write(vcpu, ctxt->_eip);
7639 if (ctxt->eflags & X86_EFLAGS_RF)
7640 kvm_set_rflags(vcpu, ctxt->eflags & ~X86_EFLAGS_RF);
7644 if (retry_instruction(ctxt, cr2_or_gpa, emulation_type))
7651 emulator_invalidate_register_cache(ctxt);
7657 ctxt->exception.address = cr2_or_gpa;
7661 ctxt->gpa_available = true;
7662 ctxt->gpa_val = cr2_or_gpa;
7666 ctxt->exception.address = 0;
7669 r = x86_emulate_insn(ctxt);
7682 if (ctxt->have_exception) {
7709 toggle_interruptibility(vcpu, ctxt->interruptibility);
7717 if (!ctxt->have_exception ||
7718 exception_type(ctxt->exception.vector) == EXCPT_TRAP) {
7719 kvm_rip_write(vcpu, ctxt->eip);
7720 if (r && (ctxt->tf || (vcpu->guest_debug & KVM_GUESTDBG_SINGLESTEP)))
7724 __kvm_set_rflags(vcpu, ctxt->eflags);
7733 if (unlikely((ctxt->eflags & ~rflags) & X86_EFLAGS_IF))
8445 static int emulator_fix_hypercall(struct x86_emulate_ctxt *ctxt)
8447 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
8453 return emulator_write_emulated(ctxt, rip, instruction, 3,
8454 &ctxt->exception);
9867 struct x86_emulate_ctxt *ctxt = vcpu->arch.emulate_ctxt;
9872 ret = emulator_task_switch(ctxt, tss_selector, idt_index, reason,
9881 kvm_rip_write(vcpu, ctxt->eip);
9882 kvm_set_rflags(vcpu, ctxt->eflags);