diff options
author | 2024-04-05 08:48:12 +0200 | |
---|---|---|
committer | 2024-04-05 08:48:12 +0200 | |
commit | 100c85421b52e41269ada88f7d71a6b8a06c7a11 (patch) | |
tree | 1e291a2d1b8e68720a15dfd48964357502d03fc9 /lib/dump_stack.c | |
parent | ALSA: line6: Zero-initialize message buffers (diff) | |
parent | ASoC: SOF: Core: Add remove_late() to sof_init_environment failure path (diff) | |
download | wireguard-linux-100c85421b52e41269ada88f7d71a6b8a06c7a11.tar.xz wireguard-linux-100c85421b52e41269ada88f7d71a6b8a06c7a11.zip |
Merge tag 'asoc-fix-v6.9-rc2' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-linus
ASoC: Fixes for v6.9
A relatively large set of fixes here, the biggest piece of it is a
series correcting some problems with the delay reporting for Intel SOF
cards but there's a bunch of other things. Everything here is driver
specific except for a fix in the core for an issue with sign extension
handling volume controls.
Diffstat (limited to 'lib/dump_stack.c')
-rw-r--r-- | lib/dump_stack.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/lib/dump_stack.c b/lib/dump_stack.c index 83471e81501a..222c6d6c8281 100644 --- a/lib/dump_stack.c +++ b/lib/dump_stack.c @@ -96,15 +96,25 @@ static void __dump_stack(const char *log_lvl) */ asmlinkage __visible void dump_stack_lvl(const char *log_lvl) { + bool in_panic = this_cpu_in_panic(); unsigned long flags; /* * Permit this cpu to perform nested stack dumps while serialising - * against other CPUs + * against other CPUs, unless this CPU is in panic. + * + * When in panic, non-panic CPUs are not permitted to store new + * printk messages so there is no need to synchronize the output. + * This avoids potential deadlock in panic() if another CPU is + * holding and unable to release the printk_cpu_sync. */ - printk_cpu_sync_get_irqsave(flags); + if (!in_panic) + printk_cpu_sync_get_irqsave(flags); + __dump_stack(log_lvl); - printk_cpu_sync_put_irqrestore(flags); + + if (!in_panic) + printk_cpu_sync_put_irqrestore(flags); } EXPORT_SYMBOL(dump_stack_lvl); |