On Fri, 17 Sep 2021 18:28:02 -0300 Daniel Henrique Barboza <danielhb...@gmail.com> wrote:
> numa_complete_configuration() in hw/core/numa.c always adds a NUMA node > for the pSeries machine if none was specified, but without node distance > information for the single node created. > > NUMA FORM1 affinity code didn't rely on numa_state information to do its > job, but FORM2 does. As is now, this is the result of a pSeries guest > with NUMA FORM2 affinity when no NUMA nodes is specified: > > $ numactl -H > available: 1 nodes (0) > node 0 cpus: 0 > node 0 size: 16222 MB > node 0 free: 15681 MB > No distance information available. > > This can be amended in spapr_numa_FORM2_write_rtas_tables(). We're > enforcing that the local distance (the distance to the node to itself) is > always 10. This allows for the proper creation of the NUMA distance tables, > fixing the output of 'numactl -H' in the guest: > > $ numactl -H > available: 1 nodes (0) > node 0 cpus: 0 > node 0 size: 16222 MB > node 0 free: 15685 MB > node distances: > node 0 > 0: 10 > > CC: Igor Mammedov <imamm...@redhat.com> > Signed-off-by: Daniel Henrique Barboza <danielhb...@gmail.com> Acked-by: Igor Mammedov <imamm...@redhat.com> > --- > hw/ppc/spapr_numa.c | 11 +++++++++++ > 1 file changed, 11 insertions(+) > > diff --git a/hw/ppc/spapr_numa.c b/hw/ppc/spapr_numa.c > index 659513b405..0cead2e7f5 100644 > --- a/hw/ppc/spapr_numa.c > +++ b/hw/ppc/spapr_numa.c > @@ -539,6 +539,17 @@ static void > spapr_numa_FORM2_write_rtas_tables(SpaprMachineState *spapr, > > for (src = 0; src < nb_numa_nodes; src++) { > for (dst = 0; dst < nb_numa_nodes; dst++) { > + /* > + * We need to be explicit with the local distance > + * value to cover the case where the user didn't added any > + * NUMA nodes, but QEMU adds the default NUMA node without > + * adding the numa_info to retrieve distance info from. > + */ > + if (src == dst) { > + node_distances[i++] = 10; > + continue; > + } > + > node_distances[i++] = numa_info[src].distance[dst]; > } > }