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
[email protected]
https://lists.sourceforge.net/lists/listinfo/kvm-devel