rcu: Remove restrictions on no-CBs CPUs
authorPaul E. McKenney <paul.mckenney@linaro.org>
Mon, 7 Jan 2013 21:37:42 +0000 (13:37 -0800)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Tue, 12 Mar 2013 18:17:51 +0000 (11:17 -0700)
commit34ed62461ae4970695974afb9a60ac3df0086830
treed65a582953a66ee089074fd5a57e39460d4ce2c6
parentf6161aa153581da4a3867a2d1a7caf4be19b6ec9
rcu: Remove restrictions on no-CBs CPUs

Currently, CPU 0 is constrained to not be a no-CBs CPU, and furthermore
at least one no-CBs CPU must remain online at any given time.  These
restrictions are problematic in some situations, such as cases where
all CPUs must run a real-time workload that needs to be insulated from
OS jitter and latencies due to RCU callback invocation.  This commit
therefore provides no-CBs CPUs a (very crude and energy-inefficient)
way to start and to wait for grace periods independently of the normal
RCU callback mechanisms.  This approach allows any or all of the CPUs to
be designated as no-CBs CPUs, and allows any proper subset of the CPUs
(whether no-CBs CPUs or not) to be offlined.

This commit also provides a fix for a locking bug spotted by Xie
ChanglongX <changlongx.xie@intel.com>.

Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
init/Kconfig
kernel/rcutree.c
kernel/rcutree.h
kernel/rcutree_plugin.h