Message ID | 1480974406-29345-6-git-send-email-eric.auger@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Mon, Dec 05, 2016 at 10:46:36PM +0100, Eric Auger wrote: > Add a new cpu_count field in gicv3_data indicating the > number of redistributors. This will be useful for enumeration > of their resources such as LPI pending tables. I'm fine with the additional state, but just curious, will it ever be possible for gicv3.cpu_count != nr_cpus? > > Signed-off-by: Eric Auger <eric.auger@redhat.com> > --- > lib/arm/asm/gic-v3.h | 1 + > lib/arm/gic-v3.c | 2 ++ > 2 files changed, 3 insertions(+) > > diff --git a/lib/arm/asm/gic-v3.h b/lib/arm/asm/gic-v3.h > index ed330af..039b7c2 100644 > --- a/lib/arm/asm/gic-v3.h > +++ b/lib/arm/asm/gic-v3.h > @@ -58,6 +58,7 @@ struct gicv3_data { > void *dist_base; > void *redist_base[NR_CPUS]; > unsigned int irq_nr; > + unsigned int cpu_count; > }; > extern struct gicv3_data gicv3_data; > > diff --git a/lib/arm/gic-v3.c b/lib/arm/gic-v3.c > index 6246221..9921f4d 100644 > --- a/lib/arm/gic-v3.c > +++ b/lib/arm/gic-v3.c > @@ -12,12 +12,14 @@ void gicv3_set_redist_base(size_t stride) > void *ptr = gicv3_data.redist_base[0]; > u64 typer; > > + gicv3_data.cpu_count = 0; > do { > typer = gicv3_read_typer(ptr + GICR_TYPER); > if ((typer >> 32) == aff) { > gicv3_redist_base() = ptr; > return; > } > + gicv3_data.cpu_count++; > ptr += stride; /* skip RD_base, SGI_base, etc. */ > } while (!(typer & GICR_TYPER_LAST)); > > -- > 2.5.5 > >
Hi, On 06/12/16 09:29, Andrew Jones wrote: > On Mon, Dec 05, 2016 at 10:46:36PM +0100, Eric Auger wrote: >> Add a new cpu_count field in gicv3_data indicating the >> number of redistributors. This will be useful for enumeration >> of their resources such as LPI pending tables. > > I'm fine with the additional state, but just curious, will it > ever be possible for gicv3.cpu_count != nr_cpus? If not you are in trouble, so that should in fact be one test. Which brings me to my comment ... >> >> Signed-off-by: Eric Auger <eric.auger@redhat.com> >> --- >> lib/arm/asm/gic-v3.h | 1 + >> lib/arm/gic-v3.c | 2 ++ >> 2 files changed, 3 insertions(+) >> >> diff --git a/lib/arm/asm/gic-v3.h b/lib/arm/asm/gic-v3.h >> index ed330af..039b7c2 100644 >> --- a/lib/arm/asm/gic-v3.h >> +++ b/lib/arm/asm/gic-v3.h >> @@ -58,6 +58,7 @@ struct gicv3_data { >> void *dist_base; >> void *redist_base[NR_CPUS]; >> unsigned int irq_nr; >> + unsigned int cpu_count; Should that be called "nr_redists" or the like? Since this is what it counts in the code below. Later we can then compare this with nr_cpus to check for a match. Cheers, Andre. >> }; >> extern struct gicv3_data gicv3_data; >> >> diff --git a/lib/arm/gic-v3.c b/lib/arm/gic-v3.c >> index 6246221..9921f4d 100644 >> --- a/lib/arm/gic-v3.c >> +++ b/lib/arm/gic-v3.c >> @@ -12,12 +12,14 @@ void gicv3_set_redist_base(size_t stride) >> void *ptr = gicv3_data.redist_base[0]; >> u64 typer; >> >> + gicv3_data.cpu_count = 0; >> do { >> typer = gicv3_read_typer(ptr + GICR_TYPER); >> if ((typer >> 32) == aff) { >> gicv3_redist_base() = ptr; >> return; >> } >> + gicv3_data.cpu_count++; >> ptr += stride; /* skip RD_base, SGI_base, etc. */ >> } while (!(typer & GICR_TYPER_LAST)); >> >> -- >> 2.5.5 >> >>
Hi Andre, Drew, On 06/12/2016 10:32, Andre Przywara wrote: > Hi, > > On 06/12/16 09:29, Andrew Jones wrote: >> On Mon, Dec 05, 2016 at 10:46:36PM +0100, Eric Auger wrote: >>> Add a new cpu_count field in gicv3_data indicating the >>> number of redistributors. This will be useful for enumeration >>> of their resources such as LPI pending tables. >> >> I'm fine with the additional state, but just curious, will it >> ever be possible for gicv3.cpu_count != nr_cpus? > > If not you are in trouble, so that should in fact be one test. > > Which brings me to my comment ... > >>> >>> Signed-off-by: Eric Auger <eric.auger@redhat.com> >>> --- >>> lib/arm/asm/gic-v3.h | 1 + >>> lib/arm/gic-v3.c | 2 ++ >>> 2 files changed, 3 insertions(+) >>> >>> diff --git a/lib/arm/asm/gic-v3.h b/lib/arm/asm/gic-v3.h >>> index ed330af..039b7c2 100644 >>> --- a/lib/arm/asm/gic-v3.h >>> +++ b/lib/arm/asm/gic-v3.h >>> @@ -58,6 +58,7 @@ struct gicv3_data { >>> void *dist_base; >>> void *redist_base[NR_CPUS]; >>> unsigned int irq_nr; >>> + unsigned int cpu_count; > > Should that be called "nr_redists" or the like? > Since this is what it counts in the code below. > Later we can then compare this with nr_cpus to check for a match. I fully agree with you suggestion. Thanks Eric > > Cheers, > Andre. > >>> }; >>> extern struct gicv3_data gicv3_data; >>> >>> diff --git a/lib/arm/gic-v3.c b/lib/arm/gic-v3.c >>> index 6246221..9921f4d 100644 >>> --- a/lib/arm/gic-v3.c >>> +++ b/lib/arm/gic-v3.c >>> @@ -12,12 +12,14 @@ void gicv3_set_redist_base(size_t stride) >>> void *ptr = gicv3_data.redist_base[0]; >>> u64 typer; >>> >>> + gicv3_data.cpu_count = 0; >>> do { >>> typer = gicv3_read_typer(ptr + GICR_TYPER); >>> if ((typer >> 32) == aff) { >>> gicv3_redist_base() = ptr; >>> return; >>> } >>> + gicv3_data.cpu_count++; >>> ptr += stride; /* skip RD_base, SGI_base, etc. */ >>> } while (!(typer & GICR_TYPER_LAST)); >>> >>> -- >>> 2.5.5 >>> >>> > -- > To unsubscribe from this list: send the line "unsubscribe kvm" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html >
diff --git a/lib/arm/asm/gic-v3.h b/lib/arm/asm/gic-v3.h index ed330af..039b7c2 100644 --- a/lib/arm/asm/gic-v3.h +++ b/lib/arm/asm/gic-v3.h @@ -58,6 +58,7 @@ struct gicv3_data { void *dist_base; void *redist_base[NR_CPUS]; unsigned int irq_nr; + unsigned int cpu_count; }; extern struct gicv3_data gicv3_data; diff --git a/lib/arm/gic-v3.c b/lib/arm/gic-v3.c index 6246221..9921f4d 100644 --- a/lib/arm/gic-v3.c +++ b/lib/arm/gic-v3.c @@ -12,12 +12,14 @@ void gicv3_set_redist_base(size_t stride) void *ptr = gicv3_data.redist_base[0]; u64 typer; + gicv3_data.cpu_count = 0; do { typer = gicv3_read_typer(ptr + GICR_TYPER); if ((typer >> 32) == aff) { gicv3_redist_base() = ptr; return; } + gicv3_data.cpu_count++; ptr += stride; /* skip RD_base, SGI_base, etc. */ } while (!(typer & GICR_TYPER_LAST));
Add a new cpu_count field in gicv3_data indicating the number of redistributors. This will be useful for enumeration of their resources such as LPI pending tables. Signed-off-by: Eric Auger <eric.auger@redhat.com> --- lib/arm/asm/gic-v3.h | 1 + lib/arm/gic-v3.c | 2 ++ 2 files changed, 3 insertions(+)