From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Campbell Subject: Re: [PATCH v4 17/33] xen/arm: vgic: Add spi_to_pending Date: Tue, 31 Mar 2015 11:55:43 +0100 Message-ID: <1427799343.2115.63.camel@citrix.com> References: <1426793399-6283-1-git-send-email-julien.grall@linaro.org> <1426793399-6283-18-git-send-email-julien.grall@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1Yctpk-0005Fy-8e for xen-devel@lists.xenproject.org; Tue, 31 Mar 2015 10:55:48 +0000 In-Reply-To: <1426793399-6283-18-git-send-email-julien.grall@linaro.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Julien Grall Cc: xen-devel@lists.xenproject.org, tim@xen.org, stefano.stabellini@citrix.com List-Id: xen-devel@lists.xenproject.org On Thu, 2015-03-19 at 19:29 +0000, Julien Grall wrote: > Introduce spi_to_pending in order retrieve the irq_pending structure for > a specific SPI. > > It's not possible to re-use irq_to_pending because it's required a VCPU "it requires" > and some call of the new function may during domain destruction after > the VCPUs are freed. > > Signed-off-by: Julien Grall Acked-by: Ian Campbell Although given the name I would expect it to take an spi (i.e. -32) not an irq. I can't think of a better name though and perhaps that just makes things harder for the caller. Ian. > > --- > Changes in v4: > - Patch added > --- > xen/arch/arm/vgic.c | 7 +++++++ > xen/include/asm-arm/vgic.h | 1 + > 2 files changed, 8 insertions(+) > > diff --git a/xen/arch/arm/vgic.c b/xen/arch/arm/vgic.c > index 74751e0..fc283ec 100644 > --- a/xen/arch/arm/vgic.c > +++ b/xen/arch/arm/vgic.c > @@ -371,6 +371,13 @@ struct pending_irq *irq_to_pending(struct vcpu *v, unsigned int irq) > return n; > } > > +struct pending_irq *spi_to_pending(struct domain *d, unsigned int irq) > +{ > + ASSERT(irq >= NR_LOCAL_IRQS); > + > + return &d->arch.vgic.pending_irqs[irq - 32]; > +} > + > void vgic_clear_pending_irqs(struct vcpu *v) > { > struct pending_irq *p, *t; > diff --git a/xen/include/asm-arm/vgic.h b/xen/include/asm-arm/vgic.h > index 647f2fe..8d22532 100644 > --- a/xen/include/asm-arm/vgic.h > +++ b/xen/include/asm-arm/vgic.h > @@ -185,6 +185,7 @@ extern void vgic_vcpu_inject_irq(struct vcpu *v, unsigned int virq); > extern void vgic_vcpu_inject_spi(struct domain *d, unsigned int virq); > extern void vgic_clear_pending_irqs(struct vcpu *v); > extern struct pending_irq *irq_to_pending(struct vcpu *v, unsigned int irq); > +extern struct pending_irq *spi_to_pending(struct domain *d, unsigned int irq); > extern struct vgic_irq_rank *vgic_rank_offset(struct vcpu *v, int b, int n, int s); > extern struct vgic_irq_rank *vgic_rank_irq(struct vcpu *v, unsigned int irq); > extern int vgic_emulate(struct cpu_user_regs *regs, union hsr hsr);