[lkml]   [2008]   [Aug]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
SubjectRe: [PATCH tip/core/rcu] classic RCU locking and memory-barrier cleanups
Paul E. McKenney wrote:
>> Right now, I try to understand the current code first - and some of it
>> doesn't make much sense.
>> There are three per-cpu lists:
>> ->nxt
>> ->cur
>> ->done.
>> Obviously, there must be a quiescent state between cur and done.
>> But why does the code require a quiescent state between nxt and cur?
>> I think that's superflous. The only thing that is required is that all cpus
>> have moved their callbacks from nxt to cur. That doesn't need a quiescent
>> state, this operation could be done in hard interrupt as well.
> The deal is that we have to put incoming callbacks somewhere while
> the batch in ->cur waits for an RCU grace period. That somewhere is
> ->nxt. So to be painfully pedantic, the callbacks in ->nxt are not
> waiting for an RCU grace period. Instead, they are waiting for the
> callbacks in ->cur to get out of the way.
Ok, thanks.
If I understand the new code in tip/rcu correctly, you have rewritten
that block anyway.

I'll try to implement my proposal - on paper, it looks far simpler than
the current code.
On the one hand, a state machine that keeps track of a global state:
- collect the callbacks in a nxt list.
- wait for quiecent
- destroy the callbacks in the nxt list.
(actually, there will be 5 states, 2 additional for "start the next rcu
cycle immediately")

On the other hand a cpu bitmap that keeps track of the cpus that have
completed the work that must be done after a state change.
The last cpu advances the global state.

The state machine could be seq_lock protected, the cpu bitmap could be
either hierarchical or flat or for uniprocessor just a nop.

Do you have any statistics about rcu_check_callbacks? On my single-cpu
system, around 2/3 of the calls are from "normal" context, i.e.
rcu_qsctr_inc() is called.


 \ /
  Last update: 2008-08-18 11:17    [W:0.073 / U:1.408 seconds]
©2003-2018 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site