[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v10 24/32] ARM: GICv3: handle unmapped LPIs
On Fri, 2 Jun 2017, Julien Grall wrote: > Hi Andre, > > On 05/26/2017 06:35 PM, Andre Przywara wrote: > > @@ -441,6 +443,40 @@ void gic_raise_inflight_irq(struct vcpu *v, unsigned > > int virtual_irq) > > #endif > > } > > +/* > > + * Find an unused LR to insert an IRQ into, starting with the LR given > > + * by @lr. If this new interrupt is a PRISTINE LPI, scan the other LRs to > > + * avoid inserting the same IRQ twice. This situation can occur when an > > + * event gets discarded while the LPI is in an LR, and a new LPI with the > > + * same number gets mapped quickly afterwards. > > + */ > > +static unsigned int gic_find_unused_lr(struct vcpu *v, > > + struct pending_irq *p, > > + unsigned int lr) > > +{ > > + unsigned int nr_lrs = gic_hw_ops->info->nr_lrs; > > + unsigned long *lr_mask = (unsigned long *) &this_cpu(lr_mask); > > + struct gic_lr lr_val; > > + > > + ASSERT(spin_is_locked(&v->arch.vgic.lock)); > > + > > + if ( test_bit(GIC_IRQ_GUEST_PRISTINE_LPI, &p->status) ) > > Stefano suggested to put an unlikely and ... > > > @@ -479,8 +516,14 @@ static void gic_update_one_lr(struct vcpu *v, int i) > > gic_hw_ops->read_lr(i, &lr_val); > > irq = lr_val.virq; > > p = irq_to_pending(v, irq); > > - /* An LPI might have been unmapped, in which case we just clean up > > here. */ > > - if ( unlikely(!p) ) > > + /* > > + * An LPI might have been unmapped, in which case we just clean up > > here. > > + * If that LPI is marked as PRISTINE, the information in the LR is > > bogus, > > + * as it belongs to a previous, already unmapped LPI. So we discard it > > + * here as well. > > + */ > > + if ( unlikely(!p) || > > + test_and_clear_bit(GIC_IRQ_GUEST_PRISTINE_LPI, &p->status) ) > > ... I think we should put one here too. > > With that, I think the patch looks good. I will let Stefano confirm he is > happy with that too. Yes, I think it is OK _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |