提交 1492192b 编写于 作者: J Jiri Kosina 提交者: Linus Torvalds

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: NJiri Kosina <jkosina@suse.cz>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 017f021c
...@@ -486,6 +486,9 @@ static int have_callable_console(void) ...@@ -486,6 +486,9 @@ static int have_callable_console(void)
* @fmt: format string * @fmt: format string
* *
* This is printk(). It can be called from any context. We want it to work. * 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 * 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 * call the console drivers. If we fail to get the semaphore we place the output
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册