mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-24 17:59:32 +00:00
![Frederic Weisbecker](/assets/img/avatar_default.png)
wake_up_klogd() is useless when CONFIG_PRINTK=n because neither printk() nor printk_sched() are in use and there are actually no waiter on log_wait waitqueue. It should be a stub in this case for users like bust_spinlocks(). Otherwise this results in this warning when CONFIG_PRINTK=n and CONFIG_IRQ_WORK=n: kernel/built-in.o In function `wake_up_klogd': (.text.wake_up_klogd+0xb4): undefined reference to `irq_work_queue' To fix this, provide an off-case for wake_up_klogd() when CONFIG_PRINTK=n. There is much more from console_unlock() and other console related code in printk.c that should be moved under CONFIG_PRINTK. But for now, focus on a minimal fix as we passed the merged window already. [akpm@linux-foundation.org: include printk.h in bust_spinlocks.c] Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> Reported-by: James Hogan <james.hogan@imgtec.com> Cc: James Hogan <james.hogan@imgtec.com> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Ingo Molnar <mingo@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
31 lines
660 B
C
31 lines
660 B
C
/*
|
|
* lib/bust_spinlocks.c
|
|
*
|
|
* Provides a minimal bust_spinlocks for architectures which don't have one of their own.
|
|
*
|
|
* bust_spinlocks() clears any spinlocks which would prevent oops, die(), BUG()
|
|
* and panic() information from reaching the user.
|
|
*/
|
|
|
|
#include <linux/kernel.h>
|
|
#include <linux/printk.h>
|
|
#include <linux/spinlock.h>
|
|
#include <linux/tty.h>
|
|
#include <linux/wait.h>
|
|
#include <linux/vt_kern.h>
|
|
#include <linux/console.h>
|
|
|
|
|
|
void __attribute__((weak)) bust_spinlocks(int yes)
|
|
{
|
|
if (yes) {
|
|
++oops_in_progress;
|
|
} else {
|
|
#ifdef CONFIG_VT
|
|
unblank_screen();
|
|
#endif
|
|
console_unblank();
|
|
if (--oops_in_progress == 0)
|
|
wake_up_klogd();
|
|
}
|
|
}
|