x86, cpu: After uncapping CPUID, re-run CPU feature detection
Commit-ID: a1a5e645e92d572fdaec284bab6b55fb3985da9a Gitweb: http://git.kernel.org/tip/a1a5e645e92d572fdaec284bab6b55fb3985da9a Author: H. Peter Anvin <[email protected]> AuthorDate: Tue, 28 Sep 2010 15:35:01 -0700 Committer: H. Peter Anvin <[email protected]> CommitDate: Tue, 28 Sep 2010 15:50:27 -0700
x86, cpu: After uncapping CPUID, re-run CPU feature detection
After uncapping the CPUID level, we need to also re-run the CPU feature detection code.
This resolves kernel bugzilla 16322.
Reported-by boris64 <[email protected]>
Cc <[email protected]> v2.6.29..2.6.35
LKML-Reference: <[email protected]>
Signed-off-by H. Peter Anvin <[email protected]>
--- arch/x86/kernel/cpu/common.c | 2 +- arch/x86/kernel/cpu/cpu.h | 1 + arch/x86/kernel/cpu/intel.c | 1 + 3 files changed, 3 insertions(+), 1 deletions(-)
arch/x86/kernel/cpu/common.c +1 -1
@@ -545,7 +545,7 @@ void __cpuinit cpu_detect(struct cpuinfo_x86 *c) } } -static void __cpuinit get_cpu_cap (struct cpuinfo_x86 *c) +void __cpuinit get_cpu_cap (struct cpuinfo_x86 *c) {u32 tfms, xlvl;u32 ebx;
arch/x86/kernel/cpu/cpu.h +1 -0
@@ -33,5 +33,6 @@ extern const struct cpu_dev *const __x86_cpu_dev_start[], *const __x86_cpu_dev_end[];extern void cpu_detect_cache_sizes (struct cpuinfo_x86 *c); +extern void __cpuinit get_cpu_cap (struct cpuinfo_x86 *c);#endif
arch/x86/kernel/cpu/intel.c +1 -0
@@ -39,6 +39,7 @@ static void __cpuinit early_init_intel(struct cpuinfo_x86 *c) misc_enable &= ~MSR_IA32_MISC_ENABLE_LIMIT_CPUID ;wrmsrl (MSR_IA32_MISC_ENABLE , misc_enable); c->cpuid_level =cpuid_eax (0 ); +get_cpu_cap (c); } }
Commit-ID: d900329e20f4476db6461752accebcf7935a8055 Gitweb: http://git.kernel.org/tip/d900329e20f4476db6461752accebcf7935a8055 Author: H. Peter Anvin <[email protected]> AuthorDate: Tue, 28 Sep 2010 15:35:01 -0700 Committer: H. Peter Anvin <[email protected]> CommitDate: Tue, 28 Sep 2010 16:33:14 -0700
x86, cpu: After uncapping CPUID, re-run CPU feature detection
After uncapping the CPUID level, we need to also re-run the CPU feature detection code.
This resolves kernel bugzilla 16322.
Reported-by boris64 <[email protected]>
Cc <[email protected]> v2.6.29..2.6.35
LKML-Reference: <[email protected]>
Signed-off-by H. Peter Anvin <[email protected]>
--- arch/x86/kernel/cpu/common.c | 2 +- arch/x86/kernel/cpu/cpu.h | 1 + arch/x86/kernel/cpu/intel.c | 1 + 3 files changed, 3 insertions(+), 1 deletions(-)
arch/x86/kernel/cpu/common.c +1 -1
@@ -545,7 +545,7 @@ void __cpuinit cpu_detect(struct cpuinfo_x86 *c) } } -static void __cpuinit get_cpu_cap (struct cpuinfo_x86 *c) +void __cpuinit get_cpu_cap (struct cpuinfo_x86 *c) {u32 tfms, xlvl;u32 ebx;
arch/x86/kernel/cpu/cpu.h +1 -0
@@ -33,5 +33,6 @@ extern const struct cpu_dev *const __x86_cpu_dev_start[], *const __x86_cpu_dev_end[];extern void cpu_detect_cache_sizes (struct cpuinfo_x86 *c); +extern void get_cpu_cap (struct cpuinfo_x86 *c);#endif
arch/x86/kernel/cpu/intel.c +1 -0
@@ -39,6 +39,7 @@ static void __cpuinit early_init_intel(struct cpuinfo_x86 *c) misc_enable &= ~MSR_IA32_MISC_ENABLE_LIMIT_CPUID ;wrmsrl (MSR_IA32_MISC_ENABLE , misc_enable); c->cpuid_level =cpuid_eax (0 ); +get_cpu_cap (c); } }