aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/rcutree_plugin.h
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/rcutree_plugin.h')
-rw-r--r--kernel/rcutree_plugin.h12
1 files changed, 9 insertions, 3 deletions
diff --git a/kernel/rcutree_plugin.h b/kernel/rcutree_plugin.h
index 18d9c91f25d1..d81e3856fa91 100644
--- a/kernel/rcutree_plugin.h
+++ b/kernel/rcutree_plugin.h
@@ -1630,17 +1630,23 @@ module_param(rcu_idle_lazy_gp_delay, int, 0644);
1630extern int tick_nohz_enabled; 1630extern int tick_nohz_enabled;
1631 1631
1632/* 1632/*
1633 * Try to advance callbacks for all flavors of RCU on the current CPU. 1633 * Try to advance callbacks for all flavors of RCU on the current CPU, but
1634 * Afterwards, if there are any callbacks ready for immediate invocation, 1634 * only if it has been awhile since the last time we did so. Afterwards,
1635 * return true. 1635 * if there are any callbacks ready for immediate invocation, return true.
1636 */ 1636 */
1637static bool rcu_try_advance_all_cbs(void) 1637static bool rcu_try_advance_all_cbs(void)
1638{ 1638{
1639 bool cbs_ready = false; 1639 bool cbs_ready = false;
1640 struct rcu_data *rdp; 1640 struct rcu_data *rdp;
1641 struct rcu_dynticks *rdtp = this_cpu_ptr(&rcu_dynticks);
1641 struct rcu_node *rnp; 1642 struct rcu_node *rnp;
1642 struct rcu_state *rsp; 1643 struct rcu_state *rsp;
1643 1644
1645 /* Exit early if we advanced recently. */
1646 if (jiffies == rdtp->last_advance_all)
1647 return 0;
1648 rdtp->last_advance_all = jiffies;
1649
1644 for_each_rcu_flavor(rsp) { 1650 for_each_rcu_flavor(rsp) {
1645 rdp = this_cpu_ptr(rsp->rda); 1651 rdp = this_cpu_ptr(rsp->rda);
1646 rnp = rdp->mynode; 1652 rnp = rdp->mynode;