On Tue, 15 Apr 2008 16:06:43 +0300 Avi Kivity <[EMAIL PROTECTED]> wrote:
> > ... > > handle_vmentry_failure: invalid guest state > > handle_vmentry_failure: start emulation > > handle_vmentry_failure: emulation failed > > > > What instruction failed, exactly? > I added the code do dump the instruction and it seems that it's the emulation of 0xe6 (== out imm8, al) that failed. I made modifications to emulate it (see below) and now I have another problem in kvm userspace with the following message (and the emulation doesn't work): enterprise:~ $ kvm_run: Operation not permitted enterprise:~ $ kvm_run returned -1 > You need to load rip as well. Ooops, yes. So jump far emulation is now like: + case 0xea: /* jmp far */ { + struct kvm_segment kvm_seg; + long int eip; + int ret; + + kvm_x86_ops->get_segment(ctxt->vcpu, &kvm_seg, VCPU_SREG_CS); + + ret = load_segment_descriptor(ctxt->vcpu, kvm_seg.selector, 9, VCPU_SREG_CS); + if (ret < 0){ + printk(KERN_INFO "%s: Failed to load CS descriptor\n", __FUNCTION__); + goto cannot_emulate; + } + + switch (c->op_bytes) { + case 2: + eip = insn_fetch(s16, 2, c->eip); + break; + case 4: + eip = insn_fetch(s32, 4, c->eip); + break; + default: + DPRINTF("jmp far: Invalid op_bytes\n"); + goto cannot_emulate; + } + printk(KERN_INFO "eip == 0x%lx\n", eip); + c->eip = eip; + break; + } It seems that the jump to cs:eip works and now I have the following error: [18535.446917] handle_vmentry_failure: invalid guest state [18535.449519] handle_vmentry_failure: start emulation [18535.457519] eip == 0x6e18 [18535.467685] handle_vmentry_failure: emulation of 0xe6 failed For the emulation of 0xe6 I used the following one that I found in nitin's tree: + case 0xe6: /* out imm8, al */ + case 0xe7: /* out imm8, ax/eax */ { + struct kvm_io_device *pio_dev; + + pio_dev = vcpu_find_pio_dev(ctxt->vcpu, c->src.val); + kvm_iodevice_write(pio_dev, c->src.val, + (c->d & ByteOp) ? 1 : c->op_bytes, + &c->regs[VCPU_REGS_RAX]); + } + break; I will look closer where is the problem and as you suggested, I will display the instruction to be emulated and the register state before and after, and compare with the expected state. Thanks for your help, Regards, Guillaume ------------------------------------------------------------------------- This SF.net email is sponsored by the 2008 JavaOne(SM) Conference Don't miss this year's exciting event. There's still time to save $100. Use priority code J8TL2D2. http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone _______________________________________________ kvm-devel mailing list kvm-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/kvm-devel