/SPARTAN/trunk/src/synch/spinlock.c |
---|
29,6 → 29,7 |
#include <arch.h> |
#include <arch/atomic.h> |
#include <arch/barrier.h> |
#include <synch/spinlock.h> |
#ifdef __SMP__ |
50,6 → 51,7 |
i = 0; |
} |
} |
CS_ENTER_BARRIER(); |
} |
#else |
60,16 → 62,23 |
* implementation of spinlock. |
*/ |
spinlock_arch(&sl->val); |
CS_ENTER_BARRIER(); |
} |
#endif |
int spinlock_trylock(spinlock_t *sl) |
{ |
return !test_and_set(&sl->val); |
int rc; |
rc = !test_and_set(&sl->val); |
CS_ENTER_BARRIER(); |
return rc; |
} |
void spinlock_unlock(spinlock_t *sl) |
{ |
CS_LEAVE_BARRIER(); |
sl->val = 0; |
} |