aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorJiri Kosina <jkosina@suse.cz>2007-07-16 02:41:51 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-07-16 12:05:52 -0400
commit1492192b4a0bb84dd9b792cc0bd30583220a28a7 (patch)
tree54763778f2c1ed69ae967022dd940b4bcc040120 /kernel
parent017f021c7e5fe3f82ccc5cbb7b1750e66e00f527 (diff)
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 <jkosina@suse.cz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/printk.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/kernel/printk.c b/kernel/printk.c
index fccacf706f53..051d27e36a6c 100644
--- a/kernel/printk.c
+++ b/kernel/printk.c
@@ -486,6 +486,9 @@ static int have_callable_console(void)
486 * @fmt: format string 486 * @fmt: format string
487 * 487 *
488 * This is printk(). It can be called from any context. We want it to work. 488 * This is printk(). It can be called from any context. We want it to work.
489 * Be aware of the fact that if oops_in_progress is not set, we might try to
490 * wake klogd up which could deadlock on runqueue lock if printk() is called
491 * from scheduler code.
489 * 492 *
490 * We try to grab the console_sem. If we succeed, it's easy - we log the output and 493 * We try to grab the console_sem. If we succeed, it's easy - we log the output and
491 * call the console drivers. If we fail to get the semaphore we place the output 494 * call the console drivers. If we fail to get the semaphore we place the output