rcu/nocb: Use build-time no-CBs check in rcu_pending()
authorPaul E. McKenney <paulmck@linux.ibm.com>
Tue, 21 May 2019 20:53:28 +0000 (13:53 -0700)
committerPaul E. McKenney <paulmck@linux.ibm.com>
Tue, 13 Aug 2019 21:35:49 +0000 (14:35 -0700)
Currently, rcu_pending() invokes rcu_segcblist_is_offloaded() even
in CONFIG_RCU_NOCB_CPU=n kernels, which cannot possibly be offloaded.
Given that rcu_pending() is on a fastpath, it makes sense to check for
CONFIG_RCU_NOCB_CPU=y before invoking rcu_segcblist_is_offloaded().
This commit therefore makes this change.

Signed-off-by: Paul E. McKenney <paulmck@linux.ibm.com>
kernel/rcu/tree.c

index 1493927..fb6b80a 100644 (file)
@@ -2773,7 +2773,8 @@ static int rcu_pending(void)
        /* Has RCU gone idle with this CPU needing another grace period? */
        if (!rcu_gp_in_progress() &&
            rcu_segcblist_is_enabled(&rdp->cblist) &&
-           !rcu_segcblist_is_offloaded(&rdp->cblist) &&
+           (!IS_ENABLED(CONFIG_RCU_NOCB_CPU) ||
+            !rcu_segcblist_is_offloaded(&rdp->cblist)) &&
            !rcu_segcblist_restempty(&rdp->cblist, RCU_NEXT_READY_TAIL))
                return 1;