diff options
Diffstat (limited to 'arch/x86/kernel/cpu/amd.c')
-rw-r--r-- | arch/x86/kernel/cpu/amd.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c index 1d3167269a67..2b4cf04239b6 100644 --- a/arch/x86/kernel/cpu/amd.c +++ b/arch/x86/kernel/cpu/amd.c | |||
@@ -309,8 +309,22 @@ static void amd_get_topology(struct cpuinfo_x86 *c) | |||
309 | 309 | ||
310 | /* get information required for multi-node processors */ | 310 | /* get information required for multi-node processors */ |
311 | if (boot_cpu_has(X86_FEATURE_TOPOEXT)) { | 311 | if (boot_cpu_has(X86_FEATURE_TOPOEXT)) { |
312 | u32 eax, ebx, ecx, edx; | ||
312 | 313 | ||
313 | node_id = cpuid_ecx(0x8000001e) & 7; | 314 | cpuid(0x8000001e, &eax, &ebx, &ecx, &edx); |
315 | |||
316 | node_id = ecx & 0xff; | ||
317 | smp_num_siblings = ((ebx >> 8) & 0xff) + 1; | ||
318 | |||
319 | if (c->x86 == 0x15) | ||
320 | c->cu_id = ebx & 0xff; | ||
321 | |||
322 | if (c->x86 >= 0x17) { | ||
323 | c->cpu_core_id = ebx & 0xff; | ||
324 | |||
325 | if (smp_num_siblings > 1) | ||
326 | c->x86_max_cores /= smp_num_siblings; | ||
327 | } | ||
314 | 328 | ||
315 | /* | 329 | /* |
316 | * We may have multiple LLCs if L3 caches exist, so check if we | 330 | * We may have multiple LLCs if L3 caches exist, so check if we |