|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 5/6] xen/arm: Only enable physical IRQs when the guest asks
On Wed, 11 Dec 2013, Julien Grall wrote:
> On 12/10/2013 06:50 PM, Stefano Stabellini wrote:
> > From: Julien Grall <julien.grall@xxxxxxxxxx>
> >
> > Set/Unset IRQ_DISABLED from gic_irq_enable and gic_irq_disable.
> > Enable IRQs when the guest requests it, not unconditionally at boot time.
> >
> > Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
> > Signed-off-by: Julien Grall <julien.grall@xxxxxxxxxx>
> > Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
> >
> > Changes in v2:
> > - protect startup and shutdown with gic and desc locks.
> > ---
> > xen/arch/arm/gic.c | 46 ++++++++++++++++++++++++++--------------------
> > xen/arch/arm/vgic.c | 6 ++----
> > 2 files changed, 28 insertions(+), 24 deletions(-)
> >
> > diff --git a/xen/arch/arm/gic.c b/xen/arch/arm/gic.c
> > index 5e60c5a..62330dd 100644
> > --- a/xen/arch/arm/gic.c
> > +++ b/xen/arch/arm/gic.c
> > @@ -133,16 +133,26 @@ static void gic_irq_enable(struct irq_desc *desc)
> > {
> > int irq = desc->irq;
> >
> > + spin_lock(&desc->lock);
> > + spin_lock(&gic.lock);
> > /* Enable routing */
> > GICD[GICD_ISENABLER + irq / 32] = (1u << (irq % 32));
> > + desc->status &= ~IRQ_DISABLED;
> > + spin_unlock(&gic.lock);
> > + spin_unlock(&desc->lock);
> > }
>
> I think we should have something like that:
>
> desc->status &= ...
> dsb
> GICD[...] = ...
>
> As soon as the interrupt is enabled in the distributor, it can be fired. With
> your solution, another CPU (and even this one because the interrupt is not
> disabled), can receive the interrupt. But it won't work because the IRQ is
> marked as disabled.
>
> So you also should disable interrupt here.
I think that you are right on both points. I'll make the changes.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |