diff options
author | John Ogness <john.ogness@linutronix.de> | 2024-02-07 16:41:03 +0300 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2024-04-13 14:09:58 +0300 |
commit | a63a05db132b9a75e6bc3345ac8185c957d045dd (patch) | |
tree | 435080ce64e32d313e9b7fb94efea394ba48bdc2 /include/linux | |
parent | 365224c74cb3c47547bfb270d57ebe458c315318 (diff) | |
download | linux-a63a05db132b9a75e6bc3345ac8185c957d045dd.tar.xz |
dump_stack: Do not get cpu_sync for panic CPU
[ Upstream commit 7412dc6d55eed6b76180e40ac3601412ebde29bd ]
dump_stack() is called in panic(). If for some reason another CPU
is holding the printk_cpu_sync and is unable to release it, the
panic CPU will be unable to continue and print the stacktrace.
Since non-panic CPUs are not allowed to store new printk messages
anyway, there is no need to synchronize the stacktrace output in
a panic situation.
For the panic CPU, do not get the printk_cpu_sync because it is
not needed and avoids a potential deadlock scenario in panic().
Link: https://lore.kernel.org/lkml/ZcIGKU8sxti38Kok@alley
Signed-off-by: John Ogness <john.ogness@linutronix.de>
Reviewed-by: Petr Mladek <pmladek@suse.com>
Link: https://lore.kernel.org/r/20240207134103.1357162-15-john.ogness@linutronix.de
Signed-off-by: Petr Mladek <pmladek@suse.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/printk.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/include/linux/printk.h b/include/linux/printk.h index 8ef499ab3c1e..955e31860095 100644 --- a/include/linux/printk.h +++ b/include/linux/printk.h @@ -273,6 +273,8 @@ static inline void printk_trigger_flush(void) } #endif +bool this_cpu_in_panic(void); + #ifdef CONFIG_SMP extern int __printk_cpu_sync_try_get(void); extern void __printk_cpu_sync_wait(void); |