• Mahesh Salgaonkar's avatar
    powerpc/book3s/mce: Move add_taint() later in virtual mode · d93b0ac0
    Mahesh Salgaonkar authored
    machine_check_early() gets called in real mode. The very first time when
    add_taint() is called, it prints a warning which ends up calling opal
    call (that uses OPAL_CALL wrapper) for writing it to console. If we get a
    very first machine check while we are in opal we are doomed. OPAL_CALL
    overwrites the PACASAVEDMSR in r13 and in this case when we are done with
    MCE handling the original opal call will use this new MSR on it's way
    back to opal_return. This usually leads to unexpected behaviour or the
    kernel to panic. Instead move the add_taint() call later in the virtual
    mode where it is safe to call.
    
    This is broken with current FW level. We got lucky so far for not getting
    very first MCE hit while in OPAL. But easily reproducible on Mambo.
    
    Fixes: 27ea2c42 ("powerpc: Set the correct kernel taint on machine check errors.")
    Cc: stable@vger.kernel.org # v4.2+
    Signed-off-by: default avatarMahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    d93b0ac0
mce.c 13 KB