mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
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

      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®