Merge branch 'msm-core' of git://codeaurora.org/quic/kernel/dwalker/linux-msm
[pandora-kernel.git] / arch / s390 / kernel / processor.c
index 0729f36..ecb2d02 100644 (file)
 #include <asm/lowcore.h>
 #include <asm/param.h>
 
+static DEFINE_PER_CPU(struct cpuid, cpu_id);
+
+/*
+ * cpu_init - initializes state that is per-CPU.
+ */
+void __cpuinit cpu_init(void)
+{
+       struct cpuid *id = &per_cpu(cpu_id, smp_processor_id());
+
+       get_cpu_id(id);
+       atomic_inc(&init_mm.mm_count);
+       current->active_mm = &init_mm;
+       BUG_ON(current->mm);
+       enter_lazy_tlb(&init_mm, current);
+}
+
+/*
+ * print_cpu_info - print basic information about a cpu
+ */
 void __cpuinit print_cpu_info(void)
 {
+       struct cpuid *id = &per_cpu(cpu_id, smp_processor_id());
+
        pr_info("Processor %d started, address %d, identification %06X\n",
-               S390_lowcore.cpu_nr, S390_lowcore.cpu_addr,
-               S390_lowcore.cpu_id.ident);
+               S390_lowcore.cpu_nr, S390_lowcore.cpu_addr, id->ident);
 }
 
 /*
  * show_cpuinfo - Get information on one CPU for use by procfs.
  */
-
 static int show_cpuinfo(struct seq_file *m, void *v)
 {
        static const char *hwcap_str[10] = {
                "esan3", "zarch", "stfle", "msa", "ldisp", "eimm", "dfp",
                "edat", "etf3eh", "highgprs"
        };
-       struct _lowcore *lc;
        unsigned long n = (unsigned long) v - 1;
        int i;
 
@@ -55,19 +73,12 @@ static int show_cpuinfo(struct seq_file *m, void *v)
        }
 
        if (cpu_online(n)) {
-#ifdef CONFIG_SMP
-               lc = (smp_processor_id() == n) ?
-                       &S390_lowcore : lowcore_ptr[n];
-#else
-               lc = &S390_lowcore;
-#endif
+               struct cpuid *id = &per_cpu(cpu_id, n);
                seq_printf(m, "processor %li: "
                           "version = %02X,  "
                           "identification = %06X,  "
                           "machine = %04X\n",
-                          n, lc->cpu_id.version,
-                          lc->cpu_id.ident,
-                          lc->cpu_id.machine);
+                          n, id->version, id->ident, id->machine);
        }
        preempt_enable();
        return 0;