x86, amd: Re-enable CPU topology extensions in case BIOS has disabled it
PATCH 1/1 x86, amd: Re-enable CPU topology extensions in case BIOS has disabled it
For detection of thread siblings we are relying on the topology extension CPUID leafs. Thus we have to re-enable it in case BIOS tries to hide the correpsonding CPUID feature flag.
--- arch/x86/kernel/cpu/amd.c | 18 ++++++++++++++++++ 1 files changed, 18 insertions(+), 0 deletions(-)
arch/x86/kernel/cpu/amd.c +18 -0
@@ -579,6 +579,24 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c) } } +/* re-enable TopologyExtensions if switched off by BIOS */ +if ((c->x86 ==0x15 ) && + (c->x86_model >=0x10 ) && (c->x86_model <=0x1f ) && + !cpu_has (c,X86_FEATURE_TOPOEXT )) { +u64 val; + +if (!rdmsrl_amd_safe (0xc0011005 , &val)) { + val |=1ULL <<54 ; +wrmsrl_amd_safe (0xc0011005 , val); +rdmsrl (0xc0011005 , val); +if (val & (1ULL <<54 )) { +set_cpu_cap (c,X86_FEATURE_TOPOEXT ); + printk(KERN_INFO FW_INFO "CPU: Re-enabling " + "disabled Topology Extensions Support\n"); + } + } + } +cpu_detect_cache_sizes (c);/* Multi core CPU? */
Signature · 1 line
1.7.5.rc3
Quoted 7 lines · Andreas Herrmann
For detection of thread siblings we are relying on the topology extension CPUID leafs. Thus we have to re-enable it in case BIOS tries to hide the correpsonding CPUID feature flag.
Signed-off-by Andreas Herrmann <[email protected]>
This changelog is missing some key information:
- how did you find the bug - did you see some actual badness?
- what practical effect (if any) did you see from this patch?
- what practical effect (if any) do you expect others to see from this patch?
This kind of information helps us prioritize bugfixes and helps us determine whether a fix requires a -stable backport.
Thanks,
Ingo
PATCH v2 1/1 x86, amd: Re-enable CPU topology extensions in case BIOS has disabled it
Quoted 1 line
From
2da973d9e096cea39a3bd397c1449a821b76d816Mon Sep 17 00:00:00 2001
From: Andreas Herrmann <[email protected]>
Date: Tue, 3 Apr 2012 12:13:07 +0200
Subject: [PATCH] x86, amd: Re-enable CPU topology extensions in case BIOS has
disabled it
BIOS will switch off the corresponding feature flag on family 15h models 10h-1fh non-desktop CPUs.
The topology extension CPUID leafs are required to detect which cores belong to the same compute unit. (thread siblings mask is set accordingly and also correct information about L1i and L2 cache sharing depends on this).
W/o this patch we wouldn't see which cores belong to the same compute unit and also cache sharing information for L1i and L2 would be incorrect on such systems.
--- arch/x86/kernel/cpu/amd.c | 18 ++++++++++++++++++ 1 files changed, 18 insertions(+), 0 deletions(-)
Hi Ingo,
Hope this new commit messages answers your questions.
Of course this patch is more a workaround for "suboptimal BIOS settings" and thus not strictly stable material. (BTW, no there is no way to change the BIOS setting here.) But as a whole bunch of systems will be affected it might also be reasonable to add this patch to stable Linux versions.
Regards,
Andreas
arch/x86/kernel/cpu/amd.c +18 -0
@@ -579,6 +579,24 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c) } } +/* re-enable TopologyExtensions if switched off by BIOS */ +if ((c->x86 ==0x15 ) && + (c->x86_model >=0x10 ) && (c->x86_model <=0x1f ) && + !cpu_has (c,X86_FEATURE_TOPOEXT )) { +u64 val; + +if (!rdmsrl_amd_safe (0xc0011005 , &val)) { + val |=1ULL <<54 ; +wrmsrl_amd_safe (0xc0011005 , val); +rdmsrl (0xc0011005 , val); +if (val & (1ULL <<54 )) { +set_cpu_cap (c,X86_FEATURE_TOPOEXT ); + printk(KERN_INFO FW_INFO "CPU: Re-enabling " + "disabled Topology Extensions Support\n"); + } + } + } +cpu_detect_cache_sizes (c);/* Multi core CPU? */
Signature · 1 line
1.7.8.5