From: neeraj.upadhyay@kernel.org
To: rcu@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, kernel-team@meta.com,
rostedt@goodmis.org, paulmck@kernel.org,
neeraj.upadhyay@kernel.org, neeraj.upadhyay@amd.com,
boqun.feng@gmail.com, joel@joelfernandes.org, urezki@gmail.com,
frederic@kernel.org, Valentin Schneider <vschneid@redhat.com>
Subject: [PATCH rcu 17/26] rcu: Rename rcu_dynticks_in_eqs_since() into rcu_watching_snap_stopped_since()
Date: Fri, 16 Aug 2024 09:32:32 +0530 [thread overview]
Message-ID: <20240816040241.17776-17-neeraj.upadhyay@kernel.org> (raw)
In-Reply-To: <20240816040030.GA16986@neeraj.linux>
From: Valentin Schneider <vschneid@redhat.com>
The context_tracking.state RCU_DYNTICKS subvariable has been renamed to
RCU_WATCHING, the dynticks prefix can go.
While at it, this helper is only meant to be called after failing an
earlier call to rcu_watching_snap_in_eqs(), document this in the comments
and add a WARN_ON_ONCE() for good measure.
Signed-off-by: Valentin Schneider <vschneid@redhat.com>
Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Neeraj Upadhyay <neeraj.upadhyay@kernel.org>
---
.../Tree-RCU-Memory-Ordering.rst | 2 +-
kernel/rcu/tree.c | 23 ++++++++++++++-----
kernel/rcu/tree_exp.h | 2 +-
3 files changed, 19 insertions(+), 8 deletions(-)
diff --git a/Documentation/RCU/Design/Memory-Ordering/Tree-RCU-Memory-Ordering.rst b/Documentation/RCU/Design/Memory-Ordering/Tree-RCU-Memory-Ordering.rst
index 2d7036ad7476..7163d0def34e 100644
--- a/Documentation/RCU/Design/Memory-Ordering/Tree-RCU-Memory-Ordering.rst
+++ b/Documentation/RCU/Design/Memory-Ordering/Tree-RCU-Memory-Ordering.rst
@@ -150,7 +150,7 @@ This case is handled by calls to the strongly ordered
is invoked within ``rcu_dynticks_eqs_enter()`` at idle-entry
time and within ``rcu_dynticks_eqs_exit()`` at idle-exit time.
The grace-period kthread invokes first ``ct_rcu_watching_cpu_acquire()``
-(preceded by a full memory barrier) and ``rcu_dynticks_in_eqs_since()``
+(preceded by a full memory barrier) and ``rcu_watching_snap_stopped_since()``
(both of which rely on acquire semantics) to detect idle CPUs.
+-----------------------------------------------------------------------+
diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
index 73516d76b70a..93570cb5e99e 100644
--- a/kernel/rcu/tree.c
+++ b/kernel/rcu/tree.c
@@ -308,12 +308,20 @@ static bool rcu_watching_snap_in_eqs(int snap)
return !(snap & CT_RCU_WATCHING);
}
-/*
- * Return true if the CPU corresponding to the specified rcu_data
- * structure has spent some time in an extended quiescent state since
- * rcu_dynticks_snap() returned the specified snapshot.
+/**
+ * rcu_watching_snap_stopped_since() - Has RCU stopped watching a given CPU
+ * since the specified @snap?
+ *
+ * @rdp: The rcu_data corresponding to the CPU for which to check EQS.
+ * @snap: rcu_watching snapshot taken when the CPU wasn't in an EQS.
+ *
+ * Returns true if the CPU corresponding to @rdp has spent some time in an
+ * extended quiescent state since @snap. Note that this doesn't check if it
+ * /still/ is in an EQS, just that it went through one since @snap.
+ *
+ * This is meant to be used in a loop waiting for a CPU to go through an EQS.
*/
-static bool rcu_dynticks_in_eqs_since(struct rcu_data *rdp, int snap)
+static bool rcu_watching_snap_stopped_since(struct rcu_data *rdp, int snap)
{
/*
* The first failing snapshot is already ordered against the accesses
@@ -323,6 +331,9 @@ static bool rcu_dynticks_in_eqs_since(struct rcu_data *rdp, int snap)
* performed by the remote CPU prior to entering idle and therefore can
* rely solely on acquire semantics.
*/
+ if (WARN_ON_ONCE(rcu_watching_snap_in_eqs(snap)))
+ return true;
+
return snap != ct_rcu_watching_cpu_acquire(rdp->cpu);
}
@@ -815,7 +826,7 @@ static int rcu_implicit_dynticks_qs(struct rcu_data *rdp)
* read-side critical section that started before the beginning
* of the current RCU grace period.
*/
- if (rcu_dynticks_in_eqs_since(rdp, rdp->dynticks_snap)) {
+ if (rcu_watching_snap_stopped_since(rdp, rdp->dynticks_snap)) {
trace_rcu_fqs(rcu_state.name, rdp->gp_seq, rdp->cpu, TPS("dti"));
rcu_gpnum_ovf(rnp, rdp);
return 1;
diff --git a/kernel/rcu/tree_exp.h b/kernel/rcu/tree_exp.h
index 137559c84309..48ad8b868d83 100644
--- a/kernel/rcu/tree_exp.h
+++ b/kernel/rcu/tree_exp.h
@@ -400,7 +400,7 @@ static void __sync_rcu_exp_select_node_cpus(struct rcu_exp_work *rewp)
unsigned long mask = rdp->grpmask;
retry_ipi:
- if (rcu_dynticks_in_eqs_since(rdp, rdp->exp_dynticks_snap)) {
+ if (rcu_watching_snap_stopped_since(rdp, rdp->exp_dynticks_snap)) {
mask_ofl_test |= mask;
continue;
}
--
2.40.1
next prev parent reply other threads:[~2024-08-16 4:05 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-16 4:00 [PATCH rcu 0/26] Context tracking updates for v6.12 Neeraj Upadhyay
2024-08-16 4:02 ` [PATCH rcu 01/26] treewide: context_tracking: Rename CONTEXT_* into CT_STATE_* neeraj.upadhyay
2024-08-16 4:02 ` [PATCH rcu 02/26] context_tracking, rcu: Rename RCU_DYNTICKS_IDX into CT_RCU_WATCHING neeraj.upadhyay
2024-08-16 4:02 ` [PATCH rcu 03/26] context_tracking, rcu: Rename ct_dynticks() into ct_rcu_watching() neeraj.upadhyay
2024-08-16 4:02 ` [PATCH rcu 04/26] context_tracking, rcu: Rename ct_dynticks_cpu() into ct_rcu_watching_cpu() neeraj.upadhyay
2024-08-16 4:02 ` [PATCH rcu 05/26] context_tracking, rcu: Rename ct_dynticks_cpu_acquire() into ct_rcu_watching_cpu_acquire() neeraj.upadhyay
2024-08-16 4:02 ` [PATCH rcu 06/26] context_tracking, rcu: Rename struct context_tracking .dynticks_nesting into .nesting neeraj.upadhyay
2024-08-16 4:02 ` [PATCH rcu 07/26] context_tracking, rcu: Rename ct_dynticks_nesting() into ct_nesting() neeraj.upadhyay
2024-08-16 4:02 ` [PATCH rcu 08/26] context_tracking, rcu: Rename ct_dynticks_nesting_cpu() into ct_nesting_cpu() neeraj.upadhyay
2024-08-16 4:02 ` [PATCH rcu 09/26] context_tracking, rcu: Rename struct context_tracking .dynticks_nmi_nesting into .nmi_nesting neeraj.upadhyay
2024-08-16 4:02 ` [PATCH rcu 10/26] context_tracking, rcu: Rename ct_dynticks_nmi_nesting() into ct_nmi_nesting() neeraj.upadhyay
2024-08-16 4:02 ` [PATCH rcu 11/26] context_tracking, rcu: Rename ct_dynticks_nmi_nesting_cpu() into ct_nmi_nesting_cpu() neeraj.upadhyay
2024-08-16 4:02 ` [PATCH rcu 12/26] context_tracking, rcu: Rename DYNTICK_IRQ_NONIDLE into CT_NESTING_IRQ_NONIDLE neeraj.upadhyay
2024-08-16 4:02 ` [PATCH rcu 13/26] context_tracking, rcu: Rename rcu_dynticks_task*() into rcu_task*() neeraj.upadhyay
2024-08-16 4:02 ` [PATCH rcu 14/26] context_tracking, rcu: Rename rcu_dynticks_curr_cpu_in_eqs() into rcu_is_watching_curr_cpu() neeraj.upadhyay
2024-08-16 4:02 ` [PATCH rcu 15/26] rcu: Rename rcu_dynticks_eqs_online() into rcu_watching_online() neeraj.upadhyay
2024-08-16 4:02 ` [PATCH rcu 16/26] rcu: Rename rcu_dynticks_in_eqs() into rcu_watching_snap_in_eqs() neeraj.upadhyay
2024-08-16 4:02 ` neeraj.upadhyay [this message]
2024-08-16 4:02 ` [PATCH rcu 18/26] rcu: Rename rcu_dynticks_zero_in_eqs() into rcu_watching_zero_in_eqs() neeraj.upadhyay
2024-08-16 4:02 ` [PATCH rcu 19/26] rcu: Rename struct rcu_data .dynticks_snap into .watching_snap neeraj.upadhyay
2024-08-16 4:02 ` [PATCH rcu 20/26] rcu: Rename struct rcu_data .exp_dynticks_snap into .exp_watching_snap neeraj.upadhyay
2024-08-16 4:02 ` [PATCH rcu 21/26] rcu: Rename dyntick_save_progress_counter() into rcu_watching_snap_save() neeraj.upadhyay
2024-08-16 4:02 ` [PATCH rcu 22/26] rcu: Rename rcu_implicit_dynticks_qs() into rcu_watching_snap_recheck() neeraj.upadhyay
2024-08-16 4:02 ` [PATCH rcu 23/26] rcu: Rename rcu_momentary_dyntick_idle() into rcu_momentary_eqs() neeraj.upadhyay
2024-08-16 4:02 ` [PATCH rcu 24/26] rcu: Update stray documentation references to rcu_dynticks_eqs_{enter, exit}() neeraj.upadhyay
2024-08-16 4:02 ` [PATCH rcu 25/26] context_tracking, rcu: Rename rcu_dyntick trace event into rcu_watching neeraj.upadhyay
2024-08-16 4:02 ` [PATCH rcu 26/26] context_tracking: Tag context_tracking_enabled_this_cpu() __always_inline neeraj.upadhyay
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=20240816040241.17776-17-neeraj.upadhyay@kernel.org \
--to=neeraj.upadhyay@kernel.org \
--cc=boqun.feng@gmail.com \
--cc=frederic@kernel.org \
--cc=joel@joelfernandes.org \
--cc=kernel-team@meta.com \
--cc=linux-kernel@vger.kernel.org \
--cc=neeraj.upadhyay@amd.com \
--cc=paulmck@kernel.org \
--cc=rcu@vger.kernel.org \
--cc=rostedt@goodmis.org \
--cc=urezki@gmail.com \
--cc=vschneid@redhat.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 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®