diff --git a/patches.kernel.org/6.2.12-129-powerpc-papr_scm-Update-the-NUMA-distance-tabl.patch b/patches.kernel.org/6.2.12-129-powerpc-papr_scm-Update-the-NUMA-distance-tabl.patch new file mode 100644 index 0000000..9632378 --- /dev/null +++ b/patches.kernel.org/6.2.12-129-powerpc-papr_scm-Update-the-NUMA-distance-tabl.patch @@ -0,0 +1,86 @@ +From: "Aneesh Kumar K.V" +Date: Tue, 4 Apr 2023 09:44:33 +0530 +Subject: [PATCH] powerpc/papr_scm: Update the NUMA distance table for the + target node +References: bsc#1012628 +Patch-mainline: 6.2.12 +Git-commit: b277fc793daf258877b4c0744b52f69d6e6ba22e + +[ Upstream commit b277fc793daf258877b4c0744b52f69d6e6ba22e ] + +Platform device helper routines won't update the NUMA distance table +while creating a platform device, even if the device is present on a +NUMA node that doesn't have memory or CPU. This is especially true for +pmem devices. If the target node of the pmem device is not online, we +find the nearest online node to the device and associate the pmem device +with that online node. To find the nearest online node, we should have +the numa distance table updated correctly. Update the distance +information during the device probe. + +For a papr scm device on NUMA node 3 distance_lookup_table value for +distance_ref_points_depth = 2 before and after fix is below: + +Before fix: + node 3 distance depth 0 - 0 + node 3 distance depth 1 - 0 + node 4 distance depth 0 - 4 + node 4 distance depth 1 - 2 + node 5 distance depth 0 - 5 + node 5 distance depth 1 - 1 + +After fix + node 3 distance depth 0 - 3 + node 3 distance depth 1 - 1 + node 4 distance depth 0 - 4 + node 4 distance depth 1 - 2 + node 5 distance depth 0 - 5 + node 5 distance depth 1 - 1 + +Without the fix, the nearest numa node to the pmem device (NUMA node 3) +will be picked as 4. After the fix, we get the correct numa node which +is 5. + +Fixes: da1115fdbd6e ("powerpc/nvdimm: Pick nearby online node if the device node is not online") +Signed-off-by: Aneesh Kumar K.V +Signed-off-by: Michael Ellerman +Link: https://msgid.link/20230404041433.1781804-1-aneesh.kumar@linux.ibm.com +Signed-off-by: Sasha Levin +Signed-off-by: Jiri Slaby +--- + arch/powerpc/mm/numa.c | 1 + + arch/powerpc/platforms/pseries/papr_scm.c | 7 +++++++ + 2 files changed, 8 insertions(+) + +diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c +index b44ce719..16cfe56b 100644 +--- a/arch/powerpc/mm/numa.c ++++ b/arch/powerpc/mm/numa.c +@@ -366,6 +366,7 @@ void update_numa_distance(struct device_node *node) + WARN(numa_distance_table[nid][nid] == -1, + "NUMA distance details for node %d not provided\n", nid); + } ++EXPORT_SYMBOL_GPL(update_numa_distance); + + /* + * ibm,numa-lookup-index-table= {N, domainid1, domainid2, ..... domainidN} +diff --git a/arch/powerpc/platforms/pseries/papr_scm.c b/arch/powerpc/platforms/pseries/papr_scm.c +index 2f838552..1a53e048 100644 +--- a/arch/powerpc/platforms/pseries/papr_scm.c ++++ b/arch/powerpc/platforms/pseries/papr_scm.c +@@ -1428,6 +1428,13 @@ static int papr_scm_probe(struct platform_device *pdev) + return -ENODEV; + } + ++ /* ++ * open firmware platform device create won't update the NUMA ++ * distance table. For PAPR SCM devices we use numa_map_to_online_node() ++ * to find the nearest online NUMA node and that requires correct ++ * distance table information. ++ */ ++ update_numa_distance(dn); + + p = kzalloc(sizeof(*p), GFP_KERNEL); + if (!p) +-- +2.35.3 + diff --git a/series.conf b/series.conf index 92b80b1..060217a 100644 --- a/series.conf +++ b/series.conf @@ -2356,6 +2356,7 @@ patches.kernel.org/6.2.12-126-ubi-Fix-failure-attaching-when-vid_hdr-offset-.patch patches.kernel.org/6.2.12-127-ubi-Fix-deadlock-caused-by-recursively-holding.patch patches.kernel.org/6.2.12-128-i2c-mchp-pci1xxxx-Update-Timing-registers.patch + patches.kernel.org/6.2.12-129-powerpc-papr_scm-Update-the-NUMA-distance-tabl.patch ######################################################## # Build fixes that apply to the vanilla kernel too.