diff options
author | Paul E. McKenney <paul.mckenney@linaro.org> | 2012-01-23 12:41:26 -0800 |
---|---|---|
committer | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2012-02-21 09:06:03 -0800 |
commit | c0d6d01bffdce19fa19baad6cb8cc3eed7bfd6f5 (patch) | |
tree | ea4c20ddc87b94d7bef2402fe6dbe3186be263c2 /kernel/rcutree_plugin.h | |
parent | 24cd7fd0eaa0d9f5e197ff77a83b006a86696068 (diff) | |
download | blackbird-op-linux-c0d6d01bffdce19fa19baad6cb8cc3eed7bfd6f5.tar.gz blackbird-op-linux-c0d6d01bffdce19fa19baad6cb8cc3eed7bfd6f5.zip |
rcu: Check for illegal use of RCU from offlined CPUs
Although it is legal to use RCU during early boot, it is anything
but legal to use RCU at runtime from an offlined CPU. After all, RCU
explicitly ignores offlined CPUs. This commit therefore adds checks
for runtime use of RCU from offlined CPUs.
These checks are not perfect, in particular, they can be subverted
through use of things like rcu_dereference_raw(). Note that it is not
possible to put checks in rcu_read_lock() and friends due to the fact
that these primitives are used in code that might be used under either
RCU or lock-based protection, which means that checking rcu_read_lock()
gets you fat piles of false positives.
Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'kernel/rcutree_plugin.h')
-rw-r--r-- | kernel/rcutree_plugin.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/kernel/rcutree_plugin.h b/kernel/rcutree_plugin.h index aa93b074bb2f..cecea84f4f3f 100644 --- a/kernel/rcutree_plugin.h +++ b/kernel/rcutree_plugin.h @@ -1946,6 +1946,7 @@ void synchronize_sched_expedited(void) /* Note that atomic_inc_return() implies full memory barrier. */ firstsnap = snap = atomic_inc_return(&sync_sched_expedited_started); get_online_cpus(); + WARN_ON_ONCE(cpu_is_offline(smp_processor_id())); /* * Each pass through the following loop attempts to force a |