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.

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.

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.

Paolo

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

Reply via email to