diff options
Diffstat (limited to 'kernel/spinlock.c')
| -rw-r--r-- | kernel/spinlock.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/kernel/spinlock.c b/kernel/spinlock.c index a8bcc85..68e64a9 100644 --- a/kernel/spinlock.c +++ b/kernel/spinlock.c @@ -1,13 +1,14 @@ #define FOOLOS_MODULE_NAME "spinlock" +#include "spinlock.h" + +#include "config.h" #include "lib/logger/log.h" -#include "spinlock.h" #include "x86.h" // https://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html -#define NUMBER_SPINLOCKS 16 -static spinlock spinlocks[NUMBER_SPINLOCKS]; +static volatile uint32_t spinlocks[NUMBER_SPINLOCKS]; void check_spinlocks() { @@ -16,18 +17,17 @@ void check_spinlocks() log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"%d",spinlocks[i]); } -void lock_spin(spinlock i) +void lock_spin(uint32_t i) { - spinlock *addr=spinlocks+i; -// log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"locking %d (0x%08X)",i,addr); - + uint32_t *addr=spinlocks+i; +// log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"locking %d (0x%08X)",i,addr); while(x86_xchg(addr,1)); } -void lock_release(spinlock i) +void lock_release(uint32_t i) { -// log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"unlocking %d",i); - spinlock *addr=spinlocks+i; +// log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"unlocking %d",i); + uint32_t *addr=spinlocks+i; asm("movb $0,%0"::"m"(*addr)); } |
