* 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
