summaryrefslogtreecommitdiff
path: root/kernel/spinlock.c
diff options
context:
space:
mode:
authorMiguel <m.i@gmx.at>2018-08-17 21:41:21 +0200
committerMiguel <m.i@gmx.at>2018-08-17 21:41:21 +0200
commitc15925a24efe14f437d8a2699500241a58fdc8f9 (patch)
treec0db3a7d2a4f857324735df35e9cc1f0539c5f24 /kernel/spinlock.c
parent6fd78c2ff950310d8372ec0353553cc4a5a43e72 (diff)
cleanup and working on fifo pipes
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));
}