linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] rcu: Update rcu_preempt_deferred_qs() comments for no preemptible RCU
@ 2022-06-20  6:42 Zqiang
  2022-06-27 22:02 ` Paul E. McKenney
  0 siblings, 1 reply; 2+ messages in thread
From: Zqiang @ 2022-06-20  6:42 UTC (permalink / raw)
  To: paulmck, frederic; +Cc: rcu, linux-kernel

For no preemptible RCU, the rcu_preempt_deferred_qs() only report
expedited QS state of current CPU, since preemption does not occur
in RCU critical sections, there are no tasks insert to leaf rnp
blocked-tasks list, that is to say the tasks structure's ->rcu_blocked_node
and the leaf rnp structure's  ->blkd_tasks are always empty.

Signed-off-by: Zqiang <qiang1.zhang@intel.com>
---
 kernel/rcu/tree_plugin.h | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
index dc78726b993f..99424c2da5db 100644
--- a/kernel/rcu/tree_plugin.h
+++ b/kernel/rcu/tree_plugin.h
@@ -932,10 +932,12 @@ static bool rcu_preempt_need_deferred_qs(struct task_struct *t)
 	return false;
 }
 
-// Except that we do need to respond to a request by an expedited grace
-// period for a quiescent state from this CPU.  Note that requests from
-// tasks are handled when removing the task from the blocked-tasks list
-// below.
+/*
+ * Except that we do need to respond to a request by an expedited grace
+ * period for a quiescent state from this CPU.  Note that for no preemptible
+ * RCU, since preemption does not occur in RCU critical sections, so the
+ * leaf rnp's blocked-tasks list is always empty.
+ */
 void rcu_preempt_deferred_qs(struct task_struct *t)
 {
 	struct rcu_data *rdp = this_cpu_ptr(&rcu_data);
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] rcu: Update rcu_preempt_deferred_qs() comments for no preemptible RCU
  2022-06-20  6:42 [PATCH] rcu: Update rcu_preempt_deferred_qs() comments for no preemptible RCU Zqiang
@ 2022-06-27 22:02 ` Paul E. McKenney
  0 siblings, 0 replies; 2+ messages in thread
From: Paul E. McKenney @ 2022-06-27 22:02 UTC (permalink / raw)
  To: Zqiang; +Cc: frederic, rcu, linux-kernel

On Mon, Jun 20, 2022 at 02:42:24PM +0800, Zqiang wrote:
> For no preemptible RCU, the rcu_preempt_deferred_qs() only report
> expedited QS state of current CPU, since preemption does not occur
> in RCU critical sections, there are no tasks insert to leaf rnp
> blocked-tasks list, that is to say the tasks structure's ->rcu_blocked_node
> and the leaf rnp structure's  ->blkd_tasks are always empty.
> 
> Signed-off-by: Zqiang <qiang1.zhang@intel.com>

Good catch -- that comment is quite misleading.

Is the wordsmithed version shown below OK?

							Thanx, Paul

------------------------------------------------------------------------

commit 5ddf65777c8d0f60ff9137eef3b23dd4c77e6108
Author: Zqiang <qiang1.zhang@intel.com>
Date:   Mon Jun 20 14:42:24 2022 +0800

    rcu: Update rcu_preempt_deferred_qs() comments for !PREEMPT kernels
    
    In non-premptible kernels, tasks never do context switches within
    RCU read-side critical sections.  Therefore, in such kernels, each
    leaf rcu_node structure's ->blkd_tasks list will always be empty.
    The comment on the non-preemptible version of rcu_preempt_deferred_qs()
    confuses this point, so this commit therefore fixes it.
    
    Signed-off-by: Zqiang <qiang1.zhang@intel.com>
    Signed-off-by: Paul E. McKenney <paulmck@kernel.org>

diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
index 86772c95ed0ae..4152816dd29f6 100644
--- a/kernel/rcu/tree_plugin.h
+++ b/kernel/rcu/tree_plugin.h
@@ -932,10 +932,13 @@ static notrace bool rcu_preempt_need_deferred_qs(struct task_struct *t)
 	return false;
 }
 
-// Except that we do need to respond to a request by an expedited grace
-// period for a quiescent state from this CPU.  Note that requests from
-// tasks are handled when removing the task from the blocked-tasks list
-// below.
+// Except that we do need to respond to a request by an expedited
+// grace period for a quiescent state from this CPU.  Note that in
+// non-preemptible kernels, there can be no context switches within RCU
+// read-side critical sections, which in turn means that the leaf rcu_node
+// structure's blocked-tasks list is always empty.  is therefore no need to
+// actually check it.  Instead, a quiescent state from this CPU suffices,
+// and this function is only called from such a quiescent state.
 notrace void rcu_preempt_deferred_qs(struct task_struct *t)
 {
 	struct rcu_data *rdp = this_cpu_ptr(&rcu_data);

^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-06-27 22:04 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-20  6:42 [PATCH] rcu: Update rcu_preempt_deferred_qs() comments for no preemptible RCU Zqiang
2022-06-27 22:02 ` Paul E. McKenney

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).