[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v9 11/28] ARM: VGIC: add vcpu_id to struct pending_irq



On Tue, 16 May 2017, Julien Grall wrote:
> Hi Andre,
> 
> On 11/05/17 18:53, Andre Przywara wrote:
> > The target CPU for an LPI is encoded in the interrupt translation table
> > entry, so can't be easily derived from just an LPI number (short of
> > walking *all* tables and find the matching LPI).
> > To avoid this in case we need to know the VCPU (for the INVALL command,
> > for instance), put the VCPU ID in the struct pending_irq, so that it is
> > easily accessible.
> > We use the remaining 8 bits of padding space for that to avoid enlarging
> > the size of struct pending_irq. The number of VCPUs is limited to 127
> > at the moment anyway, which we also confirm with a BUILD_BUG_ON.
> > 
> > Signed-off-by: Andre Przywara <andre.przywara@xxxxxxx>
> > ---
> >  xen/arch/arm/vgic.c        | 3 +++
> >  xen/include/asm-arm/vgic.h | 1 +
> >  2 files changed, 4 insertions(+)
> > 
> > diff --git a/xen/arch/arm/vgic.c b/xen/arch/arm/vgic.c
> > index 27d6b51..97a2cf2 100644
> > --- a/xen/arch/arm/vgic.c
> > +++ b/xen/arch/arm/vgic.c
> > @@ -63,6 +63,9 @@ struct vgic_irq_rank *vgic_rank_irq(struct vcpu *v,
> > unsigned int irq)
> > 
> >  void vgic_init_pending_irq(struct pending_irq *p, unsigned int virq)
> >  {
> > +    /* The lpi_vcpu_id field must be big enough to hold a VCPU ID. */
> > +    BUILD_BUG_ON(BIT(sizeof(p->lpi_vcpu_id) * 8) < MAX_VIRT_CPUS);
> > +
> >      INIT_LIST_HEAD(&p->inflight);
> >      INIT_LIST_HEAD(&p->lr_queue);
> >      p->irq = virq;
> > diff --git a/xen/include/asm-arm/vgic.h b/xen/include/asm-arm/vgic.h
> > index e2111a5..02732db 100644
> > --- a/xen/include/asm-arm/vgic.h
> > +++ b/xen/include/asm-arm/vgic.h
> > @@ -73,6 +73,7 @@ struct pending_irq
> >      uint8_t lr;
> >      uint8_t priority;
> >      uint8_t lpi_priority;       /* Caches the priority if this is an LPI.
> > */
> > +    uint8_t lpi_vcpu_id;        /* The VCPU for an LPI. */
> 
> Based on the previous patch (#10), I was expecting to see this new field
> initialized in vgic_init_pending_irq.

right, it should be initialized to INVALID_VCPU_ID


> >      /* inflight is used to append instances of pending_irq to
> >       * vgic.inflight_irqs */
> >      struct list_head inflight;
> > 
> 
> Cheers,
> 
> -- 
> Julien Grall
> 

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

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