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 | { |