[PATCH tip/core/rcu 0/3] Cleanups/bugfixes for large systems andTREE_PREEMPT_RCU

From: Paul E. McKenney
Date: Fri Sep 18 2009 - 12:50:04 EST


This set of patches does some cleanups and fixes a bug that prevents
TREE_PREEMPT_RCU from running reliably on large systems (more than
64 CPUs, or on 32-bit systems, more than 32 CPUs). The patches are
as follows:

1. Add WARN_ON_ONCE() consistency checks to catch bugs. These
are all on slowpaths, so are appropriate for production use.

2. Apply the results of a code walkthrough of rcutree_plugin.h.
This includes a fix for a theoretical race that could result in
excessively long RCU grace periods, or perhaps even hangs/OOMs.

3. Fix a bug introduced in a bugfix commit #de078d875 that caused
large systems to only partially initialize the fields in the
rcu_node tree. TREE_RCU doesn't care about any of these fields,
which explains why only TREE_PREEMPT_RCU was broken.

With these fixes, large systems using TREE_PREEMPT_RCU pass moderate
rcutorture runs (but with Josh Triplett's mods that force frequent
preemption within RCU read-side critical sections). I am sure that
there are more bugs, but these fixes get things much closer.

b/kernel/rcutree.c | 13 +++++++++----
b/kernel/rcutree_plugin.h | 21 ++++++++++++++-------
kernel/rcutree.c | 38 +++++++++-----------------------------
kernel/rcutree_plugin.h | 16 +++++++++-------
4 files changed, 41 insertions(+), 47 deletions(-)
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/