On Mon, Aug 24, 2009 at 09:21:59AM +0200, Peter Zijlstra wrote:
Longer term, CONFIG_PREEMPT will imply CONFIG_TREE_PREEMPT_RCU and
!CONFIG_PREEMPT will imply CONFIG_TREE_RCU. This will reduce the
number of combinations in need of testing. So then the question is
"what does call_rcu_preempt() mean in !CONFIG_PREEMPT"?
If we permit things like mutex_lock(), we have the possibility of
indefinitely extended RCU read-side critical sections, which leads us to:
This is in fact what SRCU does. Of course, it also requires
that the return value from rcu_preempt_read_lock() be passed into
rcu_preempt_read_unlock() (AKA srcu_read_lock() and srcu_read_unlock()),
in order to handle the case where there are a number of nested SRCU
read-side critical sections with different domains. I suppose that we
could instead dynamically allocate space for this information, but...
The other thing in -tip for this purpose is synchronize_rcu_expedited().
I would very much appreciate that!!! My next patch set (hopefully later
today Pacific time) will fix CPU hotplug for the single-node-tree case,
with full support later this week.
Thanx, Paul
--