rcu: RCU_FAST_NO_HZ detection of callback adoption
authorPaul E. McKenney <paul.mckenney@linaro.org>
Fri, 4 May 2012 15:31:53 +0000 (08:31 -0700)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Thu, 7 Jun 2012 03:43:27 +0000 (20:43 -0700)
In the present implementations of CPU hotplug, the outgoing CPU is
guaranteed to run its stop-machine process on the way out, which
will guarantee that RCU_FAST_NO_HZ forces the CPU out of dyntick-idle
mode.

However, new versions of CPU hotplug might not work this way.  This
commit therefore removes this design constraint by explicitly notifying
CPUs when they adopt non-lazy RCU callbacks.

Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Tested-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Tested-by: Pascal Chapperon <pascal.chapperon@wanadoo.fr>
kernel/rcutree.c

index 0da7b88d92d0a599242e8dcf70ab566d3e23b687..3b0f1337f75b93e9c320a97fa7117c7c09e5599b 100644 (file)
@@ -1397,6 +1397,8 @@ static void rcu_adopt_orphan_cbs(struct rcu_state *rsp)
        rdp->qlen_lazy += rsp->qlen_lazy;
        rdp->qlen += rsp->qlen;
        rdp->n_cbs_adopted += rsp->qlen;
+       if (rsp->qlen_lazy != rsp->qlen)
+               rcu_idle_count_callbacks_posted();
        rsp->qlen_lazy = 0;
        rsp->qlen = 0;