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 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.

Thanks,
drew
_______________________________________________
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