diff options
Diffstat (limited to 'arch/x86/kernel/smpboot.c')
-rw-r--r-- | arch/x86/kernel/smpboot.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index 46732dc3b73c..99b920d0e516 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c | |||
@@ -433,9 +433,15 @@ static bool match_smt(struct cpuinfo_x86 *c, struct cpuinfo_x86 *o) | |||
433 | int cpu1 = c->cpu_index, cpu2 = o->cpu_index; | 433 | int cpu1 = c->cpu_index, cpu2 = o->cpu_index; |
434 | 434 | ||
435 | if (c->phys_proc_id == o->phys_proc_id && | 435 | if (c->phys_proc_id == o->phys_proc_id && |
436 | per_cpu(cpu_llc_id, cpu1) == per_cpu(cpu_llc_id, cpu2) && | 436 | per_cpu(cpu_llc_id, cpu1) == per_cpu(cpu_llc_id, cpu2)) { |
437 | c->cpu_core_id == o->cpu_core_id) | 437 | if (c->cpu_core_id == o->cpu_core_id) |
438 | return topology_sane(c, o, "smt"); | 438 | return topology_sane(c, o, "smt"); |
439 | |||
440 | if ((c->cu_id != 0xff) && | ||
441 | (o->cu_id != 0xff) && | ||
442 | (c->cu_id == o->cu_id)) | ||
443 | return topology_sane(c, o, "smt"); | ||
444 | } | ||
439 | 445 | ||
440 | } else if (c->phys_proc_id == o->phys_proc_id && | 446 | } else if (c->phys_proc_id == o->phys_proc_id && |
441 | c->cpu_core_id == o->cpu_core_id) { | 447 | c->cpu_core_id == o->cpu_core_id) { |