Commit 2576f5f9 authored by Nicholas Piggin's avatar Nicholas Piggin Committed by Michael Ellerman

powerpc/pseries: Machine check use rtas_call_unlocked() with args on stack

With the previous patch, machine checks can use rtas_call_unlocked()
which avoids the RTAS spinlock which would deadlock if a machine
check hits while making an RTAS call.

This also avoids the complex RTAS error logging which has more RTAS
calls and includes kmalloc (which can return memory beyond RMA, which
would also crash).
Signed-off-by: default avatarNicholas Piggin <npiggin@gmail.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20200508043408.886394-11-npiggin@gmail.com
parent d2cbbd45
...@@ -468,7 +468,15 @@ static struct rtas_error_log *fwnmi_get_errinfo(struct pt_regs *regs) ...@@ -468,7 +468,15 @@ static struct rtas_error_log *fwnmi_get_errinfo(struct pt_regs *regs)
*/ */
static void fwnmi_release_errinfo(void) static void fwnmi_release_errinfo(void)
{ {
int ret = rtas_call(ibm_nmi_interlock_token, 0, 1, NULL); struct rtas_args rtas_args;
int ret;
/*
* On pseries, the machine check stack is limited to under 4GB, so
* args can be on-stack.
*/
rtas_call_unlocked(&rtas_args, ibm_nmi_interlock_token, 0, 1, NULL);
ret = be32_to_cpu(rtas_args.rets[0]);
if (ret != 0) if (ret != 0)
printk(KERN_ERR "FWNMI: nmi-interlock failed: %d\n", ret); printk(KERN_ERR "FWNMI: nmi-interlock failed: %d\n", ret);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment