s390/cpuinfo: print cache info and all single cpu lines on first iteration
authorHeiko Carstens <heiko.carstens@de.ibm.com>
Thu, 14 Apr 2016 06:57:19 +0000 (08:57 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Mon, 13 Jun 2016 13:58:17 +0000 (15:58 +0200)
Change the code to print all the current output during the first
iteration. This is a preparation patch for the upcoming per cpu block
extension to /proc/cpuinfo.

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/kernel/processor.c

index de7451065c34228b0485d615ad8577cb9e94d660..4f7a96d719d0bb2c49a6cfdad3834d2dab2d2c1a 100644 (file)
@@ -53,10 +53,7 @@ int cpu_have_feature(unsigned int num)
 }
 EXPORT_SYMBOL(cpu_have_feature);
 
-/*
- * show_cpuinfo - Get information on one CPU for use by procfs.
- */
-static int show_cpuinfo(struct seq_file *m, void *v)
+static void show_cpu_summary(struct seq_file *m, void *v)
 {
        static const char *hwcap_str[] = {
                "esan3", "zarch", "stfle", "msa", "ldisp", "eimm", "dfp",
@@ -65,34 +62,43 @@ static int show_cpuinfo(struct seq_file *m, void *v)
        static const char * const int_hwcap_str[] = {
                "sie"
        };
-       unsigned long n = (unsigned long) v - 1;
-       int i;
-
-       if (!n) {
-               s390_adjust_jiffies();
-               seq_printf(m, "vendor_id       : IBM/S390\n"
-                          "# processors    : %i\n"
-                          "bogomips per cpu: %lu.%02lu\n",
-                          num_online_cpus(), loops_per_jiffy/(500000/HZ),
-                          (loops_per_jiffy/(5000/HZ))%100);
-               seq_puts(m, "features\t: ");
-               for (i = 0; i < ARRAY_SIZE(hwcap_str); i++)
-                       if (hwcap_str[i] && (elf_hwcap & (1UL << i)))
-                               seq_printf(m, "%s ", hwcap_str[i]);
-               for (i = 0; i < ARRAY_SIZE(int_hwcap_str); i++)
-                       if (int_hwcap_str[i] && (int_hwcap & (1UL << i)))
-                               seq_printf(m, "%s ", int_hwcap_str[i]);
-               seq_puts(m, "\n");
-               show_cacheinfo(m);
-       }
-       if (cpu_online(n)) {
-               struct cpuid *id = &per_cpu(cpu_id, n);
-               seq_printf(m, "processor %li: "
+       int i, cpu;
+
+       s390_adjust_jiffies();
+       seq_printf(m, "vendor_id       : IBM/S390\n"
+                  "# processors    : %i\n"
+                  "bogomips per cpu: %lu.%02lu\n",
+                  num_online_cpus(), loops_per_jiffy/(500000/HZ),
+                  (loops_per_jiffy/(5000/HZ))%100);
+       seq_puts(m, "features\t: ");
+       for (i = 0; i < ARRAY_SIZE(hwcap_str); i++)
+               if (hwcap_str[i] && (elf_hwcap & (1UL << i)))
+                       seq_printf(m, "%s ", hwcap_str[i]);
+       for (i = 0; i < ARRAY_SIZE(int_hwcap_str); i++)
+               if (int_hwcap_str[i] && (int_hwcap & (1UL << i)))
+                       seq_printf(m, "%s ", int_hwcap_str[i]);
+       seq_puts(m, "\n");
+       show_cacheinfo(m);
+       for_each_online_cpu(cpu) {
+               struct cpuid *id = &per_cpu(cpu_id, cpu);
+
+               seq_printf(m, "processor %d: "
                           "version = %02X,  "
                           "identification = %06X,  "
                           "machine = %04X\n",
-                          n, id->version, id->ident, id->machine);
+                          cpu, id->version, id->ident, id->machine);
        }
+}
+
+/*
+ * show_cpuinfo - Get information on one CPU for use by procfs.
+ */
+static int show_cpuinfo(struct seq_file *m, void *v)
+{
+       unsigned long n = (unsigned long) v - 1;
+
+       if (!n)
+               show_cpu_summary(m, v);
        return 0;
 }