[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [Xenhackthon] Virtualized APIC registers - virtual interrupt delivery.



> > >>>>> OK, in which case Linux ~v2.6.32 (when the event callback mechanism 
> > >>>>> was
> > >>>>> introduced for HVM guests) will _not_ take advantage of this, right?
> > >>>> Yes, event mechanism cannot benefit from it.
> > >>> 
> > >>> I think that Konrad was referring to the vector callback mechanism:
> > >> You are right. What I want to say is vector callback mechanism.
> > >> 
> > >>> 
> > >>> linux side  drivers/xen/events.c:xen_callback_vector
> > >>> xen side    xen/arch/x86/hvm/irq.c:hvm_set_callback_via
> > >>> 
> > >>> Also see:
> > >>> 
> > >>> commit e5fd1f6505c43440bc2450253c79c80174b693bc
> > >>> Author: Keir Fraser <keir.fraser@xxxxxxxxxx>
> > >>> Date:   Tue May 25 11:28:58 2010 +0100
> > >>> 
> > >>>     x86 hvm: implement vector callback for evtchn delivery
> > >>>     
> > >>>     Signed-off-by: Sheng Yang <sheng@xxxxxxxxxxxxxxx>
> > >>>     Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
> > >>>     Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx>
> > >>> From the guest point of view it looks like a normal vector callback
> > >>> (similar to an IPI).
> > >>> 
> > >>> 
> > >>>>> Is there a way to solve this so that they _will_ take advantage of 
> > >>>>> this.
> > >>>> Perhaps not. virtual interrupt delivery relies on EOI logic to inject 
> > >>>> the
> > > pending
> > >>> interrupt. But event channel doesn't have such mechanism.
> > >>> 
> > >>> It's true that we don't do any EOIs with the vector callback mechanism,
> > >>> the same way the operating system doesn't do any EOIs when it receives
> > >>> an IPI.
> > >> IPI also need EOI.
> > > 
> > > Ooops, you are right.
> > > 
> > > Does guest EOI still cause a trap into Xen?
> > It depends on the bit in EOI exit bitmap. If it is set, then EOI still will 
> > cause vmexit(EOI-induced vmexit). Otherwise, no vmexit happened.
> > 
> > The following pseudocode details the behavior of EOI virtualization:
> > Vector â SVI;
> > VISR[Vector] â 0;
> > IF any bits set in VISR
> > THEN SVI â highest index of bit set in VISR
> > ELSE SVI â 0;
> > FI;
> > perform PPR virtualiation
> > IF EOI_exit_bitmap[Vector] = 1 
> > THEN cause EOI-induced VM exit with Vector as exit qualification;
> > ELSE evaluate pending virtual interrupts; 
> > FI;
> 
> Thanks for the explanation.
> 
> At this point I wonder: would vector callbacks, that doesn't do any
> guest EOIs, create any problems to this new virtual interrupt delivery
> mechanism?
> If the guest does not do any EOIs after receiving a vector callback,
> then other pending interrupts are never evaluated (the last ELSE
> condition in your pseudocode cannot happen), is that correct?
> 
> In any case we could consider introducing an ack_APIC_irq() call at the
> beginning of xen_evtchn_do_upcall, so that the vector callback mechanism
> can take advantage of posted interrupts too.

Or just split the mechanism. Meaning use the event callback for "legacy"
type events, and for PCI passthrough devices (where the host supports
posted interrupts) just use the baremetal implementation.

That would entail some form of hypercall to identify whether a PCIe device
is "posted-interrupt" candidate and if so don't use the event channel
mechanism for it.

> Of course we would do that only if posted interrupts are available.

> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.