x86: fill bios cpu to apicid maps
authorGlauber de Oliveira Costa <gcosta@redhat.com>
Wed, 19 Mar 2008 17:25:24 +0000 (14:25 -0300)
committerIngo Molnar <mingo@elte.hu>
Thu, 17 Apr 2008 15:41:01 +0000 (17:41 +0200)
We fill the per-cpu (or array) that maps
bios cpu id to apicid in mpparse_32.c, the way x86_64 does

Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/kernel/mpparse_32.c

index 1b1fd6e920e6d2fb0a4291ca63aac08ba6d1554b..6ea97163701fcc76e4da66ddc950f2ed012c480d 100644 (file)
@@ -75,8 +75,6 @@ unsigned disabled_cpus __cpuinitdata;
 /* Bitmask of physically existing CPUs */
 physid_mask_t phys_cpu_present_map;
 
-u8 bios_cpu_apicid[NR_CPUS] = { [0 ... NR_CPUS-1] = BAD_APICID };
-
 /*
  * Intel MP BIOS table parsing routines:
  */
@@ -220,7 +218,14 @@ static void __cpuinit MP_processor_info (struct mpc_config_processor *m)
                        def_to_bigsmp = 1;
                }
        }
-       bios_cpu_apicid[num_processors - 1] = m->mpc_apicid;
+       /* are we being called early in kernel startup? */
+       if (x86_cpu_to_apicid_early_ptr) {
+               u16 *bios_cpu_apicid = x86_bios_cpu_apicid_early_ptr;
+               bios_cpu_apicid[num_processors - 1] = m->mpc_apicid;
+       } else {
+               int cpu = num_processors - 1;
+               per_cpu(x86_bios_cpu_apicid, cpu) = m->mpc_apicid;
+       }
 }
 
 static void __init MP_bus_info (struct mpc_config_bus *m)