On Sat, 8 Jul 2006, J.A. [UTF-8] Magallón wrote: > On Fri, 7 Jul 2006 17:22:22 -0500 (CDT), Chase Venters wrote: > > > > .L7: > > > movl $1, mtx <========= > > > movl spinvar, %eax > > > movl $0, mtx <========= > > > testl %eax, %eax > > > jne .L7 > > > popl %ebp > > > ret > > > > NO! It's not better. You're still not syncing or locking the bus! If you > > refer to the fact that the "movl $1" has magically appeared, that's > > because you've just PAPERED OVER THE PROBLEM WITH "volatile", which is > > _exactly_ what Linus is telling you NOT TO DO. > > > > BTW, I really don't mind if a given architecnture has to lock the bus or > say a prayer to Budha to reload a variable. I want it to be reloaded at > every (or a certain, in case of a (volatile)mtx cast) usage. The compiler > is the responsible of knowing what to do. What if nextgen P4 Xeon do not > need a bus lock ? Will you rewrite the kernel ? Looks like you need to read Documentation/memory-barriers.txt. That file explains why the above assembly code is not correct. Bonus question: what stops the processor from coalescing or rearranging the three movl instructions in that assembly? > -- > J.A. Magallon \ Software is like sex: > \ It's better when it's free > Mandriva Linux release 2007.0 (Cooker) for i586 > Linux 2.6.17-jam01 (gcc 4.1.1 20060518 (prerelease)) #2 SMP PREEMPT Wed -- Vadim Lobanov