Ensures __notify took the user trapframe as an arg
[akaros.git] / kern / src / atomic.c
index 5d522f0..1724d09 100644 (file)
@@ -1,6 +1,12 @@
-#include <arch/apic.h>
-#include <arch/atomic.h>
-#include <ros/error.h>
+#ifdef __SHARC__
+#pragma nosharc
+#endif
+
+#include <arch/arch.h>
+#include <arch/bitmask.h>
+
+#include <atomic.h>
+#include <error.h>
 #include <string.h>
 #include <assert.h>
 
@@ -14,7 +20,7 @@ int commit_checklist_wait(checklist_t* list, checklist_mask_t* mask)
        // Or, bail out if we can see the list is already in use.  This check is
        // just an optimization before we try to use the list for real.
        if ((checklist_is_locked(list)) || !checklist_is_clear(list))
-               return E_BUSY;
+               return -EBUSY;
 
        // possession of this lock means you can wait on it and set it
        spin_lock_irqsave(&list->lock);
@@ -32,7 +38,7 @@ int commit_checklist_wait(checklist_t* list, checklist_mask_t* mask)
 int commit_checklist_nowait(checklist_t* list, checklist_mask_t* mask)
 {
        int e = 0;
-       if (e = commit_checklist_wait(list, mask))
+       if ((e = commit_checklist_wait(list, mask)))
                return e;
        // give up the lock, since we won't wait for completion
        spin_unlock_irqsave(&list->lock);
@@ -64,7 +70,7 @@ int commit_checklist_nowait(checklist_t* list, checklist_mask_t* mask)
 // Assumed we held the lock if we ever call this
 int waiton_checklist(checklist_t* list)
 {
-       extern uint32_t outstanding_calls;
+       extern atomic_t outstanding_calls;
        // can consider breakout out early, like above, and erroring out
        while (!checklist_is_clear(list))
                cpu_relax();
@@ -84,8 +90,7 @@ int release_checklist(checklist_t* list)
 // peaks in and sees if the list is locked with it's spinlock
 int checklist_is_locked(checklist_t* list)
 {
-       // remember the lock status is the lowest byte of the lock
-       return list->lock & 0xff;
+       return spin_locked(&list->lock);
 }
 
 // no synch guarantees - just looks at the list
@@ -103,13 +108,13 @@ void reset_checklist(checklist_t* list)
 // CPU mask specific - this is how cores report in
 void down_checklist(checklist_t* list)
 {
-       CLR_BITMASK_BIT_ATOMIC(list->mask.bits, lapic_get_id());
+       CLR_BITMASK_BIT_ATOMIC(list->mask.bits, core_id());
 }
 
 /* Barriers */
 void init_barrier(barrier_t* barrier, uint32_t count)
 {
-       barrier->lock = 0;
+       spinlock_init(&barrier->lock);
        barrier->init_count = count;
        barrier->current_count = count;
        barrier->ready = 0;