[PATCH v2 2/2] of, numa: Fetch empty NUMA node ID from distance map

Rob Herring robh at kernel.org
Tue Sep 28 10:22:08 PDT 2021


On Mon, Sep 27, 2021 at 6:59 PM Gavin Shan <gshan at redhat.com> wrote:
>
> Hi Rob,
>
> On 9/28/21 12:49 AM, Rob Herring wrote:
> > On Mon, Sep 27, 2021 at 1:42 AM Gavin Shan <gshan at redhat.com> wrote:
> >>
> >> There is no device node for the empty NUMA node. However, the
> >> corresponding NUMA node ID and distance map is still valid in
> >> "numa-distance-map-v1" compatible device node.
> >>
> >> This fetches the NUMA node ID and distance map for these empty
> >> NUMA node from "numa-distance-map-v1" compatible device node.
> >
> > This is much nicer.
> >
>
> Indeed, thanks for your suggestions :)
>
> >> Signed-off-by: Gavin Shan <gshan at redhat.com>
> >> ---
> >>   drivers/of/of_numa.c | 2 ++
> >>   1 file changed, 2 insertions(+)
> >>
> >> diff --git a/drivers/of/of_numa.c b/drivers/of/of_numa.c
> >> index fe6b13608e51..5949829a1b00 100644
> >> --- a/drivers/of/of_numa.c
> >> +++ b/drivers/of/of_numa.c
> >> @@ -111,6 +111,8 @@ static int __init of_numa_parse_distance_map_v1(struct device_node *map)
> >>                          return -EINVAL;
> >>                  }
> >>
> >> +               node_set(nodea, numa_nodes_parsed);
> >> +
> >
> > With this, couldn't we remove of_numa_parse_cpu_nodes() as the only
> > thing it does is node_set()?
> >
>
> I don't think so for couple of reasons:
>
> (1) With problematic device-tree, the distance map node might be missed
>      or incomplete. In this case, of_numa_parse_cpu_nodes() still helps.

It's not the kernel's job to validate the DT (if it was, it is doing a
terrible job). I would suggest writing some checks for dtc if we're
worried about correctness. (The schemas don't work too well for cross
node checks.)

> (2) @numa_nodes_parsed is also updated when the memory nodes are iterated
>      in of_numa_parse_memory_nodes() and numa_add_memblk().
>
> So @numa_nodes_parsed, which is synchronized to @node_possible_map afterwards,
> is the gathering output of CPU nodes, memory nodes and distance map node.

Is it valid to have node id's that are not in the distance map?

Rob



More information about the linux-arm-kernel mailing list