lkml.org 
[lkml]   [2009]   [Aug]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 2/2] x86: Clear incorrectly forced X86_FEATURE_LAHF_LM flag
    Date
    From: Kevin Winchester <kjwinchester@gmail.com>

    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.

    Borislav: turn off cpuid bit.

    Signed-off-by: Kevin Winchester <kjwinchester@gmail.com>
    Signed-off-by: Borislav Petkov <borislav.petkov@amd.com>
    ---
    arch/x86/kernel/cpu/amd.c | 16 ++++++++++++++++
    1 files changed, 16 insertions(+), 0 deletions(-)

    diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
    index e2485b0..9cd6fc7 100644
    --- a/arch/x86/kernel/cpu/amd.c
    +++ b/arch/x86/kernel/cpu/amd.c
    @@ -400,6 +400,22 @@ 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) {
    + u64 val;
    +
    + clear_cpu_cap(c, X86_FEATURE_LAHF_LM);
    + if (!rdmsrl_amd_safe(0xc001100d, &val)) {
    + val &= ~(1ULL << 32);
    + wrmsr_amd_safe(0xc001100d, (u32) val,
    + (u32)(val >> 32));
    + }
    + }
    +
    }
    if (c->x86 == 0x10 || c->x86 == 0x11)
    set_cpu_cap(c, X86_FEATURE_REP_GOOD);
    --
    1.6.3.3



    \
     
     \ /
      Last update: 2009-08-13 14:35    [W:0.024 / U:29.456 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site