rcu-tasks: Move RTGS_WAIT_CBS to beginning of rcu_tasks_kthread() loop
authorPaul E. McKenney <paulmck@kernel.org>
Wed, 11 Aug 2021 16:07:44 +0000 (09:07 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 18 Nov 2021 18:16:10 +0000 (19:16 +0100)
[ Upstream commit 0db7c32ad3160ae06f497d48a74bd46a2a35e6bf ]

Early in debugging, it made some sense to differentiate the first
iteration from subsequent iterations, but now this just causes confusion.
This commit therefore moves the "set_tasks_gp_state(rtp, RTGS_WAIT_CBS)"
statement to the beginning of the "for" loop in rcu_tasks_kthread().

Reported-by: Neeraj Upadhyay <neeraju@codeaurora.org>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
kernel/rcu/tasks.h

index 806160c44b1723fe46caaf10021e795a964a9ec8..6591914af48644d4e58be3ac2b304ef2e69cad4b 100644 (file)
@@ -197,6 +197,7 @@ static int __noreturn rcu_tasks_kthread(void *arg)
         * This loop is terminated by the system going down.  ;-)
         */
        for (;;) {
+               set_tasks_gp_state(rtp, RTGS_WAIT_CBS);
 
                /* Pick up any new callbacks. */
                raw_spin_lock_irqsave(&rtp->cbs_lock, flags);
@@ -236,8 +237,6 @@ static int __noreturn rcu_tasks_kthread(void *arg)
                }
                /* Paranoid sleep to keep this from entering a tight loop */
                schedule_timeout_idle(rtp->gp_sleep);
-
-               set_tasks_gp_state(rtp, RTGS_WAIT_CBS);
        }
 }