s390/smp: reduce memory consumption of pcpu_devices array
authorHeiko Carstens <heiko.carstens@de.ibm.com>
Thu, 5 Dec 2013 11:42:09 +0000 (12:42 +0100)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Mon, 16 Dec 2013 13:37:46 +0000 (14:37 +0100)
Remove the embedded struct cpu from struct pcpu and replace it with a
pointer instead. The struct cpu now gets allocated when a new cpu gets
detected.

The size of the pcpu_devices array (NR_CPUS * sizeof(struct pcpu)) gets
reduced by nearly 120KB.

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

index 86b2913..8ceefc9 100644 (file)
@@ -59,7 +59,7 @@ enum {
 };
 
 struct pcpu {
-       struct cpu cpu;
+       struct cpu *cpu;
        struct _lowcore *lowcore;       /* lowcore page(s) for the cpu */
        unsigned long async_stack;      /* async stack for the cpu */
        unsigned long panic_stack;      /* panic stack for the cpu */
@@ -958,7 +958,7 @@ static int smp_cpu_notify(struct notifier_block *self, unsigned long action,
                          void *hcpu)
 {
        unsigned int cpu = (unsigned int)(long)hcpu;
-       struct cpu *c = &pcpu_devices[cpu].cpu;
+       struct cpu *c = pcpu_devices[cpu].cpu;
        struct device *s = &c->dev;
        int err = 0;
 
@@ -975,10 +975,15 @@ static int smp_cpu_notify(struct notifier_block *self, unsigned long action,
 
 static int smp_add_present_cpu(int cpu)
 {
-       struct cpu *c = &pcpu_devices[cpu].cpu;
-       struct device *s = &c->dev;
+       struct device *s;
+       struct cpu *c;
        int rc;
 
+       c = kzalloc(sizeof(*c), GFP_KERNEL);
+       if (!c)
+               return -ENOMEM;
+       pcpu_devices[cpu].cpu = c;
+       s = &c->dev;
        c->hotpluggable = 1;
        rc = register_cpu(c, cpu);
        if (rc)