]> git.baikalelectronics.ru Git - kernel.git/commit
powerpc/book3s/mce: Move add_taint() later in virtual mode
authorMahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
Tue, 18 Apr 2017 16:38:17 +0000 (22:08 +0530)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 3 May 2017 04:45:39 +0000 (14:45 +1000)
commit866247c622c574439a076044aa0e9f72deaa7bf3
treefc9a6ccc58e0f8e925ba3f731beff5090f993d0b
parentae1c2f53346995a5fb4fd4ca603d108a467bdee4
powerpc/book3s/mce: Move add_taint() later in virtual mode

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: 4f269b6b736a ("powerpc: Set the correct kernel taint on machine check errors.")
Cc: stable@vger.kernel.org # v4.2+
Signed-off-by: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/kernel/mce.c
arch/powerpc/kernel/traps.c