From: Nicholas Piggin <npiggin@gmail.com>
To: Tejun Heo <tj@kernel.org>
Cc: Nicholas Piggin <npiggin@gmail.com>,
"Paul E . McKenney" <paulmck@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Lai Jiangshan <jiangshanlai@gmail.com>,
Srikar Dronamraju <srikar@linux.vnet.ibm.com>,
linux-kernel@vger.kernel.org
Subject: [PATCH 3/4] stop_machine: Rearrange multi_cpu_stop state machine loop
Date: Tue, 25 Jun 2024 21:42:46 +1000 [thread overview]
Message-ID: <20240625114249.289014-4-npiggin@gmail.com> (raw)
In-Reply-To: <20240625114249.289014-1-npiggin@gmail.com>
More clearly separate the state-machine progress case from the
non-progress case.
Move stop_machine_yield() and rcu_momentary_dyntick_idle() calls
to the non-progress case like touch_nmi_watchdog(), rather than
always calling them, since there is no reason to yield or touch
watchdogs if the state machine progressed.
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
kernel/stop_machine.c | 25 +++++++++++++++----------
1 file changed, 15 insertions(+), 10 deletions(-)
diff --git a/kernel/stop_machine.c b/kernel/stop_machine.c
index cedb17ba158a..1e5c4702e36c 100644
--- a/kernel/stop_machine.c
+++ b/kernel/stop_machine.c
@@ -225,8 +225,6 @@ static int multi_cpu_stop(void *data)
/* Simple state machine */
do {
- /* Chill out and ensure we re-read multi_stop_state. */
- stop_machine_yield(cpumask);
newstate = READ_ONCE(msdata->state);
if (newstate != curstate) {
curstate = newstate;
@@ -243,15 +241,22 @@ static int multi_cpu_stop(void *data)
break;
}
ack_state(msdata);
- } else if (curstate > MULTI_STOP_PREPARE) {
- /*
- * At this stage all other CPUs we depend on must spin
- * in the same loop. Any reason for hard-lockup should
- * be detected and reported on their side.
- */
- touch_nmi_watchdog();
+
+ } else {
+ /* No state change, chill out */
+ stop_machine_yield(cpumask);
+ if (curstate > MULTI_STOP_PREPARE) {
+ /*
+ * At this stage all other CPUs we depend on
+ * must spin in the same loop. Any reason for
+ * hard-lockup should be detected and reported
+ * on their side.
+ */
+ touch_nmi_watchdog();
+ }
+ rcu_momentary_dyntick_idle();
}
- rcu_momentary_dyntick_idle();
+
} while (curstate != MULTI_STOP_EXIT);
local_irq_restore(flags);
--
2.45.1
next prev parent reply other threads:[~2024-06-25 11:43 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-25 11:42 [PATCH 0/4] Fix scalability problem in workqueue watchdog touch caused by stop_machine Nicholas Piggin
2024-06-25 11:42 ` [PATCH 1/4] workqueue: wq_watchdog_touch is always called with valid CPU Nicholas Piggin
2024-06-25 11:42 ` [PATCH 2/4] workqueue: Improve scalability of workqueue watchdog touch Nicholas Piggin
2024-06-25 16:57 ` Tejun Heo
2024-06-26 0:52 ` Nicholas Piggin
2024-06-27 12:16 ` Hillf Danton
2024-06-27 12:42 ` Waiman Long
2024-06-25 11:42 ` Nicholas Piggin [this message]
2024-06-25 11:42 ` [PATCH 4/4] stop_machine: Add a delay between multi_cpu_stop touching watchdogs Nicholas Piggin
2024-06-25 14:53 ` [PATCH 0/4] Fix scalability problem in workqueue watchdog touch caused by stop_machine Paul E. McKenney
2024-06-26 0:57 ` Nicholas Piggin
2024-09-25 5:25 ` Srikar Dronamraju
2024-06-26 12:58 ` Michal Koutný
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=20240625114249.289014-4-npiggin@gmail.com \
--to=npiggin@gmail.com \
--cc=jiangshanlai@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=paulmck@kernel.org \
--cc=peterz@infradead.org \
--cc=srikar@linux.vnet.ibm.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.