|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 2/6] xen/arm: track the state of guest IRQs
On Thu, 12 Dec 2013, Ian Campbell wrote:
> On Wed, 2013-12-11 at 19:07 +0000, Stefano Stabellini wrote:
> > @@ -916,6 +910,36 @@ static void maintenance_interrupt(int irq, void
> > *dev_id, struct cpu_user_regs *r
> > cpu = p->desc->arch.eoi_cpu;
> > pirq = p->desc->irq;
> > }
> > + if ( test_bit(GIC_IRQ_GUEST_PENDING, &p->status) &&
> > + test_bit(GIC_IRQ_GUEST_ENABLED, &p->status))
> > + {
> > + BUG_ON(!list_empty(&p->lr_queue));
> > +
> > + list_for_each_entry ( iter, &v->arch.vgic.lr_pending, lr_queue
> > )
> > + {
> > + if ( iter->priority > p->priority )
> > + {
> > + list_add_tail(&p->lr_queue, &iter->lr_queue);
> > + goto out;
> > + }
> > + }
> > + list_add_tail(&p->lr_queue, &v->arch.vgic.lr_pending);
> > +out:
> > + set_int = 1;
> > + }
> > +
> > + clear_bit(GIC_IRQ_GUEST_VISIBLE, &p->status);
> > +
> > + if ( !list_empty(&v->arch.vgic.lr_pending) ) {
> > + p2 = list_entry(v->arch.vgic.lr_pending.next, typeof(*p2),
> > lr_queue);
> > + gic_set_lr(i, p2->irq, GICH_LR_PENDING, p2->priority);
> > + list_del_init(&p2->lr_queue);
> > + set_bit(i, &this_cpu(lr_mask));
> > + set_int = 1;
> > + }
> > + spin_unlock_irq(&gic.lock);
> > +
> > + spin_lock_irq(&v->arch.vgic.lock);
> > list_del_init(&p->inflight);
>
> Is it correct that we remove the IRQ from the inflight list here even in
> the case where we have reinjected it above?
Well spotted! This bug was introduced in v4. I'll fix it.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |