Kernel/arm7 - Fixed SPINLOCK to use the swap opcode
authorJohn Hodge <[email protected]>
Sun, 28 Aug 2011 04:06:24 +0000 (12:06 +0800)
committerJohn Hodge <[email protected]>
Sun, 28 Aug 2011 04:06:24 +0000 (12:06 +0800)
Kernel/arch/arm7/include/lock.h

index e270145..dbcac93 100644 (file)
@@ -28,12 +28,16 @@ static inline int SHORTLOCK(struct sShortSpinlock *Lock)
 {
        #if 0
        while( __sync_lock_test_and_set( &Lock->Lock, 1 ) == 1 );
-       #endif
-       #if 1
+       #elif 0
        while( Lock->Lock )     ;
        Lock->Lock = 1;
-       #endif
-       #if 0
+       #elif 1
+        int    v = 1;
+       while( v )
+       {
+               __asm__ __volatile__ ("swp [%0], %1" : "=r" (v) : "r" (&lock));
+       }
+       #elif 0
        // Shamelessly copied from linux (/arch/arm/include/asm/spinlock.h) until I can fix stuff
        Uint    tmp;
        __asm__ __volatile__ (

UCC git Repository :: git.ucc.asn.au