Patch "rcu-tasks: Repair RCU Tasks Trace quiescence check" has been added to the 6.6-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    rcu-tasks: Repair RCU Tasks Trace quiescence check

to the 6.6-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     rcu-tasks-repair-rcu-tasks-trace-quiescence-check.patch
and it can be found in the queue-6.6 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit f087e0400cec31ad2242487ef820bfaccca16bda
Author: Paul E. McKenney <paulmck@xxxxxxxxxx>
Date:   Mon Dec 4 09:33:29 2023 -0800

    rcu-tasks: Repair RCU Tasks Trace quiescence check
    
    [ Upstream commit 2eb52fa8900e642b3b5054c4bf9776089d2a935f ]
    
    The context-switch-time check for RCU Tasks Trace quiescence expects
    current->trc_reader_special.b.need_qs to be zero, and if so, updates
    it to TRC_NEED_QS_CHECKED.  This is backwards, because if this value
    is zero, there is no RCU Tasks Trace grace period in flight, an thus
    no need for a quiescent state.  Instead, when a grace period starts,
    this field is set to TRC_NEED_QS.
    
    This commit therefore changes the check from zero to TRC_NEED_QS.
    
    Reported-by: Steven Rostedt <rostedt@xxxxxxxxxxx>
    Signed-off-by: Paul E. McKenney <paulmck@xxxxxxxxxx>
    Tested-by: Steven Rostedt (Google) <rostedt@xxxxxxxxxxx>
    Signed-off-by: Boqun Feng <boqun.feng@xxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h
index 9ad656b28847f..6466c2f792923 100644
--- a/include/linux/rcupdate.h
+++ b/include/linux/rcupdate.h
@@ -189,9 +189,9 @@ void rcu_tasks_trace_qs_blkd(struct task_struct *t);
 	do {									\
 		int ___rttq_nesting = READ_ONCE((t)->trc_reader_nesting);	\
 										\
-		if (likely(!READ_ONCE((t)->trc_reader_special.b.need_qs)) &&	\
+		if (unlikely(READ_ONCE((t)->trc_reader_special.b.need_qs) == TRC_NEED_QS) &&	\
 		    likely(!___rttq_nesting)) {					\
-			rcu_trc_cmpxchg_need_qs((t), 0,	TRC_NEED_QS_CHECKED);	\
+			rcu_trc_cmpxchg_need_qs((t), TRC_NEED_QS, TRC_NEED_QS_CHECKED);	\
 		} else if (___rttq_nesting && ___rttq_nesting != INT_MIN &&	\
 			   !READ_ONCE((t)->trc_reader_special.b.blocked)) {	\
 			rcu_tasks_trace_qs_blkd(t);				\




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux