aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/smpboot.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/smpboot.c')
-rw-r--r--arch/x86/kernel/smpboot.c42
1 files changed, 22 insertions, 20 deletions
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
index 50e547eac8cd..0e8209619455 100644
--- a/arch/x86/kernel/smpboot.c
+++ b/arch/x86/kernel/smpboot.c
@@ -314,10 +314,10 @@ topology_sane(struct cpuinfo_x86 *c, struct cpuinfo_x86 *o, const char *name)
314 cpu1, name, cpu2, cpu_to_node(cpu1), cpu_to_node(cpu2)); 314 cpu1, name, cpu2, cpu_to_node(cpu1), cpu_to_node(cpu2));
315} 315}
316 316
317#define link_mask(_m, c1, c2) \ 317#define link_mask(mfunc, c1, c2) \
318do { \ 318do { \
319 cpumask_set_cpu((c1), cpu_##_m##_mask(c2)); \ 319 cpumask_set_cpu((c1), mfunc(c2)); \
320 cpumask_set_cpu((c2), cpu_##_m##_mask(c1)); \ 320 cpumask_set_cpu((c2), mfunc(c1)); \
321} while (0) 321} while (0)
322 322
323static bool match_smt(struct cpuinfo_x86 *c, struct cpuinfo_x86 *o) 323static bool match_smt(struct cpuinfo_x86 *c, struct cpuinfo_x86 *o)
@@ -398,9 +398,9 @@ void set_cpu_sibling_map(int cpu)
398 cpumask_set_cpu(cpu, cpu_sibling_setup_mask); 398 cpumask_set_cpu(cpu, cpu_sibling_setup_mask);
399 399
400 if (!has_mp) { 400 if (!has_mp) {
401 cpumask_set_cpu(cpu, cpu_sibling_mask(cpu)); 401 cpumask_set_cpu(cpu, topology_sibling_cpumask(cpu));
402 cpumask_set_cpu(cpu, cpu_llc_shared_mask(cpu)); 402 cpumask_set_cpu(cpu, cpu_llc_shared_mask(cpu));
403 cpumask_set_cpu(cpu, cpu_core_mask(cpu)); 403 cpumask_set_cpu(cpu, topology_core_cpumask(cpu));
404 c->booted_cores = 1; 404 c->booted_cores = 1;
405 return; 405 return;
406 } 406 }
@@ -409,32 +409,34 @@ void set_cpu_sibling_map(int cpu)
409 o = &cpu_data(i); 409 o = &cpu_data(i);
410 410
411 if ((i == cpu) || (has_smt && match_smt(c, o))) 411 if ((i == cpu) || (has_smt && match_smt(c, o)))
412 link_mask(sibling, cpu, i); 412 link_mask(topology_sibling_cpumask, cpu, i);
413 413
414 if ((i == cpu) || (has_mp && match_llc(c, o))) 414 if ((i == cpu) || (has_mp && match_llc(c, o)))
415 link_mask(llc_shared, cpu, i); 415 link_mask(cpu_llc_shared_mask, cpu, i);
416 416
417 } 417 }
418 418
419 /* 419 /*
420 * This needs a separate iteration over the cpus because we rely on all 420 * This needs a separate iteration over the cpus because we rely on all
421 * cpu_sibling_mask links to be set-up. 421 * topology_sibling_cpumask links to be set-up.
422 */ 422 */
423 for_each_cpu(i, cpu_sibling_setup_mask) { 423 for_each_cpu(i, cpu_sibling_setup_mask) {
424 o = &cpu_data(i); 424 o = &cpu_data(i);
425 425
426 if ((i == cpu) || (has_mp && match_die(c, o))) { 426 if ((i == cpu) || (has_mp && match_die(c, o))) {
427 link_mask(core, cpu, i); 427 link_mask(topology_core_cpumask, cpu, i);
428 428
429 /* 429 /*
430 * Does this new cpu bringup a new core? 430 * Does this new cpu bringup a new core?
431 */ 431 */
432 if (cpumask_weight(cpu_sibling_mask(cpu)) == 1) { 432 if (cpumask_weight(
433 topology_sibling_cpumask(cpu)) == 1) {
433 /* 434 /*
434 * for each core in package, increment 435 * for each core in package, increment
435 * the booted_cores for this new cpu 436 * the booted_cores for this new cpu
436 */ 437 */
437 if (cpumask_first(cpu_sibling_mask(i)) == i) 438 if (cpumask_first(
439 topology_sibling_cpumask(i)) == i)
438 c->booted_cores++; 440 c->booted_cores++;
439 /* 441 /*
440 * increment the core count for all 442 * increment the core count for all
@@ -1009,8 +1011,8 @@ static __init void disable_smp(void)
1009 physid_set_mask_of_physid(boot_cpu_physical_apicid, &phys_cpu_present_map); 1011 physid_set_mask_of_physid(boot_cpu_physical_apicid, &phys_cpu_present_map);
1010 else 1012 else
1011 physid_set_mask_of_physid(0, &phys_cpu_present_map); 1013 physid_set_mask_of_physid(0, &phys_cpu_present_map);
1012 cpumask_set_cpu(0, cpu_sibling_mask(0)); 1014 cpumask_set_cpu(0, topology_sibling_cpumask(0));
1013 cpumask_set_cpu(0, cpu_core_mask(0)); 1015 cpumask_set_cpu(0, topology_core_cpumask(0));
1014} 1016}
1015 1017
1016enum { 1018enum {
@@ -1293,22 +1295,22 @@ static void remove_siblinginfo(int cpu)
1293 int sibling; 1295 int sibling;
1294 struct cpuinfo_x86 *c = &cpu_data(cpu); 1296 struct cpuinfo_x86 *c = &cpu_data(cpu);
1295 1297
1296 for_each_cpu(sibling, cpu_core_mask(cpu)) { 1298 for_each_cpu(sibling, topology_core_cpumask(cpu)) {
1297 cpumask_clear_cpu(cpu, cpu_core_mask(sibling)); 1299 cpumask_clear_cpu(cpu, topology_core_cpumask(sibling));
1298 /*/ 1300 /*/
1299 * last thread sibling in this cpu core going down 1301 * last thread sibling in this cpu core going down
1300 */ 1302 */
1301 if (cpumask_weight(cpu_sibling_mask(cpu)) == 1) 1303 if (cpumask_weight(topology_sibling_cpumask(cpu)) == 1)
1302 cpu_data(sibling).booted_cores--; 1304 cpu_data(sibling).booted_cores--;
1303 } 1305 }
1304 1306
1305 for_each_cpu(sibling, cpu_sibling_mask(cpu)) 1307 for_each_cpu(sibling, topology_sibling_cpumask(cpu))
1306 cpumask_clear_cpu(cpu, cpu_sibling_mask(sibling)); 1308 cpumask_clear_cpu(cpu, topology_sibling_cpumask(sibling));
1307 for_each_cpu(sibling, cpu_llc_shared_mask(cpu)) 1309 for_each_cpu(sibling, cpu_llc_shared_mask(cpu))
1308 cpumask_clear_cpu(cpu, cpu_llc_shared_mask(sibling)); 1310 cpumask_clear_cpu(cpu, cpu_llc_shared_mask(sibling));
1309 cpumask_clear(cpu_llc_shared_mask(cpu)); 1311 cpumask_clear(cpu_llc_shared_mask(cpu));
1310 cpumask_clear(cpu_sibling_mask(cpu)); 1312 cpumask_clear(topology_sibling_cpumask(cpu));
1311 cpumask_clear(cpu_core_mask(cpu)); 1313 cpumask_clear(topology_core_cpumask(cpu));
1312 c->phys_proc_id = 0; 1314 c->phys_proc_id = 0;
1313 c->cpu_core_id = 0; 1315 c->cpu_core_id = 0;
1314 cpumask_clear_cpu(cpu, cpu_sibling_setup_mask); 1316 cpumask_clear_cpu(cpu, cpu_sibling_setup_mask);