]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
srcu: Expedite SRCU-fast grace periods
authorPaul E. McKenney <paulmck@kernel.org>
Tue, 3 Jun 2025 20:49:53 +0000 (13:49 -0700)
committerNeeraj Upadhyay (AMD) <neeraj.upadhyay@kernel.org>
Wed, 16 Jul 2025 04:20:57 +0000 (09:50 +0530)
Currently, SRCU-fast grace periods use synchronize_rcu() to provide the
needed ordering with readers, even given an expedited SRCU-fast grace
period, which isn't all that expedited.  This commit therefore instead
uses synchronize_rcu_expedited() if there is an expedited SRCU-fast
grace period in flight.

Of course, given an non-expedited SRCU-fast grace period blocked in
synchronize_rcu(), a later request for an expedited SRCU-fast grace
period will wait for that synchronize_rcu() to return before switching
to use of synchronize_rcu_expedited().  If this turns out to be a real
problem for a production workload, we can increase the complexity (but
likely also degrade the energy efficiency) to speed things up further.

Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Cc: Andrii Nakryiko <andrii@kernel.org>
Cc: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Neeraj Upadhyay (AMD) <neeraj.upadhyay@kernel.org>
kernel/rcu/srcutree.c

index 48047260697ecff12cca5641f7e5d509f9ad04a8..c5e8ebc493d5ee2bdad6d991aceab6df9dc1cb09 100644 (file)
@@ -502,6 +502,8 @@ static bool srcu_readers_active_idx_check(struct srcu_struct *ssp, int idx)
         */
        if (!did_gp)
                smp_mb(); /* A */
+       else if (srcu_gp_is_expedited(ssp))
+               synchronize_rcu_expedited(); /* X */
        else
                synchronize_rcu(); /* X */