proposed smp_rendezvous change

Andriy Gapon avg at FreeBSD.org
Mon Jul 18 11:39:03 UTC 2011


on 17/05/2011 18:51 John Baldwin said the following:
> On Tuesday, May 17, 2011 10:34:41 am Andriy Gapon wrote:
>> on 17/05/2011 16:58 John Baldwin said the following:
>>> No, it doesn't quite work that way.  It wouldn't work on Alpha for example.
>>>
>>> All load_acq is a load with a memory barrier to order other loads after it.
>>> It is still free to load stale data.  Only a read-modify-write operation
>>> would actually block until it could access an up-to-date value.
>>
>> Hmm, ok.
>> How about atomic_add_acq_int(&smp_rv_waiters[0], 0) ? :-)
>> Or an equivalent MI action that doesn't actually change smp_rv_waiters[0] value,
>> if there could be any.
>> Maybe explicit atomic_cmpset_acq_int(&smp_rv_waiters[0], 0, 0) ?
>>
>> You see at what I am getting?
> 
> Yeah, either of those would work.  At this point just leaving the
> atomic_add_int() as-is would be the smallest diff. :)

Yes, atomic_add_int() for smp_rv_waiters[0] is completely OK, it's the spinwait
loop on it that is a bit wasteful.  And probably the extra smp_rv_waiters[]
element used only for this purpose.  Do you agree?

Convenience link to the gmane archive of this thread:
http://article.gmane.org/gmane.os.freebsd.current/132730
-- 
Andriy Gapon


More information about the freebsd-current mailing list