X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Farch%2Farm7%2Finclude%2Flock.h;fp=Kernel%2Farch%2Farm7%2Finclude%2Flock.h;h=dbcac936fce86d35cdc3a0b67767024f4b52b070;hb=7ec592a682de215659959788d20b49f0225c56e2;hp=e270145c16c105983f5860dceddea971882ef5ed;hpb=263e8355dbbcee8d38db03753811c0a8246d04e9;p=tpg%2Facess2.git diff --git a/Kernel/arch/arm7/include/lock.h b/Kernel/arch/arm7/include/lock.h index e270145c..dbcac936 100644 --- a/Kernel/arch/arm7/include/lock.h +++ b/Kernel/arch/arm7/include/lock.h @@ -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__ (