Re: [PATCH 3/4] KVM: VMX: Emulated real mode interrupt injection

Avi Kivity
2010-09-21T16:00:15Z

On 09/21/2010 05:36 PM, Marcelo Tosatti wrote:
> On Tue, Sep 21, 2010 at 01:56:50PM +0200, Avi Kivity wrote:
> > On 09/20/2010 07:30 PM, Marcelo Tosatti wrote:
> > >> static void __vmx_complete_interrupts(struct vcpu_vmx *vmx,
> > >> u32 idt_vectoring_info,
> > >> int instr_len_field,
> > >> @@ -3864,9 +3814,6 @@ static void __vmx_complete_interrupts(struct vcpu_vmx *vmx,
> > >> int type;
> > >> bool idtv_info_valid;
> > >>
> > >> - if (vmx->rmode.irq.pending)
> > >> - fixup_rmode_irq(vmx,&idt_vectoring_info);
> > >> -
> > >
> > >Don't you have to undo kvm_inject_realmode_interrupt if injection fails?
> > >
> > >
> >
> > Injection cannot fail (at least, in the same sense as the vmx
> > injections). It's actually not about failures, it's about guest
> > entry being cancelled due to a signal or some KVM_REQ that needs
> > attention. For vmx style injections, we need to undo the injection
> > to keep things in a consistent state. To realmode emulated
> > injection, everything is in a consistent state already, so no need
> > to undo anything (it's also impossible, since we overwrote memory on
> > the stack).
>
> Aren't you going to push EFLAGS,CS,EIP on the stack twice if that
> occurs?
>

No, since we clear the pending flag (we do that even for vmx-injected
interrupts; then cancel or injection failure re-sets the flag).

--
error compiling committee.c: too many arguments to function