FreeBSD spinlock - compatibility layer

Alfred Perlstein bright at mu.org
Tue May 21 20:40:29 UTC 2013


On 5/20/13 9:50 AM, John Baldwin wrote:
> On Tuesday, May 14, 2013 6:04:21 am Orit Moskovich wrote:
>> Hi,
>>
>> I read about the FreeBSD mutex implementation for spinlock in the
> compatibility layer.
>> I might be wrong, but I noticed a code section that might be problematic:
>>
>> Taken from
> http://svn.freebsd.org/base/release/9.1.0/sys/ofed/include/linux/spinlock.h:
>> static inline void
>> spin_lock_init(spinlock_t *lock)
>> {
>>
>>          memset(&lock->m, 0, sizeof(lock->m));
>>          mtx_init(&lock->m, "lnxspin", NULL, MTX_DEF | MTX_NOWITNESS);
>> }
>>
>> But MTX_DEF initializes mutex as a sleep mutex:
>>
>> By default, MTX_DEF mutexes will context switch when they are already
>>
>>       held.
>>
>>
>> There is a flag MTX_SPIN Which I think is the right one in this case .
>>
>>
>>
>> I'd appreciate your take on this issue.
> Since FreeBSD uses a different approach to interrupt handlers (they run in
> threads, not in the bottom half), a regular mutex may in fact give the closest
> match to the same semantics.  Regular mutexes are also cheaper and in general
> preferable to spin mutexes whenever possible.
>

Sure, but is it possible that someone might want some of the other 
guarantees of MTX_SPIN spinlocks such as:

critical section/non-pre-emptable/non-migrating on cpu/latency versus 
throughput ?

-Alfred


More information about the freebsd-arch mailing list