From: Bert Karwatzki <spasswolf@web.de>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Bert Karwatzki <spasswolf@web.de>,
Stuart Hayes <stuart.w.hayes@gmail.com>,
linux-kernel@vger.kernel.org, linux-next@vger.kernel.org,
Tejun Heo <tj@kernel.org>
Subject: Re: hung tasks on shutdown in linux-next-202409{20,23,24,25}
Date: Sun, 29 Sep 2024 12:52:02 +0200 [thread overview]
Message-ID: <20240929105203.4637-1-spasswolf@web.de> (raw)
In-Reply-To: a48564f002b31cb1a8db7680729aac91bc3d3b6b.camel@web.de
Summary: The introduction of async reboot in commit 8064952c6504
("driver core: shut down devices asynchronously") leads to frequent hangs on
shutdown even after commit 4f2c346e6216 ("driver core: fix async device shutdown hang")
is introduced.
I did some further experimenting (and lots of reboots ...) and found out that
the bug is preemption related, for me it only occurs when using CONFIG_PREEMPT=y
or CONFIG_PREEMPT_RT=y. When using CONFIG_PREEMPT_NONE=y or
CONFIG_PREEMPT_VOLUNTARY=y everything works fine.
Test results (linux-next-20240925):
PREEMPT_NONE 20 reboots, no fail
PREEMPT_VOLUNTARY 20 reboots, no fail
PREEMPT 3 reboots, 4th reboot failed
PREEMPT_RT 2 reboots, 3rd reboot failed
The behaviour can be improved by increasing the number of min_active items
in the async workqueue:
diff --git a/kernel/async.c b/kernel/async.c
index 4c3e6a44595f..83e9267c61e7 100644
--- a/kernel/async.c
+++ b/kernel/async.c
@@ -358,5 +358,5 @@ void __init async_init(void)
*/
async_wq = alloc_workqueue("async", WQ_UNBOUND, 0);
BUG_ON(!async_wq);
- workqueue_set_min_active(async_wq, WQ_DFL_ACTIVE);
+ workqueue_set_min_active(async_wq, WQ_UNBOUND_MAX_ACTIVE);
}
With this I took 11 reboots to get a hang.
I tried increasing WQ_MAX_ACTIVE, too:
diff --git a/include/linux/workqueue.h b/include/linux/workqueue.h
index 59c2695e12e7..314f554b45df 100644
--- a/include/linux/workqueue.h
+++ b/include/linux/workqueue.h
@@ -412,7 +412,7 @@ enum wq_flags {
};
enum wq_consts {
- WQ_MAX_ACTIVE = 512, /* I like 512, better ideas? */
+ WQ_MAX_ACTIVE = 1024, /* 1024 for async shutdown with preempt{full,rt}*/
WQ_UNBOUND_MAX_ACTIVE = WQ_MAX_ACTIVE,
WQ_DFL_ACTIVE = WQ_MAX_ACTIVE / 2,
With this (and the first patch) I can get 20 clean reboots even when using CONFIG_PREEMPT=y.
I have not yet tested CONFIG_PREEMPT_RT=y with this.
Bert Karwatzki
next reply other threads:[~2024-09-29 10:52 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-29 10:52 Bert Karwatzki [this message]
-- strict thread matches above, loose matches on Subject: below --
2024-09-29 10:53 hung tasks on shutdown in linux-next-202409{20,23,24,25} Bert Karwatzki
2024-09-30 21:11 ` stuart hayes
2024-09-25 21:37 Bert Karwatzki
2024-09-25 21:48 ` stuart hayes
2024-09-25 11:40 Bert Karwatzki
2024-09-25 12:09 ` Greg Kroah-Hartman
2024-09-25 19:15 ` Bert Karwatzki
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=20240929105203.4637-1-spasswolf@web.de \
--to=spasswolf@web.de \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-next@vger.kernel.org \
--cc=stuart.w.hayes@gmail.com \
--cc=tj@kernel.org \
/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.