Messages in this thread | | | Date | Sat, 15 Aug 2009 09:51:53 -0700 | From | "Paul E. McKenney" <> | Subject | [PATCH -tip/core/rcu 1/6] Cleanups and fixes for RCU in face of heavy CPU-hotplug stress |
| |
This patch set provides the following cleanups and fixes for RCU in workloads that involve lots of CPU hotplugging. Ingo, please reset core/rcu to 240ebbf before applying these patches.
o Split Hierarchical RCU initialization into boot-time and CPU-hotplug pieces, so that other CPUs never see the data structures in the act of being stitched together.
o Introduce a cpu_notifier() that works as does the current hotcpu_notifier(), but also notifies during boot time even if !HOTPLUG_CPU.
o Make RCU use the new cpu_notifier() to simplify hotplug code and reduce the number of notifiers in use. (This also fixes the problem Ingo and Hugh found.)
o Preemptable RCU had a bug due to its overly clever attempt to move counts from CPUs going offline. This is "unsafe at any speed", so remove the cleverness.
o Since offline CPUs now can have non-zero counts, they must now be included in the tracing.
o Fix typo in preemptable RCU's rcu_irq_enter() comment submitted by Josh Triplett.
These pass tests combining rcutorture and continuous CPU-hotplug operations, in other words, no sleeping between successive CPU-hotplug operations. This set does not fix the bug involving deadlocks through rcutorture, kthread_stop(), and migration threads. However, this bug does not affect production systems, so should not stand in the way of applying these patches.
Thanx, Paul
b/include/linux/cpu.h | 18 +++++++++----- b/kernel/rcupdate.c | 16 ++++++++++++- b/kernel/rcupreempt.c | 25 +------------------- b/kernel/rcupreempt_trace.c | 6 ++-- b/kernel/rcutree.c | 54 ++++++++++++++++++++++++++------------------ kernel/rcupreempt.c | 12 +-------- kernel/rcutree.c | 18 ++++---------- 7 files changed, 72 insertions(+), 77 deletions(-)
| |