[S390] eliminate cpuinfo_S390 structure
authorMartin Schwidefsky <schwidefsky@de.ibm.com>
Thu, 26 Mar 2009 14:24:42 +0000 (15:24 +0100)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Thu, 26 Mar 2009 14:24:26 +0000 (15:24 +0100)
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/include/asm/lowcore.h
arch/s390/include/asm/processor.h
arch/s390/include/asm/smp.h
arch/s390/kernel/processor.c
arch/s390/kernel/setup.c
arch/s390/kernel/smp.c
drivers/s390/cio/css.c

index f94386e..ad543c1 100644 (file)
@@ -80,7 +80,6 @@
 #define __LC_USER_ASCE                 0xC50
 #define __LC_PANIC_STACK                0xC54
 #define __LC_CPUID                      0xC60
-#define __LC_CPUADDR                    0xC68
 #define __LC_IPLDEV                     0xC7C
 #define __LC_CURRENT                   0xC90
 #define __LC_INT_CLOCK                 0xC98
 #define __LC_USER_ASCE                 0xD60
 #define __LC_PANIC_STACK                0xD68
 #define __LC_CPUID                     0xD80
-#define __LC_CPUADDR                   0xD88
 #define __LC_IPLDEV                     0xDB8
 #define __LC_CURRENT                   0xDD8
 #define __LC_INT_CLOCK                 0xDE8
@@ -273,8 +271,10 @@ struct _lowcore
        __u32        user_exec_asce;           /* 0xc58 */
        __u8         pad10[0xc60-0xc5c];       /* 0xc5c */
        /* entry.S sensitive area start */
-       struct       cpuinfo_S390 cpu_data;    /* 0xc60 */
-       __u32        ipl_device;               /* 0xc7c */
+       cpuid_t      cpu_id;                   /* 0xc60 */
+       __u32        cpu_nr;                   /* 0xc68 */
+       __u32        ipl_device;               /* 0xc6c */
+       __u8         pad_0xc70[0xc80-0xc70];   /* 0xc70 */
        /* entry.S sensitive area end */
 
         /* SMP info area: defined by DJB */
@@ -366,9 +366,10 @@ struct _lowcore
        __u64        user_exec_asce;           /* 0xd70 */
        __u8         pad10[0xd80-0xd78];       /* 0xd78 */
        /* entry.S sensitive area start */
-       struct       cpuinfo_S390 cpu_data;    /* 0xd80 */
-       __u32        ipl_device;               /* 0xdb8 */
-       __u32        pad11;                    /* 0xdbc */
+       cpuid_t      cpu_id;                   /* 0xd80 */
+       __u32        cpu_nr;                   /* 0xd88 */
+       __u32        ipl_device;               /* 0xd8c */
+       __u8         pad_0xd90[0xdc0-0xd90];   /* 0xd90 */
        /* entry.S sensitive area end */
 
         /* SMP info area: defined by DJB */
index db4523f..61862b3 100644 (file)
@@ -42,22 +42,8 @@ static inline void get_cpu_id(cpuid_t *ptr)
        asm volatile("stidp 0(%1)" : "=m" (*ptr) : "a" (ptr));
 }
 
-struct cpuinfo_S390
-{
-        cpuid_t  cpu_id;
-        __u16    cpu_addr;
-        __u16    cpu_nr;
-        unsigned long loops_per_jiffy;
-        unsigned long *pgd_quick;
-#ifdef __s390x__
-        unsigned long *pmd_quick;
-#endif /* __s390x__ */
-        unsigned long *pte_quick;
-        unsigned long pgtable_cache_sz;
-};
-
 extern void s390_adjust_jiffies(void);
-extern void print_cpu_info(struct cpuinfo_S390 *);
+extern void print_cpu_info(void);
 extern int get_cpu_capability(unsigned int *);
 
 /*
index 024b91e..2009158 100644 (file)
@@ -50,12 +50,7 @@ extern void machine_power_off_smp(void);
  
 #define PROC_CHANGE_PENALTY    20              /* Schedule penalty */
 
