summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorNick Piggin <nickpiggin@yahoo.com.au>2008-07-10 17:25:35 +1000
committerLinus Torvalds <torvalds@linux-foundation.org>2008-07-10 11:13:44 -0700
commit70ff05554f91a1edda1f11684da1dbde09e2feea (patch)
tree93e5922ec3ef2c9c9537ab61cfe34ae3980180e7 /lib
parenteb6d42ea17329745d7d712d3aa3bb84ec1da9c85 (diff)
Fix PREEMPT_RCU without HOTPLUG_CPU
PREEMPT_RCU without HOTPLUG_CPU is broken. The rcu_online_cpu is called to initially populate rcu_cpu_online_map with all online CPUs when the hotplug event handler is installed, and also to populate the map with CPUs as they come online. The former case is meant to happen with and without HOTPLUG_CPU, but without HOTPLUG_CPU, the rcu_offline_cpu function is no-oped -- while it still gets called, it does not set the rcu CPU map. With a blank RCU CPU map, grace periods get to tick by completely oblivious to active RCU read side critical sections. This results in free-before-grace bugs. Fix is obvious once the problem is known. (Also, change __devinit to __cpuinit so the function gets thrown away on !HOTPLUG_CPU kernels). Signed-off-by: Nick Piggin <npiggin@suse.de> Reported-and-tested-by: Alexey Dobriyan <adobriyan@gmail.com> Acked-by: Ingo Molnar <mingo@elte.hu> Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com> [ Nick is my personal hero of the day - Linus ] Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'lib')
0 files changed, 0 insertions, 0 deletions