Messages in this thread | | | Date | Tue, 11 Aug 2009 11:56:05 -0300 | Subject | Re: [PATCH v3] x86: clear incorrectly forced X86_FEATURE_LAHF_LM flag | From | Kevin Winchester <> |
| |
2009/8/11 Mikael Pettersson <mikpe@it.uu.se>: > Kevin Winchester writes: > > Due to an erratum with certain AMD Athlon 64 processors, the BIOS may > > need to force enable the LAHF_LM capability. Unfortunately, in at > > least one case, the BIOS does this even for processors that do not > > support the functionality. > > > > Add a specific check that will clear the feature bit for processors > > known not to support the LAHF/SAHF instructions. > > > > Signed-off-by: Kevin Winchester <kjwinchester@gmail.com> > > --- > > arch/x86/kernel/cpu/amd.c | 7 +++++++ > > 1 files changed, 7 insertions(+), 0 deletions(-) > > > > diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c > > index e2485b0..63fddcd 100644 > > --- a/arch/x86/kernel/cpu/amd.c > > +++ b/arch/x86/kernel/cpu/amd.c > > @@ -400,6 +400,13 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c) > > level = cpuid_eax(1); > > if((level >= 0x0f48 && level < 0x0f50) || level >= 0x0f58) > > set_cpu_cap(c, X86_FEATURE_REP_GOOD); > > + > > + /* > > + * Some BIOSes incorrectly force this feature, but only K8 > > + * revision D (model = 0x14) and later actually support it. > > + */ > > + if (c->x86_model < 0x14) > > + clear_cpu_cap(c, X86_FEATURE_LAHF_LM); > > } > > if (c->x86 == 0x10 || c->x86 == 0x11) > > set_cpu_cap(c, X86_FEATURE_REP_GOOD); > > But this only fixes /proc/cpuinfo, right? > > Since the BIOS apparently wrote some MSR to get LAHF_LM incorrectly > reported by CPUID, would it be possible to also correct that MSR so > that applications that execute CPUID get the correct feature flags? >
Yes, this does only fix /proc/cpuinfo. The problem I was experiencing was related to the 64-bit Adobe Flash plugin, which always uses the LAHF instruction, regardless of the capabilities of the processor. Gentoo has a special additional browser plugin that will basically emulate the LAHF instruction when it gets an illegal instruction signal, but that plugin is not installed if /proc/cpuinfo indicates that LAHF is supported.
Thus this patch precisely fixes my problem.
Other options would be, as you mention, to correct the MSR value, or even to have the kernel emulate the instruction (if that is possible).
I would be happy to implement any other solution instead if it would help others, while continuing to solve my problem - but this was the simplest answer I had.
-- Kevin Winchester -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |