Patch "rcu: Fix existing exp request check in sync_sched_exp_online_cleanup()" has been added to the 5.4-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: Fix existing exp request check in sync_sched_exp_online_cleanup()

to the 5.4-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-fix-existing-exp-request-check-in-sync_sched_exp.patch
and it can be found in the queue-5.4 subdirectory.

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



commit fcae45b9a940a7ac037f104acb80da97bb804bbf
Author: Neeraj Upadhyay <neeraju@xxxxxxxxxxxxxx>
Date:   Wed Aug 18 13:34:00 2021 +0530

    rcu: Fix existing exp request check in sync_sched_exp_online_cleanup()
    
    [ Upstream commit f0b2b2df5423fb369ac762c77900bc7765496d58 ]
    
    The sync_sched_exp_online_cleanup() checks to see if RCU needs
    an expedited quiescent state from the incoming CPU, sending it
    an IPI if so. Before sending IPI, it checks whether expedited
    qs need has been already requested for the incoming CPU, by
    checking rcu_data.cpu_no_qs.b.exp for the current cpu, on which
    sync_sched_exp_online_cleanup() is running. This works for the
    case where incoming CPU is same as self. However, for the case
    where incoming CPU is different from self, expedited request
    won't get marked, which can potentially delay reporting of
    expedited quiescent state for the incoming CPU.
    
    Fixes: e015a3411220 ("rcu: Avoid self-IPI in sync_sched_exp_online_cleanup()")
    Signed-off-by: Neeraj Upadhyay <neeraju@xxxxxxxxxxxxxx>
    Signed-off-by: Paul E. McKenney <paulmck@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/kernel/rcu/tree_exp.h b/kernel/rcu/tree_exp.h
index df90d4d7ad2e2..4c4d7683a4e5b 100644
--- a/kernel/rcu/tree_exp.h
+++ b/kernel/rcu/tree_exp.h
@@ -738,7 +738,7 @@ static void sync_sched_exp_online_cleanup(int cpu)
 	my_cpu = get_cpu();
 	/* Quiescent state either not needed or already requested, leave. */
 	if (!(READ_ONCE(rnp->expmask) & rdp->grpmask) ||
-	    __this_cpu_read(rcu_data.cpu_no_qs.b.exp)) {
+	    rdp->cpu_no_qs.b.exp) {
 		put_cpu();
 		return;
 	}



[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