* Paolo Bonzini ([email protected]) wrote:
> On 08/16/2011 05:29 AM, Mathieu Desnoyers wrote:
>>> >  +                :: (in_registry[0] == 0&&  in_registry[1] == 0) ->
>>> >  +progress:
>>> >  +#ifndef INJ_LATE_DEC
>>> >  +                        gp_futex = 0;
>>> >  +#endif
>>> >  +                        gp = !gp;
>> Shouldn't you flip the gp for both steps of synchronize_rcu ? Here, it
>> looks like you only flip gp after the reader passes through both of the
>> checks, which defeats the purpose the 2-phase grace period.
>
> Other comments are more or less trivial (i.e. you are right :)), so I'll  
> just answer a few.
>
> Here, I flip gp after both readers have passed through a grace period.  
> Note that the waiter process doesn't model synchronize_rcu, it models  
> update_counter_and_wait.

I see.

>
> This is because if you have only one writer, and no threads going  
> online/offline, there is no difference between an infinite sequence of  
> synchronize_rcu and an infinite sequence of update_counter_and_wait: the  
> latter is just two copies of the former, back to back.

Yep, indeed!

>
>> for consistency, you seem to use "in_registry[1]" and "in_registry[1] ==
>> 1" for pretty much the same thing. Is there a reason why they differ ?
>
> No, I should always use == 1.

OK,

Thanks!

Mathieu

>
> Paolo
>

-- 
Mathieu Desnoyers
Operating System Efficiency R&D Consultant
EfficiOS Inc.
http://www.efficios.com

_______________________________________________
ltt-dev mailing list
[email protected]
http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev

Reply via email to