Lines Matching defs:ctxt

102 #define emul_to_vcpu(ctxt) \
103 ((struct kvm_vcpu *)(ctxt)->vcpu)
353 static int emulator_fix_hypercall(struct x86_emulate_ctxt *ctxt);
7377 static int kvm_fetch_guest_virt(struct x86_emulate_ctxt *ctxt,
7381 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
7422 static int emulator_read_std(struct x86_emulate_ctxt *ctxt,
7426 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
7467 static int emulator_write_std(struct x86_emulate_ctxt *ctxt, gva_t addr, void *val,
7471 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
7665 struct x86_emulate_ctxt *ctxt = vcpu->arch.emulate_ctxt;
7674 if (ctxt->gpa_available && emulator_can_use_gpa(ctxt) &&
7675 (addr & ~PAGE_MASK) == (ctxt->gpa_val & ~PAGE_MASK)) {
7676 gpa = ctxt->gpa_val;
7706 static int emulator_read_write(struct x86_emulate_ctxt *ctxt,
7712 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
7733 if (ctxt->mode != X86EMUL_MODE_PROT64)
7760 static int emulator_read_emulated(struct x86_emulate_ctxt *ctxt,
7766 return emulator_read_write(ctxt, addr, val, bytes,
7770 static int emulator_write_emulated(struct x86_emulate_ctxt *ctxt,
7776 return emulator_read_write(ctxt, addr, (void *)val, bytes,
7783 static int emulator_cmpxchg_emulated(struct x86_emulate_ctxt *ctxt,
7790 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
7853 return emulator_write_emulated(ctxt, addr, new, bytes, exception);
7926 static int emulator_pio_in_emulated(struct x86_emulate_ctxt *ctxt,
7930 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
7954 static int emulator_pio_out_emulated(struct x86_emulate_ctxt *ctxt,
7958 return emulator_pio_out(emul_to_vcpu(ctxt), size, port, val, count);
7966 static void emulator_invlpg(struct x86_emulate_ctxt *ctxt, ulong address)
7968 kvm_mmu_invlpg(emul_to_vcpu(ctxt), address);
7998 static void emulator_wbinvd(struct x86_emulate_ctxt *ctxt)
8000 kvm_emulate_wbinvd_noskip(emul_to_vcpu(ctxt));
8003 static void emulator_get_dr(struct x86_emulate_ctxt *ctxt, int dr,
8006 kvm_get_dr(emul_to_vcpu(ctxt), dr, dest);
8009 static int emulator_set_dr(struct x86_emulate_ctxt *ctxt, int dr,
8013 return kvm_set_dr(emul_to_vcpu(ctxt), dr, value);
8021 static unsigned long emulator_get_cr(struct x86_emulate_ctxt *ctxt, int cr)
8023 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
8050 static int emulator_set_cr(struct x86_emulate_ctxt *ctxt, int cr, ulong val)
8052 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
8079 static int emulator_get_cpl(struct x86_emulate_ctxt *ctxt)
8081 return static_call(kvm_x86_get_cpl)(emul_to_vcpu(ctxt));
8084 static void emulator_get_gdt(struct x86_emulate_ctxt *ctxt, struct desc_ptr *dt)
8086 static_call(kvm_x86_get_gdt)(emul_to_vcpu(ctxt), dt);
8089 static void emulator_get_idt(struct x86_emulate_ctxt *ctxt, struct desc_ptr *dt)
8091 static_call(kvm_x86_get_idt)(emul_to_vcpu(ctxt), dt);
8094 static void emulator_set_gdt(struct x86_emulate_ctxt *ctxt, struct desc_ptr *dt)
8096 static_call(kvm_x86_set_gdt)(emul_to_vcpu(ctxt), dt);
8099 static void emulator_set_idt(struct x86_emulate_ctxt *ctxt, struct desc_ptr *dt)
8101 static_call(kvm_x86_set_idt)(emul_to_vcpu(ctxt), dt);
8105 struct x86_emulate_ctxt *ctxt, int seg)
8107 return get_segment_base(emul_to_vcpu(ctxt), seg);
8110 static bool emulator_get_segment(struct x86_emulate_ctxt *ctxt, u16 *selector,
8116 kvm_get_segment(emul_to_vcpu(ctxt), &var, seg);
8146 static void emulator_set_segment(struct x86_emulate_ctxt *ctxt, u16 selector,
8150 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
8176 static int emulator_get_msr_with_filter(struct x86_emulate_ctxt *ctxt,
8179 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
8199 static int emulator_set_msr_with_filter(struct x86_emulate_ctxt *ctxt,
8202 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
8222 static int emulator_get_msr(struct x86_emulate_ctxt *ctxt,
8225 return kvm_get_msr(emul_to_vcpu(ctxt), msr_index, pdata);
8228 static int emulator_check_pmc(struct x86_emulate_ctxt *ctxt,
8231 if (kvm_pmu_is_valid_rdpmc_ecx(emul_to_vcpu(ctxt), pmc))
8236 static int emulator_read_pmc(struct x86_emulate_ctxt *ctxt,
8239 return kvm_pmu_rdpmc(emul_to_vcpu(ctxt), pmc, pdata);
8242 static void emulator_halt(struct x86_emulate_ctxt *ctxt)
8244 emul_to_vcpu(ctxt)->arch.halt_request = 1;
8247 static int emulator_intercept(struct x86_emulate_ctxt *ctxt,
8251 return static_call(kvm_x86_check_intercept)(emul_to_vcpu(ctxt), info, stage,
8252 &ctxt->exception);
8255 static bool emulator_get_cpuid(struct x86_emulate_ctxt *ctxt,
8259 return kvm_cpuid(emul_to_vcpu(ctxt), eax, ebx, ecx, edx, exact_only);
8262 static bool emulator_guest_has_movbe(struct x86_emulate_ctxt *ctxt)
8264 return guest_cpuid_has(emul_to_vcpu(ctxt), X86_FEATURE_MOVBE);
8267 static bool emulator_guest_has_fxsr(struct x86_emulate_ctxt *ctxt)
8269 return guest_cpuid_has(emul_to_vcpu(ctxt), X86_FEATURE_FXSR);
8272 static bool emulator_guest_has_rdpid(struct x86_emulate_ctxt *ctxt)
8274 return guest_cpuid_has(emul_to_vcpu(ctxt), X86_FEATURE_RDPID);
8277 static ulong emulator_read_gpr(struct x86_emulate_ctxt *ctxt, unsigned reg)
8279 return kvm_register_read_raw(emul_to_vcpu(ctxt), reg);
8282 static void emulator_write_gpr(struct x86_emulate_ctxt *ctxt, unsigned reg, ulong val)
8284 kvm_register_write_raw(emul_to_vcpu(ctxt), reg, val);
8287 static void emulator_set_nmi_mask(struct x86_emulate_ctxt *ctxt, bool masked)
8289 static_call(kvm_x86_set_nmi_mask)(emul_to_vcpu(ctxt), masked);
8292 static bool emulator_is_smm(struct x86_emulate_ctxt *ctxt)
8294 return is_smm(emul_to_vcpu(ctxt));
8297 static bool emulator_is_guest_mode(struct x86_emulate_ctxt *ctxt)
8299 return is_guest_mode(emul_to_vcpu(ctxt));
8303 static int emulator_leave_smm(struct x86_emulate_ctxt *ctxt)
8310 static void emulator_triple_fault(struct x86_emulate_ctxt *ctxt)
8312 kvm_make_request(KVM_REQ_TRIPLE_FAULT, emul_to_vcpu(ctxt));
8315 static int emulator_set_xcr(struct x86_emulate_ctxt *ctxt, u32 index, u64 xcr)
8317 return __kvm_set_xcr(emul_to_vcpu(ctxt), index, xcr);
8320 static void emulator_vm_bugged(struct x86_emulate_ctxt *ctxt)
8322 struct kvm *kvm = emul_to_vcpu(ctxt)->kvm;
8395 struct x86_emulate_ctxt *ctxt = vcpu->arch.emulate_ctxt;
8397 if (ctxt->exception.vector == PF_VECTOR)
8398 kvm_inject_emulated_page_fault(vcpu, &ctxt->exception);
8399 else if (ctxt->exception.error_code_valid)
8400 kvm_queue_exception_e(vcpu, ctxt->exception.vector,
8401 ctxt->exception.error_code);
8403 kvm_queue_exception(vcpu, ctxt->exception.vector);
8408 struct x86_emulate_ctxt *ctxt;
8410 ctxt = kmem_cache_zalloc(x86_emulator_cache, GFP_KERNEL_ACCOUNT);
8411 if (!ctxt) {
8416 ctxt->vcpu = vcpu;
8417 ctxt->ops = &emulate_ops;
8418 vcpu->arch.emulate_ctxt = ctxt;
8420 return ctxt;
8425 struct x86_emulate_ctxt *ctxt = vcpu->arch.emulate_ctxt;
8430 ctxt->gpa_available = false;
8431 ctxt->eflags = kvm_get_rflags(vcpu);
8432 ctxt->tf = (ctxt->eflags & X86_EFLAGS_TF) != 0;
8434 ctxt->eip = kvm_rip_read(vcpu);
8435 ctxt->mode = (!is_protmode(vcpu)) ? X86EMUL_MODE_REAL :
8436 (ctxt->eflags & X86_EFLAGS_VM) ? X86EMUL_MODE_VM86 :
8440 ctxt->interruptibility = 0;
8441 ctxt->have_exception = false;
8442 ctxt->exception.vector = -1;
8443 ctxt->perm_ok = false;
8445 init_decode_cache(ctxt);
8451 struct x86_emulate_ctxt *ctxt = vcpu->arch.emulate_ctxt;
8456 ctxt->op_bytes = 2;
8457 ctxt->ad_bytes = 2;
8458 ctxt->_eip = ctxt->eip + inc_eip;
8459 ret = emulate_int_real(ctxt, irq);
8464 ctxt->eip = ctxt->_eip;
8465 kvm_rip_write(vcpu, ctxt->eip);
8466 kvm_set_rflags(vcpu, ctxt->eflags);
8524 struct x86_emulate_ctxt *ctxt = vcpu->arch.emulate_ctxt;
8526 prepare_emulation_failure_exit(vcpu, NULL, 0, ctxt->fetch.data,
8527 ctxt->fetch.end - ctxt->fetch.data);
8645 static bool retry_instruction(struct x86_emulate_ctxt *ctxt,
8648 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
8676 if (x86_page_table_writing_insn(ctxt))
8679 if (ctxt->eip == last_retry_eip && last_retry_addr == cr2_or_gpa)
8682 vcpu->arch.last_retry_eip = ctxt->eip;
8826 static bool is_vmware_backdoor_opcode(struct x86_emulate_ctxt *ctxt)
8828 switch (ctxt->opcode_len) {
8830 switch (ctxt->b) {
8847 switch (ctxt->b) {
8870 struct x86_emulate_ctxt *ctxt = vcpu->arch.emulate_ctxt;
8875 r = x86_decode_insn(ctxt, insn, insn_len, emulation_type);
8888 struct x86_emulate_ctxt *ctxt = vcpu->arch.emulate_ctxt;
8919 if (ctxt->have_exception &&
8925 WARN_ON_ONCE(ctxt->exception.vector == UD_VECTOR ||
8926 exception_type(ctxt->exception.vector) == EXCPT_TRAP);
8935 !is_vmware_backdoor_opcode(ctxt)) {
8947 if (ctxt->mode != X86EMUL_MODE_PROT64)
8948 ctxt->eip = (u32)ctxt->_eip;
8950 ctxt->eip = ctxt->_eip;
8957 kvm_rip_write(vcpu, ctxt->eip);
8958 if (ctxt->eflags & X86_EFLAGS_RF)
8959 kvm_set_rflags(vcpu, ctxt->eflags & ~X86_EFLAGS_RF);
8963 if (retry_instruction(ctxt, cr2_or_gpa, emulation_type))
8970 emulator_invalidate_register_cache(ctxt);
8976 ctxt->exception.address = cr2_or_gpa;
8980 ctxt->gpa_available = true;
8981 ctxt->gpa_val = cr2_or_gpa;
8985 ctxt->exception.address = 0;
8988 r = x86_emulate_insn(ctxt);
9000 if (ctxt->have_exception) {
9032 toggle_interruptibility(vcpu, ctxt->interruptibility);
9040 if (!ctxt->have_exception ||
9041 exception_type(ctxt->exception.vector) == EXCPT_TRAP) {
9043 if (ctxt->is_branch)
9045 kvm_rip_write(vcpu, ctxt->eip);
9046 if (r && (ctxt->tf || (vcpu->guest_debug & KVM_GUESTDBG_SINGLESTEP)))
9049 __kvm_set_rflags(vcpu, ctxt->eflags);
9058 if (unlikely((ctxt->eflags & ~rflags) & X86_EFLAGS_IF))
9928 static int emulator_fix_hypercall(struct x86_emulate_ctxt *ctxt)
9930 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
9939 ctxt->exception.error_code_valid = false;
9940 ctxt->exception.vector = UD_VECTOR;
9941 ctxt->have_exception = true;
9947 return emulator_write_emulated(ctxt, rip, instruction, 3,
9948 &ctxt->exception);
11458 struct x86_emulate_ctxt *ctxt = vcpu->arch.emulate_ctxt;
11463 ret = emulator_task_switch(ctxt, tss_selector, idt_index, reason,
11472 kvm_rip_write(vcpu, ctxt->eip);
11473 kvm_set_rflags(vcpu, ctxt->eflags);