summaryrefslogtreecommitdiff
path: root/kernel/spinlock.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/spinlock.c')
-rw-r--r--kernel/spinlock.c20
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));
}