[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] dpci: Put the dpci back on the list if scheduled from another CPU.
On Wed, Mar 18, 2015 at 04:06:37PM +0000, Jan Beulich wrote: > >>> On 18.03.15 at 14:58, <konrad.wilk@xxxxxxxxxx> wrote: > > On Wed, Mar 18, 2015 at 07:38:12AM +0000, Jan Beulich wrote: > >> >>> On 17.03.15 at 18:15, <konrad.wilk@xxxxxxxxxx> wrote: > >> > The latest one (please see attached) would cause an dead-lock iff > >> > on the CPU we are running the softirq and an do_IRQ comes for the > >> > exact dpci we are in process of executing. > >> > >> I'm afraid I'm not seeing it - please explain. > > > > Lets assume that the device is an PCIe with MSI. We have only one > > VCPU in the guest. > > > > We receive the first interrupt, end up going: > > vmx_vmexit_handler > > - case EXIT_REASON_EXTERNAL_INTERRUPT > > \- vmx_do_extint > > \- do_IRQ > > \- __do_IRQ_guest > > \- hvm_do_IRQ_dpci > > \- raise_softirq_for > > [DPCI_SOFTIRQ bit set] > > vmx_process_softirq > > sti > > do_softirq > > -\ __do_sofitq_ > > \- dpci_softirq > > -\ hvm_dirq_assist > > [state is 'running'] > > > > [Same vector comes in] > > Is that indeed possible? Afaict nothing in the code sequence above > ack-ed the interrupt, and hence another one can't come in. The do_IRQ acks it: 854 spin_lock(&desc->lock); 855 desc->handler->ack(desc); which is: 424 static void ack_maskable_msi_irq(struct irq_desc *desc) 425 { 426 ack_nonmaskable_msi_irq(desc); 427 ack_APIC_irq(); /* ACKTYPE_NONE */ 428 } .. snip.. 857 if ( likely(desc->status & IRQ_GUEST) ) .. 886 __do_IRQ_guest(irq); > > Jan > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |