From: xu xin <xu.xin16@xxxxxxxxxx> When we're in the unpreemptible context on the same cpu with which the thread of console locates on, we should ignore this console for pr_flush, because it's a vain and always lead to timeout until the console thread get cpu resource. Fixes: e65be5f4dc3ed("printk: Update John Ogness' printk series") Signed-off-by: xu xin <xu.xin16@xxxxxxxxxx> Cc: Zhang Yunkai <zhang.yunkai@xxxxxxxxxx> --- kernel/printk/printk.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c index 7f27cfee283e..faab85dd4439 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -3735,6 +3735,14 @@ bool pr_flush(int timeout_ms, bool reset_on_progress) diff = 0; for_each_console(con) { + /* + * When we're in the unpreemptible context on the same cpu + * with which the thread of console locates on, we should + * ignore this console, because it's a vain. + */ + if (!preemptible() && con->thread && + task_cpu(con->thread) == smp_processor_id()) + continue; if (!(con->flags & CON_ENABLED)) continue; printk_seq = read_console_seq(con); -- 2.15.2