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

Re: [Xen-devel] evtchn_upcall_mask for PV-on-HVM





On 30/11/06 13:56, "Tian, Kevin" <kevin.tian@xxxxxxxxx> wrote:

>> Local_events_need_delivery() should check for pending APIC/PIC
>> interrupts on
>> HVM. That'll fix the block() wakeup-waiting race too.
>> 
>> -- Keir
> 
> Hi, Keir,
> Sorry that I didn't quite catch you. Did you mean check for
> pending interrupts for same gsi line (used as callback irq)? Whether
> to actually pending an irq instance is decided by APIC/PIC themselves,
> right? Vmx_intr_assit just needs to check status of
> evtchn_upcall_pending which serves as a virtual wire state. BTW,
> what's the block() wakeup-waiting race above? :-)

I mean that the evtchn_upcall_pending flag is not the master flag indicating
whether there are pending interrupts for an HVM guest. So it is not the
correct thing to test in local_events_need_delivery(). The correct thing to
test is whether there are any interrupts pending from the PIC/IOAPIC.

The wakeup-waiting race is that a VCPU may block just when, for example, the
qemu-dm rtl8139 device model is asserting an interrupt. It will try to
vcpu_kick() and send an IPI to the CPU that is running the HVM VCPU.
However, before that IPI is received the other CPU may block the HVM VCPU
(after checking for local_events_need_delivery() which will in this case
return 0). So the rtl8139 interrupt does not prevent the HVM VCPU from
blocking, which is a bug.

 - Keir


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

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