|
Michal Suchanek |
2690e6 |
From b277fc793daf258877b4c0744b52f69d6e6ba22e Mon Sep 17 00:00:00 2001
|
|
Michal Suchanek |
2690e6 |
From: "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>
|
|
Michal Suchanek |
2690e6 |
Date: Tue, 4 Apr 2023 09:44:33 +0530
|
|
Michal Suchanek |
2690e6 |
Subject: [PATCH] powerpc/papr_scm: Update the NUMA distance table for the
|
|
Michal Suchanek |
2690e6 |
target node
|
|
Michal Suchanek |
2690e6 |
|
|
Michal Suchanek |
2690e6 |
References: bsc#1209999 ltc#202140 bsc#1142685 ltc#179509 FATE#327775 git-fixes
|
|
Michal Suchanek |
2690e6 |
Patch-mainline: v6.3-rc7
|
|
Michal Suchanek |
2690e6 |
Git-commit: b277fc793daf258877b4c0744b52f69d6e6ba22e
|
|
Michal Suchanek |
2690e6 |
|
|
Michal Suchanek |
2690e6 |
Platform device helper routines won't update the NUMA distance table
|
|
Michal Suchanek |
2690e6 |
while creating a platform device, even if the device is present on a
|
|
Michal Suchanek |
2690e6 |
NUMA node that doesn't have memory or CPU. This is especially true for
|
|
Michal Suchanek |
2690e6 |
pmem devices. If the target node of the pmem device is not online, we
|
|
Michal Suchanek |
2690e6 |
find the nearest online node to the device and associate the pmem device
|
|
Michal Suchanek |
2690e6 |
with that online node. To find the nearest online node, we should have
|
|
Michal Suchanek |
2690e6 |
the numa distance table updated correctly. Update the distance
|
|
Michal Suchanek |
2690e6 |
information during the device probe.
|
|
Michal Suchanek |
2690e6 |
|
|
Michal Suchanek |
2690e6 |
For a papr scm device on NUMA node 3 distance_lookup_table value for
|
|
Michal Suchanek |
2690e6 |
distance_ref_points_depth = 2 before and after fix is below:
|
|
Michal Suchanek |
2690e6 |
|
|
Michal Suchanek |
2690e6 |
Before fix:
|
|
Michal Suchanek |
2690e6 |
node 3 distance depth 0 - 0
|
|
Michal Suchanek |
2690e6 |
node 3 distance depth 1 - 0
|
|
Michal Suchanek |
2690e6 |
node 4 distance depth 0 - 4
|
|
Michal Suchanek |
2690e6 |
node 4 distance depth 1 - 2
|
|
Michal Suchanek |
2690e6 |
node 5 distance depth 0 - 5
|
|
Michal Suchanek |
2690e6 |
node 5 distance depth 1 - 1
|
|
Michal Suchanek |
2690e6 |
|
|
Michal Suchanek |
2690e6 |
After fix
|
|
Michal Suchanek |
2690e6 |
node 3 distance depth 0 - 3
|
|
Michal Suchanek |
2690e6 |
node 3 distance depth 1 - 1
|
|
Michal Suchanek |
2690e6 |
node 4 distance depth 0 - 4
|
|
Michal Suchanek |
2690e6 |
node 4 distance depth 1 - 2
|
|
Michal Suchanek |
2690e6 |
node 5 distance depth 0 - 5
|
|
Michal Suchanek |
2690e6 |
node 5 distance depth 1 - 1
|
|
Michal Suchanek |
2690e6 |
|
|
Michal Suchanek |
2690e6 |
Without the fix, the nearest numa node to the pmem device (NUMA node 3)
|
|
Michal Suchanek |
2690e6 |
will be picked as 4. After the fix, we get the correct numa node which
|
|
Michal Suchanek |
2690e6 |
is 5.
|
|
Michal Suchanek |
2690e6 |
|
|
Michal Suchanek |
2690e6 |
Fixes: da1115fdbd6e ("powerpc/nvdimm: Pick nearby online node if the device node is not online")
|
|
Michal Suchanek |
2690e6 |
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
|
|
Michal Suchanek |
2690e6 |
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
|
|
Michal Suchanek |
2690e6 |
Link: https://msgid.link/20230404041433.1781804-1-aneesh.kumar@linux.ibm.com
|
|
Michal Suchanek |
2690e6 |
Acked-by: Michal Suchanek <msuchanek@suse.de>
|
|
Michal Suchanek |
2690e6 |
---
|
|
Michal Suchanek |
2690e6 |
arch/powerpc/mm/numa.c | 1 +
|
|
Michal Suchanek |
2690e6 |
arch/powerpc/platforms/pseries/papr_scm.c | 7 +++++++
|
|
Michal Suchanek |
2690e6 |
2 files changed, 8 insertions(+)
|
|
Michal Suchanek |
2690e6 |
|
|
Michal Suchanek |
2690e6 |
diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c
|
|
Michal Suchanek |
2690e6 |
--- a/arch/powerpc/mm/numa.c
|
|
Michal Suchanek |
2690e6 |
+++ b/arch/powerpc/mm/numa.c
|
|
Michal Suchanek |
2690e6 |
@@ -312,6 +312,7 @@ void update_numa_distance(struct device_
|
|
Michal Suchanek |
2690e6 |
return;
|
|
Michal Suchanek |
2690e6 |
}
|
|
Michal Suchanek |
2690e6 |
}
|
|
Michal Suchanek |
2690e6 |
+EXPORT_SYMBOL_GPL(update_numa_distance);
|
|
Michal Suchanek |
2690e6 |
|
|
Michal Suchanek |
2690e6 |
static int __init find_primary_domain_index(void)
|
|
Michal Suchanek |
2690e6 |
{
|
|
Michal Suchanek |
2690e6 |
diff --git a/arch/powerpc/platforms/pseries/papr_scm.c b/arch/powerpc/platforms/pseries/papr_scm.c
|
|
Michal Suchanek |
2690e6 |
index 2f8385523a13..1a53e048ceb7 100644
|
|
Michal Suchanek |
2690e6 |
--- a/arch/powerpc/platforms/pseries/papr_scm.c
|
|
Michal Suchanek |
2690e6 |
+++ b/arch/powerpc/platforms/pseries/papr_scm.c
|
|
Michal Suchanek |
2690e6 |
@@ -1428,6 +1428,13 @@ static int papr_scm_probe(struct platform_device *pdev)
|
|
Michal Suchanek |
2690e6 |
return -ENODEV;
|
|
Michal Suchanek |
2690e6 |
}
|
|
Michal Suchanek |
2690e6 |
|
|
Michal Suchanek |
2690e6 |
+ /*
|
|
Michal Suchanek |
2690e6 |
+ * open firmware platform device create won't update the NUMA
|
|
Michal Suchanek |
2690e6 |
+ * distance table. For PAPR SCM devices we use numa_map_to_online_node()
|
|
Michal Suchanek |
2690e6 |
+ * to find the nearest online NUMA node and that requires correct
|
|
Michal Suchanek |
2690e6 |
+ * distance table information.
|
|
Michal Suchanek |
2690e6 |
+ */
|
|
Michal Suchanek |
2690e6 |
+ update_numa_distance(dn);
|
|
Michal Suchanek |
2690e6 |
|
|
Michal Suchanek |
2690e6 |
p = kzalloc(sizeof(*p), GFP_KERNEL);
|
|
Michal Suchanek |
2690e6 |
if (!p)
|
|
Michal Suchanek |
2690e6 |
--
|
|
Michal Suchanek |
2690e6 |
2.40.0
|
|
Michal Suchanek |
2690e6 |
|