diff options
| author | Len Brown <len.brown@intel.com> | 2005-09-08 01:45:47 -0400 |
|---|---|---|
| committer | Len Brown <len.brown@intel.com> | 2005-09-08 01:45:47 -0400 |
| commit | 64e47488c913ac704d465a6af86a26786d1412a5 (patch) | |
| tree | d3b0148592963dcde26e4bb35ddfec8b1eaf8e23 /arch/i386/kernel/mpparse.c | |
| parent | 4a35a46bf1cda4737c428380d1db5d15e2590d18 (diff) | |
| parent | caf39e87cc1182f7dae84eefc43ca14d54c78ef9 (diff) | |
Merge linux-2.6 with linux-acpi-2.6
Diffstat (limited to 'arch/i386/kernel/mpparse.c')
| -rw-r--r-- | arch/i386/kernel/mpparse.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/arch/i386/kernel/mpparse.c b/arch/i386/kernel/mpparse.c index 97dbf289dbd5..cafaeffe3818 100644 --- a/arch/i386/kernel/mpparse.c +++ b/arch/i386/kernel/mpparse.c | |||
| @@ -65,6 +65,8 @@ int nr_ioapics; | |||
| 65 | int pic_mode; | 65 | int pic_mode; |
| 66 | unsigned long mp_lapic_addr; | 66 | unsigned long mp_lapic_addr; |
| 67 | 67 | ||
| 68 | unsigned int def_to_bigsmp = 0; | ||
| 69 | |||
| 68 | /* Processor that is doing the boot up */ | 70 | /* Processor that is doing the boot up */ |
| 69 | unsigned int boot_cpu_physical_apicid = -1U; | 71 | unsigned int boot_cpu_physical_apicid = -1U; |
| 70 | /* Internal processor count */ | 72 | /* Internal processor count */ |
| @@ -120,7 +122,7 @@ static int MP_valid_apicid(int apicid, int version) | |||
| 120 | 122 | ||
| 121 | static void __init MP_processor_info (struct mpc_config_processor *m) | 123 | static void __init MP_processor_info (struct mpc_config_processor *m) |
| 122 | { | 124 | { |
| 123 | int ver, apicid; | 125 | int ver, apicid, cpu, found_bsp = 0; |
| 124 | physid_mask_t tmp; | 126 | physid_mask_t tmp; |
| 125 | 127 | ||
| 126 | if (!(m->mpc_cpuflag & CPU_ENABLED)) | 128 | if (!(m->mpc_cpuflag & CPU_ENABLED)) |
| @@ -179,6 +181,7 @@ static void __init MP_processor_info (struct mpc_config_processor *m) | |||
| 179 | if (m->mpc_cpuflag & CPU_BOOTPROCESSOR) { | 181 | if (m->mpc_cpuflag & CPU_BOOTPROCESSOR) { |
| 180 | Dprintk(" Bootup CPU\n"); | 182 | Dprintk(" Bootup CPU\n"); |
| 181 | boot_cpu_physical_apicid = m->mpc_apicid; | 183 | boot_cpu_physical_apicid = m->mpc_apicid; |
| 184 | found_bsp = 1; | ||
| 182 | } | 185 | } |
| 183 | 186 | ||
| 184 | if (num_processors >= NR_CPUS) { | 187 | if (num_processors >= NR_CPUS) { |
| @@ -202,6 +205,11 @@ static void __init MP_processor_info (struct mpc_config_processor *m) | |||
| 202 | return; | 205 | return; |
| 203 | } | 206 | } |
| 204 | 207 | ||
| 208 | if (found_bsp) | ||
| 209 | cpu = 0; | ||
| 210 | else | ||
| 211 | cpu = num_processors - 1; | ||
| 212 | cpu_set(cpu, cpu_possible_map); | ||
| 205 | tmp = apicid_to_cpu_present(apicid); | 213 | tmp = apicid_to_cpu_present(apicid); |
| 206 | physids_or(phys_cpu_present_map, phys_cpu_present_map, tmp); | 214 | physids_or(phys_cpu_present_map, phys_cpu_present_map, tmp); |
| 207 | 215 | ||
| @@ -213,6 +221,13 @@ static void __init MP_processor_info (struct mpc_config_processor *m) | |||
| 213 | ver = 0x10; | 221 | ver = 0x10; |
| 214 | } | 222 | } |
| 215 | apic_version[m->mpc_apicid] = ver; | 223 | apic_version[m->mpc_apicid] = ver; |
| 224 | if ((num_processors > 8) && | ||
| 225 | APIC_XAPIC(ver) && | ||
| 226 | (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL)) | ||
| 227 | def_to_bigsmp = 1; | ||
| 228 | else | ||
| 229 | def_to_bigsmp = 0; | ||
| 230 | |||
| 216 | bios_cpu_apicid[num_processors - 1] = m->mpc_apicid; | 231 | bios_cpu_apicid[num_processors - 1] = m->mpc_apicid; |
| 217 | } | 232 | } |
| 218 | 233 | ||
