[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


 


Rackspace

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