s390/numa: only set possible nodes within node_possible_map
authorHeiko Carstens <heiko.carstens@de.ibm.com>
Thu, 28 Jul 2016 16:14:29 +0000 (18:14 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Sun, 31 Jul 2016 09:28:00 +0000 (05:28 -0400)
Make sure that only those nodes appear in the node_possible_map that
may actually be used. Usually that means that the node online and
possible maps are identical. For mode "plain" we only have one node,
for mode "emu" we have "emu_nodes" nodes.

Before this the possible map included (with default config) 16 nodes
while usually only one was used. That made a couple of loops that
iterated over all possible nodes do more work than necessary.

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Acked-by: Michael Holzheu <holzheu@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/numa/mode_emu.c
arch/s390/numa/numa.c

index fbc394e16b2cc60f7e8a733d4788566357d55cae..37e0bb835516f349758dc9f2e4e8e5aeab49b627 100644 (file)
@@ -482,8 +482,12 @@ static int emu_setup_nodes_adjust(int nodes)
  */
 static void emu_setup(void)
 {
+       int nid;
+
        emu_size = emu_setup_size_adjust(emu_size);
        emu_nodes = emu_setup_nodes_adjust(emu_nodes);
+       for (nid = 0; nid < emu_nodes; nid++)
+               node_set(nid, node_possible_map);
        pr_info("Creating %d nodes with memory stripe size %ld MB\n",
                emu_nodes, emu_size >> 20);
 }
index 2794845061c66fe3605c0b2e97b591b6cf176d32..f576f1073378f2ac6d5c0f0913e3974d3c768621 100644 (file)
@@ -26,8 +26,14 @@ EXPORT_SYMBOL(node_data);
 cpumask_t node_to_cpumask_map[MAX_NUMNODES];
 EXPORT_SYMBOL(node_to_cpumask_map);
 
+static void plain_setup(void)
+{
+       node_set(0, node_possible_map);
+}
+
 const struct numa_mode numa_mode_plain = {
        .name = "plain",
+       .setup = plain_setup,
 };
 
 static const struct numa_mode *mode = &numa_mode_plain;
@@ -126,13 +132,13 @@ static void __init numa_setup_memory(void)
 void __init numa_setup(void)
 {
        pr_info("NUMA mode: %s\n", mode->name);
+       nodes_clear(node_possible_map);
        if (mode->setup)
                mode->setup();
        numa_setup_memory();
        memblock_dump_all();
 }
 
-
 /*
  * numa_init_early() - Initialization initcall
  *