From: Guanghui Feng <guanghuifeng@linux.alibaba.com>
To: pmladek@suse.com, senozhatsky@chromium.org, rostedt@goodmis.org,
john.ogness@linutronix.de, keescook@chromium.org,
anton@enomsg.org, ccross@android.com, tony.luck@intel.com,
linux-kernel@vger.kernel.org
Cc: baolin.wang@linux.alibaba.com, yaohongbo@linux.alibaba.com,
zhangliguang@linux.alibaba.com, zhuo.song@linux.alibaba.com
Subject: [PATCH] printk: fix softlockup/rcu stall warning without setting CONFIG_PREEMPTION
Date: Sat, 12 Feb 2022 21:27:42 +0800 [thread overview]
Message-ID: <1644672462-20793-1-git-send-email-guanghuifeng@linux.alibaba.com> (raw)
If without setting CONFIG_PREEMPTION, and there are too many messages
only in one cpu which will set console_may_schedule to 0 without cond_resched,
we will find softlockup/rcu stall warning. Although the timer interrupt
can be raised in the routine of console_unlock, the irq interrupt return
to user/kernel will't schedule other tasks(without setting CONFIG_PREEMPTION).
So I add need_resched() for cond_schedule to avoid it.
Call trace:
console_unlock+0x220/0x420
vprintk_emit+0x17c/0x1ac
vprintk_default+0x3c/0x44
vprintk+0x38/0x70
printk+0x64/0x88
dump_task.part.0+0xc4/0xe0
dump_task+0x70/0x74
dump_tasks+0x78/0x90
dump_global_header+0xcc/0xe8
oom_kill_process+0x258/0x274
out_of_memory.part.0+0xb0/0x33c
out_of_memory+0x4c/0xa0
__alloc_pages_may_oom+0x11c/0x1a0
__alloc_pages_slowpath.constprop.0+0x4c0/0x75c
__alloc_pages_nodemask+0x2b4/0x310
alloc_pages_current+0x8c/0x140
get_zeroed_page+0x20/0x50
__pud_alloc+0x40/0x190
copy_pud_range+0x264/0x280
copy_page_range+0xe8/0x204
dup_mmap+0x334/0x434
dup_mm+0x64/0x11c
copy_process+0x5e0/0x11a0
kernel_clone+0x94/0x364
__do_sys_clone+0x54/0x80
__arm64_sys_clone+0x24/0x30
el0_svc_common.constprop.0+0x7c/0x210
do_el0_svc+0x74/0x90
el0_svc+0x24/0x60
el0_sync_handler+0xa8/0xb0
el0_sync+0x140/0x180
Signed-off-by: Guanghui Feng <guanghuifeng@linux.alibaba.com>
---
kernel/printk/printk.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
index 82abfaf..54b6cf2 100644
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
@@ -2716,7 +2716,11 @@ void console_unlock(void)
if (handover)
return;
+#ifndef CONFIG_PREEMPTION
+ if (do_cond_resched || need_resched())
+#else
if (do_cond_resched)
+#endif
cond_resched();
}
--
1.8.3.1
next reply other threads:[~2022-02-12 13:28 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-12 13:27 Guanghui Feng [this message]
2022-02-14 3:06 ` [PATCH] printk: fix softlockup/rcu stall warning without setting CONFIG_PREEMPTION Sergey Senozhatsky
2022-02-15 16:23 ` Petr Mladek
2022-02-14 8:26 ` [printk] 94fb1f214c: BUG:sleeping_function_called_from_invalid_context_at_kernel/printk/printk.c kernel test robot
2022-02-14 8:26 ` kernel test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1644672462-20793-1-git-send-email-guanghuifeng@linux.alibaba.com \
--to=guanghuifeng@linux.alibaba.com \
--cc=anton@enomsg.org \
--cc=baolin.wang@linux.alibaba.com \
--cc=ccross@android.com \
--cc=john.ogness@linutronix.de \
--cc=keescook@chromium.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pmladek@suse.com \
--cc=rostedt@goodmis.org \
--cc=senozhatsky@chromium.org \
--cc=tony.luck@intel.com \
--cc=yaohongbo@linux.alibaba.com \
--cc=zhangliguang@linux.alibaba.com \
--cc=zhuo.song@linux.alibaba.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.