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 e9bbe02950ad..36171bcd91f8 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c | |||
@@ -423,9 +423,15 @@ static bool match_smt(struct cpuinfo_x86 *c, struct cpuinfo_x86 *o) | |||
423 | int cpu1 = c->cpu_index, cpu2 = o->cpu_index; | 423 | int cpu1 = c->cpu_index, cpu2 = o->cpu_index; |
424 | 424 | ||
425 | if (c->phys_proc_id == o->phys_proc_id && | 425 | if (c->phys_proc_id == o->phys_proc_id && |
426 | per_cpu(cpu_llc_id, cpu1) == per_cpu(cpu_llc_id, cpu2) && | 426 | per_cpu(cpu_llc_id, cpu1) == per_cpu(cpu_llc_id, cpu2)) { |
427 | c->cpu_core_id == o->cpu_core_id) | 427 | if (c->cpu_core_id == o->cpu_core_id) |
428 | return topology_sane(c, o, "smt"); | 428 | return topology_sane(c, o, "smt"); |
429 | |||
430 | if ((c->cu_id != 0xff) && | ||
431 | (o->cu_id != 0xff) && | ||
432 | (c->cu_id == o->cu_id)) | ||
433 | return topology_sane(c, o, "smt"); | ||
434 | } | ||
429 | 435 | ||
430 | } else if (c->phys_proc_id == o->phys_proc_id && | 436 | } else if (c->phys_proc_id == o->phys_proc_id && |
431 | c->cpu_core_id == o->cpu_core_id) { | 437 | c->cpu_core_id == o->cpu_core_id) { |