diff options
Diffstat (limited to 'arch/i386/kernel/mpparse.c')
| -rw-r--r-- | arch/i386/kernel/mpparse.c | 41 |
1 files changed, 22 insertions, 19 deletions
diff --git a/arch/i386/kernel/mpparse.c b/arch/i386/kernel/mpparse.c index 27aabfceb67e..8f767d9aa45d 100644 --- a/arch/i386/kernel/mpparse.c +++ b/arch/i386/kernel/mpparse.c | |||
| @@ -69,7 +69,7 @@ unsigned int def_to_bigsmp = 0; | |||
| 69 | /* Processor that is doing the boot up */ | 69 | /* Processor that is doing the boot up */ |
| 70 | unsigned int boot_cpu_physical_apicid = -1U; | 70 | unsigned int boot_cpu_physical_apicid = -1U; |
| 71 | /* Internal processor count */ | 71 | /* Internal processor count */ |
| 72 | static unsigned int __initdata num_processors; | 72 | static unsigned int __devinitdata num_processors; |
| 73 | 73 | ||
| 74 | /* Bitmask of physically existing CPUs */ | 74 | /* Bitmask of physically existing CPUs */ |
| 75 | physid_mask_t phys_cpu_present_map; | 75 | physid_mask_t phys_cpu_present_map; |
| @@ -119,7 +119,7 @@ static int MP_valid_apicid(int apicid, int version) | |||
| 119 | } | 119 | } |
| 120 | #endif | 120 | #endif |
| 121 | 121 | ||
| 122 | static void __init MP_processor_info (struct mpc_config_processor *m) | 122 | static void __devinit MP_processor_info (struct mpc_config_processor *m) |
| 123 | { | 123 | { |
| 124 | int ver, apicid; | 124 | int ver, apicid; |
| 125 | physid_mask_t phys_cpu; | 125 | physid_mask_t phys_cpu; |
| @@ -182,17 +182,6 @@ static void __init MP_processor_info (struct mpc_config_processor *m) | |||
| 182 | boot_cpu_physical_apicid = m->mpc_apicid; | 182 | boot_cpu_physical_apicid = m->mpc_apicid; |
| 183 | } | 183 | } |
| 184 | 184 | ||
| 185 | if (num_processors >= NR_CPUS) { | ||
| 186 | printk(KERN_WARNING "WARNING: NR_CPUS limit of %i reached." | ||
| 187 | " Processor ignored.\n", NR_CPUS); | ||
| 188 | return; | ||
| 189 | } | ||
| 190 | |||
| 191 | if (num_processors >= maxcpus) { | ||
| 192 | printk(KERN_WARNING "WARNING: maxcpus limit of %i reached." | ||
| 193 | " Processor ignored.\n", maxcpus); | ||
| 194 | return; | ||
| 195 | } | ||
| 196 | ver = m->mpc_apicver; | 185 | ver = m->mpc_apicver; |
| 197 | 186 | ||
| 198 | if (!MP_valid_apicid(apicid, ver)) { | 187 | if (!MP_valid_apicid(apicid, ver)) { |
| @@ -201,11 +190,6 @@ static void __init MP_processor_info (struct mpc_config_processor *m) | |||
| 201 | return; | 190 | return; |
| 202 | } | 191 | } |
| 203 | 192 | ||
| 204 | cpu_set(num_processors, cpu_possible_map); | ||
| 205 | num_processors++; | ||
| 206 | phys_cpu = apicid_to_cpu_present(apicid); | ||
| 207 | physids_or(phys_cpu_present_map, phys_cpu_present_map, phys_cpu); | ||
| 208 | |||
| 209 | /* | 193 | /* |
| 210 | * Validate version | 194 | * Validate version |
| 211 | */ | 195 | */ |
| @@ -216,6 +200,25 @@ static void __init MP_processor_info (struct mpc_config_processor *m) | |||
| 216 | ver = 0x10; | 200 | ver = 0x10; |
| 217 | } | 201 | } |
| 218 | apic_version[m->mpc_apicid] = ver; | 202 | apic_version[m->mpc_apicid] = ver; |
| 203 | |||
| 204 | phys_cpu = apicid_to_cpu_present(apicid); | ||
| 205 | physids_or(phys_cpu_present_map, phys_cpu_present_map, phys_cpu); | ||
| 206 | |||
| 207 | if (num_processors >= NR_CPUS) { | ||
| 208 | printk(KERN_WARNING "WARNING: NR_CPUS limit of %i reached." | ||
| 209 | " Processor ignored.\n", NR_CPUS); | ||
| 210 | return; | ||
| 211 | } | ||
| 212 | |||
| 213 | if (num_processors >= maxcpus) { | ||
| 214 | printk(KERN_WARNING "WARNING: maxcpus limit of %i reached." | ||
| 215 | " Processor ignored.\n", maxcpus); | ||
| 216 | return; | ||
| 217 | } | ||
| 218 | |||
| 219 | cpu_set(num_processors, cpu_possible_map); | ||
| 220 | num_processors++; | ||
| 221 | |||
| 219 | if ((num_processors > 8) && | 222 | if ((num_processors > 8) && |
| 220 | APIC_XAPIC(ver) && | 223 | APIC_XAPIC(ver) && |
| 221 | (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL)) | 224 | (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL)) |
| @@ -834,7 +837,7 @@ void __init mp_register_lapic_address ( | |||
| 834 | } | 837 | } |
| 835 | 838 | ||
| 836 | 839 | ||
| 837 | void __init mp_register_lapic ( | 840 | void __devinit mp_register_lapic ( |
| 838 | u8 id, | 841 | u8 id, |
| 839 | u8 enabled) | 842 | u8 enabled) |
| 840 | { | 843 | { |
