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