From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
To: mt4022@columbia.edu
Cc: Thomas Gleixner <tglx@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
linux-kernel@vger.kernel.org, tz2294@columbia.edu
Subject: Re: [PATCH v2] smpboot: Run the thread function only once before parking
Date: Fri, 6 Nov 2026 11:46:14 +0100 [thread overview]
Message-ID: <20261106104614.LMF0MgmB@linutronix.de> (raw)
In-Reply-To: <20261104-smpboot-park-once-v2-1-ea28ec9fd85e@columbia.edu>
On 2026-11-04 16:58:09 [-0500], Mani Tofigh via B4 Relay wrote:
> From: Mani Tofigh <mt4022@columbia.edu>
>
> Since commit 4a3b51aab6e2 ("smpboot: Don't park the thread if work is
> pending"), smpboot_thread_fn() parks only once thread_should_run() is
> false. CPU offline waits for that with no timeout and with
> cpu_hotplug_lock held for write.
>
> When the outgoing CPU keeps receiving more packets than it can process,
> ksoftirqd always has NET_RX pending and never parks. The offline then
> waits for as long as the packets keep coming and everything that takes
> cpus_read_lock() waits with it:
I would end with a full stop and strip the backtrace. We do know what it
looks like.
> [ 41.469979] INFO: task kworker/0:1:10 blocked for more than 20 seconds.
> [ 41.470020] task:kworker/0:1 state:D stack:28392 pid:10 tgid:10 ppid:2 task_flags:0x4208060 flags:0x00080000
> [ 41.470055] Workqueue: events vmstat_shepherd
> [ 41.470077] Call Trace:
> [ 41.470082] <TASK>
> [ 41.470091] __schedule+0x10f1/0x4760
> [ 41.470175] schedule+0xd7/0x2c0
> [ 41.470189] percpu_rwsem_wait+0x1f8/0x4e0
> [ 41.470269] __percpu_down_read+0x11f/0x3e0
> [ 41.470287] cpus_read_lock+0xc1/0xd0
> [ 41.470301] vmstat_shepherd+0x22/0x2a0
> [ 41.470315] process_one_work+0x92b/0x16d0
> [ 41.470393] worker_thread+0x4e6/0xd60
> [ 41.470507] kthread+0x300/0x3e0
> [ 41.470542] ret_from_fork+0x4f0/0x6f0
> [ 41.470597] ret_from_fork_asm+0x1a/0x30
> [ 41.470623] </TASK>
> [ 41.470635] INFO: task cpuhp/3:33 blocked for more than 20 seconds.
> [ 41.470653] task:cpuhp/3 state:D stack:27976 pid:33 tgid:33 ppid:2 task_flags:0x4208040 flags:0x00080000
> [ 41.470678] Call Trace:
> [ 41.470682] <TASK>
> [ 41.470690] __schedule+0x10f1/0x4760
> [ 41.470753] schedule+0xd7/0x2c0
> [ 41.470766] schedule_timeout+0x176/0x250
> [ 41.470849] wait_for_completion+0x169/0x3b0
> [ 41.470918] kthread_park+0xff/0x180
> [ 41.470934] smpboot_park_threads+0xd5/0x160
> [ 41.470959] cpuhp_invoke_callback+0x2b0/0x1190
> [ 41.470995] cpuhp_thread_fun+0x2f8/0x6d0
> [ 41.471027] smpboot_thread_fn+0x2fb/0x8a0
> [ 41.471051] kthread+0x300/0x3e0
> [ 41.471083] ret_from_fork+0x4f0/0x6f0
> [ 41.471132] ret_from_fork_asm+0x1a/0x30
> [ 41.471154] </TASK>
>
> That commit only needs the work queued before the park request to run
> once on its own CPU. Softirqs left pending are taken over by the
> dead-CPU callbacks as before. So on a park request, run the thread
> function once if there is work and then park. With the fix, the
> offline finishes under the same load.
>
> This bug was identified and confirmed with the help of a deterministic
> hypervisor currently under development. The C reproducer below however
> hits it within about 25s.
>
> Fixes: 4a3b51aab6e2 ("smpboot: Don't park the thread if work is pending")
> Signed-off-by: Mani Tofigh <mt4022@columbia.edu>
Other than that,
Reviewed-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
> ---
> Changes in v2:
> - Use Sebastian's comment above the thread function call
> - Link to v1: https://lore.kernel.org/all/20261102-smpboot-park-once-v1-1-920282635d20@columbia.edu/
>
> Reproducer: https://github.com/manitofigh/files/blob/main/linux-repros/ksoftpark.c
Sebastian
prev parent reply other threads:[~2026-11-06 10:46 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-04 21:58 Mani Tofigh via B4 Relay
2026-11-04 23:53 ` Bradley Morgan
2026-11-06 10:46 ` Sebastian Andrzej Siewior [this message]
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=20261106104614.LMF0MgmB@linutronix.de \
--to=bigeasy@linutronix.de \
--cc=linux-kernel@vger.kernel.org \
--cc=mt4022@columbia.edu \
--cc=peterz@infradead.org \
--cc=tglx@kernel.org \
--cc=tz2294@columbia.edu \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®