Re: [PATCH kvm-unit-tests v2] arm/arm64: gicv3: support up to 8 redistributor regions regions

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

 



On Tue, Sep 04, 2018 at 04:30:12PM +0200, Andrew Jones wrote:
> On Tue, Sep 04, 2018 at 03:29:26PM +0200, Christoffer Dall wrote:
> > On Tue, Sep 04, 2018 at 10:13:36AM +0200, Andrew Jones wrote:
> > > We need to support at least two redistributor regions in order to
> > > support more than 123 vcpus (we select 8 because that should be
> > > plenty). Also bump NR_CPUS to 512, since that's what KVM currently
> > > supports.
> > > 
> > > Signed-off-by: Andrew Jones <drjones@xxxxxxxxxx>
> > > ---
> > > v2:
> > >  - Peter asked if it would be neater to be more general. At first
> > >    I interpreted that as better, i.e. more general, but immediately
> > >    after starting the approach I saw how much _neater_ the code is.
> > >    So this version is indeed neater code and better (more general).
> > >    Thanks Peter!
> > > 
> > > 
> > >  lib/arm/asm/gic-v3.h |  3 +++
> > >  lib/arm/asm/setup.h  |  2 +-
> > >  lib/arm/gic-v3.c     | 23 +++++++++++++----------
> > >  lib/arm/gic.c        | 14 +++++++++-----
> > >  4 files changed, 26 insertions(+), 16 deletions(-)
> > > 
> > > diff --git a/lib/arm/asm/gic-v3.h b/lib/arm/asm/gic-v3.h
> > > index 1dceb9541f62..347be2f9da17 100644
> > > --- a/lib/arm/asm/gic-v3.h
> > > +++ b/lib/arm/asm/gic-v3.h
> > > @@ -49,8 +49,11 @@
> > >  #include <asm/smp.h>
> > >  #include <asm/io.h>
> > >  
> > > +#define GICV3_NR_REDISTS 8
> > > +
> > >  struct gicv3_data {
> > >  	void *dist_base;
> > > +	void *redist_bases[GICV3_NR_REDISTS];
> > >  	void *redist_base[NR_CPUS];
> > >  	unsigned int irq_nr;
> > >  };
> > > diff --git a/lib/arm/asm/setup.h b/lib/arm/asm/setup.h
> > > index b57ea13b9dd2..3215814603e4 100644
> > > --- a/lib/arm/asm/setup.h
> > > +++ b/lib/arm/asm/setup.h
> > > @@ -9,7 +9,7 @@
> > >  #include <asm/page.h>
> > >  #include <asm/pgtable-hwdef.h>
> > >  
> > > -#define NR_CPUS			255
> > > +#define NR_CPUS			512
> > >  extern u64 cpus[NR_CPUS];	/* per-cpu IDs (MPIDRs) */
> > >  extern int nr_cpus;
> > >  
> > > diff --git a/lib/arm/gic-v3.c b/lib/arm/gic-v3.c
> > > index 9b3fa5730478..7f41e0a1da01 100644
> > > --- a/lib/arm/gic-v3.c
> > > +++ b/lib/arm/gic-v3.c
> > > @@ -9,17 +9,20 @@
> > >  void gicv3_set_redist_base(size_t stride)
> > >  {
> > >  	u32 aff = mpidr_compress(get_mpidr());
> > > -	void *ptr = gicv3_data.redist_base[0];
> > >  	u64 typer;
> > > -
> > > -	do {
> > > -		typer = gicv3_read_typer(ptr + GICR_TYPER);
> > > -		if ((typer >> 32) == aff) {
> > > -			gicv3_redist_base() = ptr;
> > > -			return;
> > > -		}
> > > -		ptr += stride; /* skip RD_base, SGI_base, etc. */
> > > -	} while (!(typer & GICR_TYPER_LAST));
> > > +	int i = 0;
> > > +
> > > +	while (gicv3_data.redist_bases[i]) {
> > 
> > I don't get this.  We never change I?
> > 
> > (conincidentally, my test of gicv3-ipi never completes, I wonder if
> > these concepts are related...)
> 
> Darn it. I dropped the '++i' I had in v1. My regression testing naturally
> only needs i=0 (I don't have anything with > 123 cpus to test on), so the
> problem didn't show up for me.
> 
> Maybe you can add a ++i in and see if it works for you before I send v3?
> If it's still busted I'll have to stop shotgunning code, and maybe even
> find a way to test it myself.
> 

Indeed, works perfectly.  With an added i++:

Tested-by: Christoffer Dall <christoffer.dall@xxxxxxx>


Thanks,

    Christoffer
_______________________________________________
kvmarm mailing list
kvmarm@xxxxxxxxxxxxxxxxxxxxx
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm



[Index of Archives]     [Linux KVM]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux