On Fri, 18 Apr 2008 10:25:15 -0500
Anthony Liguori <[EMAIL PROTECTED]> wrote:
> I'd prefer you not do an emulate_instruction loop at all. Just emulate
> one instruction on vmentry failure and let VT tell you what instructions
> you need to emulate.
>
> It's only four instructions so I don't think the performance is going to
> matter. Take a look at the patch I posted previously.
you were right, I not updated eip correctly. It is fixed now with the
following code:
case 0xea: /* jmp (far, absolute) */ {
struct kvm_segment kvm_seg;
uint16_t eip;
uint16_t sel;
int ret;
eip = insn_fetch(u16, 2, c->eip);
sel = insn_fetch(u16, 2, c->eip);
kvm_x86_ops->get_segment(ctxt->vcpu, &kvm_seg, VCPU_SREG_CS);
kvm_seg.selector = sel;
ret = load_segment_descriptor(ctxt->vcpu, kvm_seg.selector, 9,
VCPU_SREG_CS);
if (ret < 0 ) {
printk(KERN_INFO "%s: Failed to load CS selector\n",
__FUNCTION__);
goto cannot_emulate;
}
c->eip = eip;
break;
I print the instruction to be emulated and it seems ok. I have the following
outputs:
[24203.663324] vmentry_failure: emulation at (46e53) rip 6e13: ea 18 6e 18
[24203.664668] vmentry_failure: emulation at (46e58) rip 6e18: 66 b8 20 00
[24203.668650] vmentry_failure: emulation failed (vmentry failure) rip 6e18 66
b8 20 00
So the emulation that failed is "mov $0x20, %ax". It needs to be
emulated. As you said Anthony it's only four instructions that need to
be emulated, shouldn't be a big issue.
Best 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