From: Jiri Kosina Date: Mon, 16 Jul 2007 06:41:51 +0000 (-0700) Subject: kernel/printk.c: document possible deadlock against scheduler X-Git-Tag: v2.6.23-rc1~803 X-Git-Url: http://pilppa.com/gitweb/?a=commitdiff_plain;h=1492192b4a0bb84dd9b792cc0bd30583220a28a7;p=linux-2.6-omap-h63xx.git kernel/printk.c: document possible deadlock against scheduler kernel/printk.c: document possible deadlock against scheduler The printk's comment states that it can be called from every context, which might lead to false illusion that it could be called from everywhere without any restrictions. This is however not true - a call to printk() could deadlock if called from scheduler code (namely from schedule(), wake_up(), etc) on runqueue lock when it tries to wake up klogd. Document this. Signed-off-by: Jiri Kosina Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- diff --git a/kernel/printk.c b/kernel/printk.c index fccacf706f5..051d27e36a6 100644 --- a/kernel/printk.c +++ b/kernel/printk.c @@ -486,6 +486,9 @@ static int have_callable_console(void) * @fmt: format string * * This is printk(). It can be called from any context. We want it to work. + * Be aware of the fact that if oops_in_progress is not set, we might try to + * wake klogd up which could deadlock on runqueue lock if printk() is called + * from scheduler code. * * We try to grab the console_sem. If we succeed, it's easy - we log the output and * call the console drivers. If we fail to get the semaphore we place the output