[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] Interrupt issues with hvm_emulate_one_vm_event()
>>> On 25.05.17 at 11:40, <rcojocaru@xxxxxxxxxxxxxxx> wrote: > I've noticed that, with pages marked NX and vm_event emulation, we can > end up emulating an ud2, for which hvm_emulate_one() returns > X86EMUL_EXCEPTION in hvm_emulate_one_vm_event(). Could you explain what would lead to emulation of UD2? > This, in turn, causes a hvm_inject_event() call in the context of > hvm_do_resume(), which can, if there's already a pending event there, > cause a 101 BSOD (timer-related, if I understand correctly) or loss of > input (mouse frozen, keyboard unresponsive). > > After much trial and error, I've been able to confirm this by leaving a > guest on for almost a full day with this change: > > case X86EMUL_EXCEPTION: > - hvm_inject_event(&ctx.ctxt.event); > + if ( !hvm_event_pending(current) ) > + hvm_inject_event(&ctx.ctxt.event); > > and checking that there's been no BSOD or loss of input. > > However, just losing the event here, while fine to prove that this is > indeed the problem, is not OK. But I'm not sure what an elegant / robust > way of fixing this is. Much depends on what the other event is: If it's an interrupt, I'd assume there to be an ordering problem (interrupts shouldn't be injected when there is a pending exception, their delivery instead should be attempted on the first instruction of the exception handler [if interrupts remain on] or whenever interrupts get re-enabled). Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |