[PATCH v2 4/4] powerpc/numa: Set fallback nodes for offline nodes
Srikar Dronamraju
srikar at linux.vnet.ibm.com
Wed Mar 18 18:28:10 AEDT 2020
Currently fallback nodes for offline nodes aren't set. Hence by default
node 0 ends up being the default node. However node 0 might be offline.
Fix this by explicitly setting fallback node. Ensure first_memory_node
is set before kernel does explicit setting of fallback node.
Cc: Andrew Morton <akpm at linux-foundation.org>
Cc: linux-mm at kvack.org
Cc: Mel Gorman <mgorman at suse.de>
Cc: Michael Ellerman <mpe at ellerman.id.au>
Cc: Sachin Sant <sachinp at linux.vnet.ibm.com>
Cc: Michal Hocko <mhocko at kernel.org>
Cc: Christopher Lameter <cl at linux.com>
Cc: linuxppc-dev at lists.ozlabs.org
Cc: Joonsoo Kim <iamjoonsoo.kim at lge.com>
Cc: Kirill Tkhai <ktkhai at virtuozzo.com>
Cc: Vlastimil Babka <vbabka at suse.cz>
Cc: Srikar Dronamraju <srikar at linux.vnet.ibm.com>
Cc: Bharata B Rao <bharata at linux.ibm.com>
Cc: Nathan Lynch <nathanl at linux.ibm.com>
Reported-by: Sachin Sant <sachinp at linux.vnet.ibm.com>
Tested-by: Sachin Sant <sachinp at linux.vnet.ibm.com>
Signed-off-by: Srikar Dronamraju <srikar at linux.vnet.ibm.com>
---
Changelog v1 -> v2:
- Handled comments from Bharata B Rao
- Dont use dump_numa_cpu_topology to set fallback nodes
arch/powerpc/include/asm/topology.h | 16 ++++++++++++++++
arch/powerpc/kernel/smp.c | 1 +
2 files changed, 17 insertions(+)
diff --git a/arch/powerpc/include/asm/topology.h b/arch/powerpc/include/asm/topology.h
index 2db7ba789720..baa89364197c 100644
--- a/arch/powerpc/include/asm/topology.h
+++ b/arch/powerpc/include/asm/topology.h
@@ -62,6 +62,21 @@ static inline int early_cpu_to_node(int cpu)
*/
return (nid < 0) ? 0 : nid;
}
+
+static inline int update_default_numa_mem(void)
+{
+ unsigned int node;
+
+ for_each_node(node) {
+ /*
+ * For all possible but not yet online nodes, ensure their
+ * node_numa_mem is set correctly so that kmalloc_node works
+ * for such nodes.
+ */
+ if (!node_online(node))
+ reset_numa_mem(node);
+ }
+}
#else
static inline int early_cpu_to_node(int cpu) { return 0; }
@@ -90,6 +105,7 @@ static inline int cpu_distance(__be32 *cpu1_assoc, __be32 *cpu2_assoc)
return 0;
}
+static inline int update_default_numa_mem(void) {}
#endif /* CONFIG_NUMA */
#if defined(CONFIG_NUMA) && defined(CONFIG_PPC_SPLPAR)
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c
index 37c12e3bab9e..d23faa70ea2d 100644
--- a/arch/powerpc/kernel/smp.c
+++ b/arch/powerpc/kernel/smp.c
@@ -1383,6 +1383,7 @@ void __init smp_cpus_done(unsigned int max_cpus)
if (smp_ops && smp_ops->bringup_done)
smp_ops->bringup_done();
+ update_default_numa_mem();
dump_numa_cpu_topology();
#ifdef CONFIG_SCHED_SMT
--
2.18.1
More information about the Linuxppc-dev
mailing list