[S390] smp: setup smp_processor_id early
authorHeiko Carstens <heiko.carstens@de.ibm.com>
Wed, 13 Jan 2010 19:44:34 +0000 (20:44 +0100)
committerMartin Schwidefsky <sky@mschwide.boeblingen.de.ibm.com>
Wed, 13 Jan 2010 19:44:45 +0000 (20:44 +0100)
smp_processor_id() is supposed to work before setup_arch() gets called.
Before that smp_processor_id() may return just an arbitrary value that
is contained in the uninitialized boot lowcore.
So provide the arch function which will override the weak function in
init/main.c.

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

index 2148ad3d490d8b841796977f51a63908965981d1..2d6a265b014584b0f2261733316afd1afa9ec36f 100644 (file)
@@ -849,7 +849,6 @@ setup_arch(char **cmdline_p)
        setup_lowcore();
 
         cpu_init();
-       __cpu_logical_map[0] = stap();
        s390_init_cpu_topology();
 
        /*
index 93e52039321b1f6bcb2a89c335c3c9b4ef1c1104..eebce7fdc97ccfb838b9c8ce695e66691b9ab1c3 100644 (file)
@@ -717,6 +717,12 @@ void __init smp_cpus_done(unsigned int max_cpus)
 {
 }
 
+void __init smp_setup_processor_id(void)
+{
+       S390_lowcore.cpu_nr = 0;
+       __cpu_logical_map[0] = stap();
+}
+
 /*
  * the frequency of the profiling timer can be changed
  * by writing a multiplier value into /proc/profile.