• L
    x86: Fix boot failures on older AMD CPU's · 8e8da023
    Linus Torvalds 提交于
    People with old AMD chips are getting hung boots, because commit
    bcb80e53 ("x86, microcode, AMD: Add microcode revision to
    /proc/cpuinfo") moved the microcode detection too early into
    "early_init_amd()".
    
    At that point we are *so* early in the booth that the exception tables
    haven't even been set up yet, so the whole
    
    	rdmsr_safe(MSR_AMD64_PATCH_LEVEL, &c->microcode, &dummy);
    
    doesn't actually work: if the rdmsr does a GP fault (due to non-existant
    MSR register on older CPU's), we can't fix it up yet, and the boot fails.
    
    Fix it by simply moving the code to a slightly later point in the boot
    (init_amd() instead of early_init_amd()), since the kernel itself
    doesn't even really care about the microcode patchlevel at this point
    (or really ever: it's made available to user space in /proc/cpuinfo, and
    updated if you do a microcode load).
    Reported-tested-and-bisected-by: NLarry Finger <Larry.Finger@lwfinger.net>
    Tested-by: NBob Tracy <rct@gherkin.frus.com>
    Acked-by: NBorislav Petkov <borislav.petkov@amd.com>
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    8e8da023
amd.c 18.7 KB