[PATCH] ppc64: Add NUMA cpu summary at boot
authorAnton Blanchard <anton@samba.org>
Mon, 12 Dec 2005 19:56:47 +0000 (06:56 +1100)
committerPaul Mackerras <paulus@samba.org>
Mon, 9 Jan 2006 03:53:37 +0000 (14:53 +1100)
We used to print a NUMA cpu summary at boot before the hotplug cpu code
was added. This has been useful for catching machine configuration as
well as firmware bugs in the past.

This patch restores that functionality. An example of the output is:

Node 0 CPUs: 0-7
Node 1 CPUs: 8-15

Signed-off-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
arch/powerpc/kernel/smp.c
arch/powerpc/mm/numa.c
include/asm-powerpc/topology.h

index 8e3ca674d359c39d3f82090e6506b676d39cf16b..d381ec90b759e27fe5242d9f7c3e66bb4b7ca939 100644 (file)
@@ -31,6 +31,7 @@
 #include <linux/sysdev.h>
 #include <linux/cpu.h>
 #include <linux/notifier.h>
+#include <linux/topology.h>
 
 #include <asm/ptrace.h>
 #include <asm/atomic.h>
@@ -568,6 +569,8 @@ void __init smp_cpus_done(unsigned int max_cpus)
        smp_ops->setup_cpu(boot_cpuid);
 
        set_cpus_allowed(current, old_mask);
+
+       dump_numa_cpu_topology();
 }
 
 #ifdef CONFIG_HOTPLUG_CPU
index 97e83f1d1bdb3f872e3f4d99c9b5abcf1e989ccc..fc519cd90f7783545575a3437cf40701e2503808 100644 (file)
@@ -489,7 +489,41 @@ static void __init setup_nonnuma(void)
        node_set_online(0);
 }
 
-static void __init dump_numa_topology(void)
+void __init dump_numa_cpu_topology(void)
+{
+       unsigned int node;
+       unsigned int cpu, count;
+
+       if (min_common_depth == -1 || !numa_enabled)
+               return;
+
+       for_each_online_node(node) {
+               printk(KERN_INFO "Node %d CPUs:", node);
+
+               count = 0;
+               /*
+                * If we used a CPU iterator here we would miss printing
+                * the holes in the cpumap.
+                */
+               for (cpu = 0; cpu < NR_CPUS; cpu++) {
+                       if (cpu_isset(cpu, numa_cpumask_lookup_table[node])) {
+                               if (count == 0)
+                                       printk(" %u", cpu);
+                               ++count;
+                       } else {
+                               if (count > 1)
+                                       printk("-%u", cpu - 1);
+                               count = 0;
+                       }
+               }
+
+               if (count > 1)
+                       printk("-%u", NR_CPUS - 1);
+               printk("\n");
+       }
+}
+
+static void __init dump_numa_memory_topology(void)
 {
        unsigned int node;
        unsigned int count;
@@ -521,7 +555,6 @@ static void __init dump_numa_topology(void)
                        printk("-0x%lx", i);
                printk("\n");
        }
-       return;
 }
 
 /*
@@ -583,7 +616,7 @@ void __init do_init_bootmem(void)
        if (parse_numa_properties())
                setup_nonnuma();
        else
-               dump_numa_topology();
+               dump_numa_memory_topology();
 
        register_cpu_notifier(&ppc64_numa_nb);
 
index db8095cbe09bb0d59ba8432974ecfbef426ad9c9..f8a130af7d0915695d8f268ceef091e1685c01d8 100644 (file)
@@ -55,8 +55,12 @@ static inline int node_to_first_cpu(int node)
        .nr_balance_failed      = 0,                    \
 }
 
+extern void __init dump_numa_cpu_topology(void);
+
 #else
 
+static inline void dump_numa_cpu_topology(void) {}
+
 #include <asm-generic/topology.h>
 
 #endif /* CONFIG_NUMA */