Lines Matching defs:ctxt
69 #define emul_to_vcpu(ctxt) \
70 container_of(ctxt, struct kvm_vcpu, arch.emulate_ctxt)
161 int emulator_fix_hypercall(struct x86_emulate_ctxt *ctxt);
3594 static int kvm_fetch_guest_virt(struct x86_emulate_ctxt *ctxt,
3598 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
3606 int kvm_read_guest_virt(struct x86_emulate_ctxt *ctxt,
3610 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
3618 static int kvm_read_guest_virt_system(struct x86_emulate_ctxt *ctxt,
3622 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
3626 int kvm_write_guest_virt_system(struct x86_emulate_ctxt *ctxt,
3631 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
3828 int emulator_read_write(struct x86_emulate_ctxt *ctxt, unsigned long addr,
3833 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
3854 static int emulator_read_emulated(struct x86_emulate_ctxt *ctxt,
3860 return emulator_read_write(ctxt, addr, val, bytes,
3864 int emulator_write_emulated(struct x86_emulate_ctxt *ctxt,
3870 return emulator_read_write(ctxt, addr, (void *)val, bytes,
3884 static int emulator_cmpxchg_emulated(struct x86_emulate_ctxt *ctxt,
3891 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
3947 return emulator_write_emulated(ctxt, addr, new, bytes, exception);
3991 static int emulator_pio_in_emulated(struct x86_emulate_ctxt *ctxt,
3995 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
4012 static int emulator_pio_out_emulated(struct x86_emulate_ctxt *ctxt,
4016 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
4027 static void emulator_invlpg(struct x86_emulate_ctxt *ctxt, ulong address)
4029 kvm_mmu_invlpg(emul_to_vcpu(ctxt), address);
4051 static void emulator_wbinvd(struct x86_emulate_ctxt *ctxt)
4053 kvm_emulate_wbinvd(emul_to_vcpu(ctxt));
4056 int emulator_get_dr(struct x86_emulate_ctxt *ctxt, int dr, unsigned long *dest)
4058 return _kvm_get_dr(emul_to_vcpu(ctxt), dr, dest);
4061 int emulator_set_dr(struct x86_emulate_ctxt *ctxt, int dr, unsigned long value)
4064 return __kvm_set_dr(emul_to_vcpu(ctxt), dr, value);
4072 static unsigned long emulator_get_cr(struct x86_emulate_ctxt *ctxt, int cr)
4074 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
4101 static int emulator_set_cr(struct x86_emulate_ctxt *ctxt, int cr, ulong val)
4103 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
4130 static void emulator_set_rflags(struct x86_emulate_ctxt *ctxt, ulong val)
4132 kvm_set_rflags(emul_to_vcpu(ctxt), val);
4135 static int emulator_get_cpl(struct x86_emulate_ctxt *ctxt)
4137 return kvm_x86_ops->get_cpl(emul_to_vcpu(ctxt));
4140 static void emulator_get_gdt(struct x86_emulate_ctxt *ctxt, struct desc_ptr *dt)
4142 kvm_x86_ops->get_gdt(emul_to_vcpu(ctxt), dt);
4145 static void emulator_get_idt(struct x86_emulate_ctxt *ctxt, struct desc_ptr *dt)
4147 kvm_x86_ops->get_idt(emul_to_vcpu(ctxt), dt);
4150 static void emulator_set_gdt(struct x86_emulate_ctxt *ctxt, struct desc_ptr *dt)
4152 kvm_x86_ops->set_gdt(emul_to_vcpu(ctxt), dt);
4155 static void emulator_set_idt(struct x86_emulate_ctxt *ctxt, struct desc_ptr *dt)
4157 kvm_x86_ops->set_idt(emul_to_vcpu(ctxt), dt);
4161 struct x86_emulate_ctxt *ctxt, int seg)
4163 return get_segment_base(emul_to_vcpu(ctxt), seg);
4166 static bool emulator_get_segment(struct x86_emulate_ctxt *ctxt, u16 *selector,
4172 kvm_get_segment(emul_to_vcpu(ctxt), &var, seg);
4198 static void emulator_set_segment(struct x86_emulate_ctxt *ctxt, u16 selector,
4202 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
4229 static int emulator_get_msr(struct x86_emulate_ctxt *ctxt,
4232 return kvm_get_msr(emul_to_vcpu(ctxt), msr_index, pdata);
4235 static int emulator_set_msr(struct x86_emulate_ctxt *ctxt,
4238 return kvm_set_msr(emul_to_vcpu(ctxt), msr_index, data);
4241 static int emulator_read_pmc(struct x86_emulate_ctxt *ctxt,
4244 return kvm_pmu_read_pmc(emul_to_vcpu(ctxt), pmc, pdata);
4247 static void emulator_halt(struct x86_emulate_ctxt *ctxt)
4249 emul_to_vcpu(ctxt)->arch.halt_request = 1;
4252 static void emulator_get_fpu(struct x86_emulate_ctxt *ctxt)
4255 kvm_load_guest_fpu(emul_to_vcpu(ctxt));
4263 static void emulator_put_fpu(struct x86_emulate_ctxt *ctxt)
4268 static int emulator_intercept(struct x86_emulate_ctxt *ctxt,
4272 return kvm_x86_ops->check_intercept(emul_to_vcpu(ctxt), info, stage);
4275 static bool emulator_get_cpuid(struct x86_emulate_ctxt *ctxt,
4281 cpuid = kvm_find_cpuid_entry(emul_to_vcpu(ctxt),
4356 struct x86_emulate_ctxt *ctxt = &vcpu->arch.emulate_ctxt;
4357 if (ctxt->exception.vector == PF_VECTOR)
4358 kvm_propagate_fault(vcpu, &ctxt->exception);
4359 else if (ctxt->exception.error_code_valid)
4360 kvm_queue_exception_e(vcpu, ctxt->exception.vector,
4361 ctxt->exception.error_code);
4363 kvm_queue_exception(vcpu, ctxt->exception.vector);
4366 static void init_decode_cache(struct x86_emulate_ctxt *ctxt,
4369 memset(&ctxt->twobyte, 0,
4370 (void *)&ctxt->regs - (void *)&ctxt->twobyte);
4371 memcpy(ctxt->regs, regs, sizeof(ctxt->regs));
4373 ctxt->fetch.start = 0;
4374 ctxt->fetch.end = 0;
4375 ctxt->io_read.pos = 0;
4376 ctxt->io_read.end = 0;
4377 ctxt->mem_read.pos = 0;
4378 ctxt->mem_read.end = 0;
4383 struct x86_emulate_ctxt *ctxt = &vcpu->arch.emulate_ctxt;
4396 ctxt->eflags = kvm_get_rflags(vcpu);
4397 ctxt->eip = kvm_rip_read(vcpu);
4398 ctxt->mode = (!is_protmode(vcpu)) ? X86EMUL_MODE_REAL :
4399 (ctxt->eflags & X86_EFLAGS_VM) ? X86EMUL_MODE_VM86 :
4403 ctxt->guest_mode = is_guest_mode(vcpu);
4405 init_decode_cache(ctxt, vcpu->arch.regs);
4411 struct x86_emulate_ctxt *ctxt = &vcpu->arch.emulate_ctxt;
4416 ctxt->op_bytes = 2;
4417 ctxt->ad_bytes = 2;
4418 ctxt->_eip = ctxt->eip + inc_eip;
4419 ret = emulate_int_real(ctxt, irq);
4424 ctxt->eip = ctxt->_eip;
4425 memcpy(vcpu->arch.regs, ctxt->regs, sizeof ctxt->regs);
4426 kvm_rip_write(vcpu, ctxt->eip);
4427 kvm_set_rflags(vcpu, ctxt->eflags);
4481 static bool retry_instruction(struct x86_emulate_ctxt *ctxt,
4484 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
4508 if (x86_page_table_writing_insn(ctxt))
4511 if (ctxt->eip == last_retry_eip && last_retry_addr == cr2)
4514 vcpu->arch.last_retry_eip = ctxt->eip;
4532 struct x86_emulate_ctxt *ctxt = &vcpu->arch.emulate_ctxt;
4539 ctxt->interruptibility = 0;
4540 ctxt->have_exception = false;
4541 ctxt->perm_ok = false;
4543 ctxt->only_vendor_specific_insn
4546 r = x86_decode_insn(ctxt, insn, insn_len);
4562 kvm_rip_write(vcpu, ctxt->_eip);
4566 if (retry_instruction(ctxt, cr2, emulation_type))
4573 memcpy(ctxt->regs, vcpu->arch.regs, sizeof ctxt->regs);
4577 r = x86_emulate_insn(ctxt);
4589 if (ctxt->have_exception) {
4608 toggle_interruptibility(vcpu, ctxt->interruptibility);
4609 kvm_set_rflags(vcpu, ctxt->eflags);
4611 memcpy(vcpu->arch.regs, ctxt->regs, sizeof ctxt->regs);
4613 kvm_rip_write(vcpu, ctxt->eip);
5031 int emulator_fix_hypercall(struct x86_emulate_ctxt *ctxt)
5033 struct kvm_vcpu *vcpu = emul_to_vcpu(ctxt);
5046 return emulator_write_emulated(ctxt, rip, instruction, 3, NULL);
5535 struct x86_emulate_ctxt *ctxt = &vcpu->arch.emulate_ctxt;
5536 memcpy(vcpu->arch.regs, ctxt->regs, sizeof ctxt->regs);
5665 struct x86_emulate_ctxt *ctxt = &vcpu->arch.emulate_ctxt;
5670 ret = emulator_task_switch(ctxt, tss_selector, idt_index, reason,
5676 memcpy(vcpu->arch.regs, ctxt->regs, sizeof ctxt->regs);
5677 kvm_rip_write(vcpu, ctxt->eip);
5678 kvm_set_rflags(vcpu, ctxt->eflags);