• Thomas Gleixner's avatar
    x86/bugs: Separate AMD E400 erratum and C1E bug · bd7e7694
    Thomas Gleixner authored
    commit 3344ed30 upstream.
    
    The workaround for the AMD Erratum E400 (Local APIC timer stops in C1E
    state) is a two step process:
    
     - Selection of the E400 aware idle routine
    
     - Detection whether the platform is affected
    
    The idle routine selection happens for possibly affected CPUs depending on
    family/model/stepping information. These range of CPUs is not necessarily
    affected as the decision whether to enable the C1E feature is made by the
    firmware. Unfortunately there is no way to query this at early boot.
    
    The current implementation polls a MSR in the E400 aware idle routine to
    detect whether the CPU is affected. This is inefficient on non affected
    CPUs because every idle entry has to do the MSR read.
    
    There is a better way to detect this before going idle for the first time
    which requires to seperate the bug flags:
    
      X86_BUG_AMD_E400 	- Selects the E400 aware idle routine and
      			  enables the detection
    
      X86_BUG_AMD_APIC_C1E  - Set when the platform is affected by E400
    
    Replace the current X86_BUG_AMD_APIC_C1E usage by the new X86_BUG_AMD_E400
    bug bit to select the idle routine which currently does an unconditional
    detection poll. X86_BUG_AMD_APIC_C1E is going to be used in later patches
    to remove the MSR polling and simplify the handling of this misfeature.
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Link: http://lkml.kernel.org/r/20161209182912.2726-3-bp@alien8.deSigned-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    bd7e7694
process.c 13.5 KB