projects
/
linux.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
d893931
)
powerpc/rtas: avoid scheduling in rtas_os_term()
author
Nathan Lynch
<nathanl@linux.ibm.com>
Fri, 18 Nov 2022 15:07:42 +0000
(09:07 -0600)
committer
Greg Kroah-Hartman
<gregkh@linuxfoundation.org>
Thu, 12 Jan 2023 10:58:46 +0000
(11:58 +0100)
[ Upstream commit
6c606e57eecc37d6b36d732b1ff7e55b7dc32dd4
]
It's unsafe to use rtas_busy_delay() to handle a busy status from
the ibm,os-term RTAS function in rtas_os_term():
Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b
BUG: sleeping function called from invalid context at arch/powerpc/kernel/rtas.c:618
in_atomic(): 1, irqs_disabled(): 1, non_block: 0, pid: 1, name: swapper/0
preempt_count: 2, expected: 0
CPU: 7 PID: 1 Comm: swapper/0 Tainted: G D
6.0.0-rc5-02182-gf8553a572277
-dirty #9
Call Trace:
[
c000000007b8f000
] [
c000000001337110
] dump_stack_lvl+0xb4/0x110 (unreliable)
[
c000000007b8f040
] [
c0000000002440e4
] __might_resched+0x394/0x3c0
[
c000000007b8f0e0
] [
c00000000004f680
] rtas_busy_delay+0x120/0x1b0
[
c000000007b8f100
] [
c000000000052d04
] rtas_os_term+0xb8/0xf4
[
c000000007b8f180
] [
c0000000001150fc
] pseries_panic+0x50/0x68
[
c000000007b8f1f0
] [
c000000000036354
] ppc_panic_platform_handler+0x34/0x50
[
c000000007b8f210
] [
c0000000002303c4
] notifier_call_chain+0xd4/0x1c0
[
c000000007b8f2b0
] [
c0000000002306cc
] atomic_notifier_call_chain+0xac/0x1c0
[
c000000007b8f2f0
] [
c0000000001d62b8
] panic+0x228/0x4d0
[
c000000007b8f390
] [
c0000000001e573c
] do_exit+0x140c/0x1420
[
c000000007b8f480
] [
c0000000001e586c
] make_task_dead+0xdc/0x200
Use rtas_busy_delay_time() instead, which signals without side effects
whether to attempt the ibm,os-term RTAS call again.
Signed-off-by: Nathan Lynch <nathanl@linux.ibm.com>
Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
Reviewed-by: Andrew Donnellan <ajd@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link:
https://lore.kernel.org/r/20221118150751.469393-5-nathanl@linux.ibm.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
arch/powerpc/kernel/rtas.c
patch
|
blob
|
history
diff --git
a/arch/powerpc/kernel/rtas.c
b/arch/powerpc/kernel/rtas.c
index 4d8de49c9d4bd0f71f12bbf35a4aaa4b134d6ee5..2dae702e7a5a758cd775175386de9a9bc33f085d 100644
(file)
--- a/
arch/powerpc/kernel/rtas.c
+++ b/
arch/powerpc/kernel/rtas.c
@@
-805,10
+805,15
@@
void rtas_os_term(char *str)
snprintf(rtas_os_term_buf, 2048, "OS panic: %s", str);
+ /*
+ * Keep calling as long as RTAS returns a "try again" status,
+ * but don't use rtas_busy_delay(), which potentially
+ * schedules.
+ */
do {
status = rtas_call(ibm_os_term_token, 1, 1, NULL,
__pa(rtas_os_term_buf));
- } while (rtas_busy_delay(status));
+ } while (rtas_busy_delay
_time
(status));
if (status != 0)
printk(KERN_EMERG "ibm,os-term call failed %d\n", status);