[ovs-dev] [PATCH 07/18] lib/ovs-thread: Avoid atomic read in ovsthread_once_start().

Ben Pfaff blp at nicira.com
Fri Aug 29 21:12:05 UTC 2014


On Fri, Aug 29, 2014 at 02:11:26PM -0700, Jarno Rajahalme wrote:
> 
> On Aug 28, 2014, at 9:42 AM, Ben Pfaff <blp at 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 <jrajahalme at 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.



More information about the dev mailing list