|
[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 |