[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-ppc] [PATCH for 2.13 v2 1/2] spapr: Add ibm, max-associativity
From: |
Greg Kurz |
Subject: |
Re: [Qemu-ppc] [PATCH for 2.13 v2 1/2] spapr: Add ibm, max-associativity-domains property |
Date: |
Wed, 11 Apr 2018 11:02:27 +0200 |
On Wed, 11 Apr 2018 10:03:48 +1000
David Gibson <address@hidden> wrote:
> On Tue, Apr 10, 2018 at 02:12:25PM -0400, Serhii Popovych wrote:
> > Now recent kernels (i.e. since linux-stable commit a346137e9142
> > ("powerpc/numa: Use ibm,max-associativity-domains to discover possible
> > nodes")
> > support this property to mark initially memory-less NUMA nodes as "possible"
> > to allow further memory hot-add to them.
> >
> > Advertise this property for pSeries machines to let guest kernels detect
> > maximum supported node configuration and benefit from kernel side change
> > when hot-add memory to specific, possibly empty before, NUMA node.
> >
> > Signed-off-by: Serhii Popovych <address@hidden>
> > ---
> > hw/ppc/spapr.c | 11 +++++++++++
> > 1 file changed, 11 insertions(+)
> >
> > diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> > index 2c0be8c..3f61785 100644
> > --- a/hw/ppc/spapr.c
> > +++ b/hw/ppc/spapr.c
> > @@ -909,6 +909,14 @@ static void spapr_dt_rtas(sPAPRMachineState *spapr,
> > void *fdt)
> > 0, cpu_to_be32(SPAPR_MEMORY_BLOCK_SIZE),
> > cpu_to_be32(max_cpus / smp_threads),
> > };
> > + uint32_t maxdomains[] = {
> > + cpu_to_be32(5),
> > + cpu_to_be32(0),
> > + cpu_to_be32(0),
> > + cpu_to_be32(0),
> > + cpu_to_be32(nb_numa_nodes - 1),
> > + cpu_to_be32(0),
> > + };
>
> Ah.. close, but not quite right. This is saying that there's exactly
> one node at the bottom (cpu) level, which isn't what we want. Instead
> of setting it to 0, we want to completely drop that layer, keeping it
> unspecified.
>
> To do that you need to change the first cell from 5 to 4 (since only 4
> levels will be listed) and drop the last cell entirely.
>
Alternatively, if we don't want to do any assumptions on the guest
expectations, it is possible to pass the right value in the 6th cell:
cpu_to_be32(spapr_vcpu_id(spapr, max_cpus - 1))
> > _FDT(rtas = fdt_add_subnode(fdt, 0, "rtas"));
> >
> > @@ -945,6 +953,9 @@ static void spapr_dt_rtas(sPAPRMachineState *spapr,
> > void *fdt)
> > _FDT(fdt_setprop(fdt, rtas, "ibm,associativity-reference-points",
> > refpoints, sizeof(refpoints)));
> >
> > + _FDT(fdt_setprop(fdt, rtas, "ibm,max-associativity-domains",
> > + maxdomains, sizeof(maxdomains)));
> > +
> > _FDT(fdt_setprop_cell(fdt, rtas, "rtas-error-log-max",
> > RTAS_ERROR_LOG_MAX));
> > _FDT(fdt_setprop_cell(fdt, rtas, "rtas-event-scan-rate",
>