Re: [patch] spinlocks: remove 'volatile'

From: trajce nedev
Date: Sat Jul 08 2006 - 02:43:35 EST


On Sat, 8 Jul 2006, Chase Venters wrote:

Perhaps you should have followed this thread closely before composing your
assault on Linus. We're not talking about "asm volatile". We're talking about
the "volatile" keyword as applied to variables. 'volatile' as applied to
inline ASM is of course necessary in many cases -- no one is disputing that.


Ok, let's port a spinlock macro that spins instead of context switches instead of using the pthread garbage on IA64 or AMD64:

#if ((defined (_M_IA64) || defined (_M_AMD64)) && !defined(NT_INTEREX))
#include <windows.h>
#pragma intrinsic (_InterlockedExchange)

typedef volatile LONG lock_t[1];

#define LockInit(v) ((v)[0] = 0)
#define LockFree(v) ((v)[0] = 0)
#define Unlock(v) ((v)[0] = 0)

__forceinline void Lock(volatile LONG *hPtr)
{
int iValue;

for (;;) {
iValue = _InterlockedExchange((LPLONG)hPtr, 1);
if (iValue == 0)
return;
while (*hPtr);
}
}

Please show me how I can write this to spinlock without using volatile.

Trajce Nedev
tnedev@xxxxxxx

_________________________________________________________________
Express yourself instantly with MSN Messenger! Download today - it's FREE! http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/