New SCHED_SMP diff.
Suleiman Souhlal
ssouhlal at FreeBSD.org
Tue Jul 3 01:08:41 UTC 2007
On Jul 2, 2007, at 3:18 PM, Attilio Rao wrote:
> 2007/7/2, Jeff Roberson <jroberson at chesapeake.net>:
>> I forgot:
>>
>> http://people.freebsd.org/~jeff/schedsmp.diff
>>
>> --- amd64/amd64/cpu_switch.S 6 Jun 2007 07:35:07 -0000 1.158
>> +++ amd64/amd64/cpu_switch.S 2 Jul 2007 05:43:31 -0000
>> @@ -148,13 +148,7 @@
>> movq %cr3,%rax
>> cmpq %rcx,%rax /* Same address space? */
>> jne swinact
>> - movq %rdx, TD_LOCK(%rdi) /* Release the old thread */
>> - /* Wait for the new thread to become unblocked */
>> - movq $blocked_lock, %rdx
>> -1:
>> - movq TD_LOCK(%rsi),%rcx
>> - cmpq %rcx, %rdx
>> - je 1b
>> + xchgq %rdx, TD_LOCK(%rdi) /* Release the old thread */
>
> I don't think here you need an atomic instruction, a memory barrier
> throug sfence is good enough in order to make thread migration
> consistent.
SFENCE is not needed. Stores are already strongly ordered wrt other
stores on x86 (unless you use write-combining memory or non-temporal
stores).
The main advantage of using an atomic operation when unlocking is
that it should make the store visible to other CPUs faster (so they
don't spin as long), although I think you'll have a hard time
noticing a difference in a macrobenchmark.
-- Suleiman
More information about the freebsd-current
mailing list