On Fri, Aug 29, 2014 at 02:11:26PM -0700, Jarno Rajahalme wrote: > > On Aug 28, 2014, at 9:42 AM, Ben Pfaff <b...@nicira.com> wrote: > > > On Fri, Aug 22, 2014 at 01:58:18PM -0700, Jarno Rajahalme wrote: > >> Avoiding the atomic read may help if a function using > >> ovsthread_once_start() is ever called in a loop, as the new > >> 'maybe_not_done' can be kept in a register. The atomic read will > >> still be done as long as 'maybe_not_done' is true. Since > >> 'maybe_not_done' is not an atomic variable, whis may happen > >> indefinitely, but if a loop starts with 'maybe_not_done' as false, no > >> atomic read operations are needed. > >> > >> Signed-off-by: Jarno Rajahalme <jrajaha...@nicira.com> > > > > It seems reasonable to have a cheaper test like this, but I don't think > > that if we do that we need to also inline the more expensive test. In > > other words, I think we could drop the call to > > ovsthread_once_is_done__() from ovsthread_once_start(). (After that we > > can move ovsthread_once_is_done__() into ovs-thread.c.) > > How about getting rid of the atomic variable and just is a bool. On > false negatives we first need to take the mutex anyway to have the > thread wait for the initialization to complete, and after ?once" is > done, the first unnecessary (if any) mutex_lock will synchronize > memory and after that the old ?done? value can not be cached any > more?
It sounds clean. > I?ll post this in v2 for you to review. Thanks. _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev