|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 2/3] xen/arm: vgic: Keep track of vIRQ used by a domain
On Mon, 2015-01-19 at 16:14 +0000, Julien Grall wrote:
> >> diff --git a/xen/arch/arm/vgic.c b/xen/arch/arm/vgic.c
> >> index b272d86..1a8b3cd 100644
> >> --- a/xen/arch/arm/vgic.c
> >> +++ b/xen/arch/arm/vgic.c
> >> @@ -110,6 +110,15 @@ int domain_vgic_init(struct domain *d)
> >>
> >> d->arch.vgic.handler->domain_init(d);
> >>
> >> + d->arch.vgic.allocated_irqs =
> >> + xzalloc_array(unsigned long, BITS_TO_LONGS(vgic_num_irqs(d)));
> >> + if ( !d->arch.vgic.allocated_irqs )
> >> + return -ENOMEM;
> >> +
> >> + /* vIRQ0-15 (SGIs) are reserved */
> >> + for ( i = 0; i <= 15; i++ )
> >
> > ... ; i < NR_GIC_SGI; ...
>
> I don't really like the idea to use NR_GIC_SGI here. You are assuming
> that SGI is always start from 0.
I think that's pretty much architectural in the GIC.
> I will introduce GIC_SGI_FIRST, GIC_SGI_END and maybe the same for
> PPIs/SPIs.
If GICvN in the future doesn't have SGI_FIRST == 0 then having these
macros in place isn't going to appreciably reduce the amount of stuff
which needs doing, it'll the least of your worries I think..
> > In any case rather than goto can you use a while loop or some other
> > proper looping construct please, something like this ought to work:
> >
> > virq = first
> > while ( (virq = find_next...) < end )
> > {
> > if ( test_and_set... )
> > return virq;
> > first = virq; /* +1 ? */
> > }
> >
> > or perhaps:
> >
> > for ( virq = first ; virq = find... ; first = virq )
> > {
> > ....
> > }
> >
> > I think you might also be able combine virq and first into a single
> > variable? Unless always searching from the beginning is a feature?
>
> The goal was to avoid race condition with vgic_reserver_virq. In second
> though, we could also avoid to retry ad the raise condition would happen
> in very rare case.
If it is merely rare, rather than impossible, then the code should
handle the possibility not punt it to the caller.
Ian.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |