rcu: Tighten up affinity and check for sysidle
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Tue, 24 Feb 2015 19:05:36 +0000 (11:05 -0800)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Fri, 27 Feb 2015 00:04:37 +0000 (16:04 -0800)
commit5871968d531f39c23a8e6c69525bb705bca52e04
tree059ed811b5da15952bcb06844ecfcb437070be6b
parent675da67f24e2d6d8df0cedf12e59085ed8bbf4e7
rcu: Tighten up affinity and check for sysidle

If the RCU grace-period kthread invoking rcu_sysidle_check_cpu()
happens to be running on the tick_do_timer_cpu initially,
then rcu_bind_gp_kthread() won't bind it.  This kthread might
then migrate before invoking rcu_gp_fqs(), which will trigger the
WARN_ON_ONCE() in rcu_sysidle_check_cpu().  This commit therefore makes
rcu_bind_gp_kthread() do the binding even if the kthread is currently
on the same CPU.  Because this incurs added overhead, this commit also
causes each RCU grace-period kthread to invoke rcu_bind_gp_kthread()
once at boot rather than at the beginning of each grace period.
And as long as rcu_bind_gp_kthread() is being modified, this commit
eliminates its #ifdef.

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