-#define raw_smp_processor_id() (S390_lowcore.cpu_data.cpu_nr)
-
-static inline __u16 hard_smp_processor_id(void)
-{
-       return stap();
-}
+#define raw_smp_processor_id() (S390_lowcore.cpu_nr)
 
 /*
  * returns 1 if cpu is in stopped/check stopped state or not operational
index 82c1872..423da1b 100644 (file)
 #include <asm/lowcore.h>
 #include <asm/param.h>
 
-void __cpuinit print_cpu_info(struct cpuinfo_S390 *cpuinfo)
+void __cpuinit print_cpu_info(void)
 {
        pr_info("Processor %d started, address %d, identification %06X\n",
-               cpuinfo->cpu_nr, cpuinfo->cpu_addr, cpuinfo->cpu_id.ident);
+               S390_lowcore.cpu_nr, S390_lowcore.cpu_addr,
+               S390_lowcore.cpu_id.ident);
 }
 
 /*
@@ -34,44 +35,42 @@ static int show_cpuinfo(struct seq_file *m, void *v)
                "esan3", "zarch", "stfle", "msa", "ldisp", "eimm", "dfp",
                "edat"
        };
-       struct cpuinfo_S390 *cpuinfo;
-       unsigned long n = (unsigned long) v - 1;
-       int i;
+       struct _lowcore *lc;
+       unsigned long n = (unsigned long) v - 1;
+       int i;
 
-       s390_adjust_jiffies();
-       preempt_disable();
-       if (!n) {
-              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 < 8; i++)
-                      if (hwcap_str[i] && (elf_hwcap & (1UL << i)))
-                              seq_printf(m, "%s ", hwcap_str[i]);
-              seq_puts(m, "\n");
-       }
+       s390_adjust_jiffies();
+       preempt_disable();
+       if (!n) {
+               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 < 8; i++)
+                       if (hwcap_str[i] && (elf_hwcap & (1UL << i)))
+                               seq_printf(m, "%s ", hwcap_str[i]);
+               seq_puts(m, "\n");
+       }
 
-       if (cpu_online(n)) {
+       if (cpu_online(n)) {
 #ifdef CONFIG_SMP
-              if (smp_processor_id() == n)
-                      cpuinfo = &S390_lowcore.cpu_data;
-              else
-                      cpuinfo = &lowcore_ptr[n]->cpu_data;
+               lc = (smp_processor_id() == n) ?
+                       &S390_lowcore : lowcore_ptr[n];
 #else
-              cpuinfo = &S390_lowcore.cpu_data;
+               lc = &S390_lowcore;
 #endif
-              seq_printf(m, "processor %li: "
-                         "version = %02X,  "
-                         "identification = %06X,  "
-                         "machine = %04X\n",
-                         n, cpuinfo->cpu_id.version,
-                         cpuinfo->cpu_id.ident,
-                         cpuinfo->cpu_id.machine);
-       }
-       preempt_enable();
-       return 0;
+               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);
+       }
+       preempt_enable();
+       return 0;
 }
 
 static void *c_start(struct seq_file *m, loff_t *pos)
index dd3c517..9c8853f 100644 (file)
@@ -121,13 +121,10 @@ static struct resource data_resource = {
  */
 void __cpuinit cpu_init(void)
 {
-        int addr = hard_smp_processor_id();
-
         /*
          * Store processor id in lowcore (used e.g. in timer_interrupt)
          */
-       get_cpu_id(&S390_lowcore.cpu_data.cpu_id);
-        S390_lowcore.cpu_data.cpu_addr = addr;
+       get_cpu_id(&S390_lowcore.cpu_id);
 
         /*
          * Force FPU initialization:
@@ -686,7 +683,6 @@ setup_memory(void)
 static void __init setup_hwcaps(void)
 {
        static const int stfl_bits[6] = { 0, 2, 7, 17, 19, 21 };
-       struct cpuinfo_S390 *cpuinfo = &S390_lowcore.cpu_data;
        unsigned long long facility_list_extended;
        unsigned int facility_list;
        int i;
@@ -732,7 +728,7 @@ static void __init setup_hwcaps(void)
        if (MACHINE_HAS_HPAGE)
                elf_hwcap |= 1UL << 7;
 
-       switch (cpuinfo->cpu_id.machine) {
+       switch (S390_lowcore.cpu_id.machine) {
        case 0x9672:
 #if !defined(CONFIG_64BIT)
        default:        /* Use "g5" as default for 31 bit kernels. */
@@ -825,7 +821,7 @@ setup_arch(char **cmdline_p)
        setup_lowcore();
 
         cpu_init();
-        __cpu_logical_map[0] = S390_lowcore.cpu_data.cpu_addr;
+       __cpu_logical_map[0] = stap();
        s390_init_cpu_topology();
 
        /*
index a885863..b167f74 100644 (file)
@@ -372,7 +372,7 @@ static void __init smp_detect_cpus(void)
 
        c_cpus = 1;
        s_cpus = 0;
-       boot_cpu_addr = S390_lowcore.cpu_data.cpu_addr;
+       boot_cpu_addr = __cpu_logical_map[0];
        info = kmalloc(sizeof(*info), GFP_KERNEL);
        if (!info)
                panic("smp_detect_cpus failed to allocate memory\n");
@@ -446,7 +446,7 @@ int __cpuinit start_secondary(void *cpuvoid)
        /* Switch on interrupts */
        local_irq_enable();
        /* Print info about this processor */
-       print_cpu_info(&S390_lowcore.cpu_data);
+       print_cpu_info();
        /* cpu_idle will call schedule for us */
        cpu_idle();
        return 0;
@@ -564,7 +564,7 @@ int __cpuinit __cpu_up(unsigned int cpu)
                : : "a" (&cpu_lowcore->access_regs_save_area) : "memory");
        cpu_lowcore->percpu_offset = __per_cpu_offset[cpu];
        cpu_lowcore->current_task = (unsigned long) idle;
-       cpu_lowcore->cpu_data.cpu_nr = cpu;
+       cpu_lowcore->cpu_nr = cpu;
        cpu_lowcore->kernel_asce = S390_lowcore.kernel_asce;
        cpu_lowcore->ipl_device = S390_lowcore.ipl_device;
        eieio();
@@ -656,7 +656,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
        /* request the 0x1201 emergency signal external interrupt */
        if (register_external_interrupt(0x1201, do_ext_call_interrupt) != 0)
                panic("Couldn't request external interrupt 0x1201");
-       print_cpu_info(&S390_lowcore.cpu_data);
+       print_cpu_info();
 
        /* Reallocate current lowcore, but keep its contents. */
        lc_order = sizeof(long) == 8 ? 1 : 0;
index 8446d15..dcd0e48 100644 (file)
@@ -655,7 +655,7 @@ css_generate_pgid(struct channel_subsystem *css, u32 tod_high)
                css->global_pgid.pgid_high.ext_cssid.cssid = css->cssid;
        } else {
 #ifdef CONFIG_SMP
-               css->global_pgid.pgid_high.cpu_addr = hard_smp_processor_id();
+               css->global_pgid.pgid_high.cpu_addr = stap();
 #else
                css->global_pgid.pgid_high.cpu_addr = 0;
 #endif