summaryrefslogtreecommitdiff
path: root/cesar/lib
diff options
context:
space:
mode:
authorNicolas Schodet2012-03-23 16:49:27 +0100
committerNicolas Schodet2012-03-23 16:49:27 +0100
commitd7cc0353a71ed24c3fc1df1deb4c170c31c501e7 (patch)
treeffc820d507eda47df6cec4252085c956f212ca8a /cesar/lib
parentccef4e2ce9f3c537ded6fa9957fddb3e351a92fe (diff)
parentbf2612398e770561aedd8b54c7f0a115ab8efcbf (diff)
Merge branch 'addref'
Conflicts: cesar/lib/src/blk.c
Diffstat (limited to 'cesar/lib')
-rw-r--r--cesar/lib/src/blk.c6
-rw-r--r--cesar/lib/src/slab.c4
-rw-r--r--cesar/lib/src/trace.c4
3 files changed, 8 insertions, 6 deletions
diff --git a/cesar/lib/src/blk.c b/cesar/lib/src/blk.c
index 5a7ce6f0ce..238fcbef67 100644
--- a/cesar/lib/src/blk.c
+++ b/cesar/lib/src/blk.c
@@ -408,7 +408,7 @@ blk_addref_desc_ (blk_t *blk __FL)
dbg_blame_ptr (blk);
blk_blame (blk, DATA_TO_DESC (blk->data) == blk);
/* Update reference counter. */
- arch_atomic_add (&BLK_EXTRA (blk)->refcnt, 1);
+ arch_atomic_add_lock (&BLK_EXTRA (blk)->refcnt, 1);
/* Book keeping. */
blk_log (BLK_EXTRA (blk), 1 __fl);
restrack_update (NULL, blk, _fl_, 1);
@@ -447,7 +447,7 @@ blk_release_desc_ (blk_t *blk __FL)
blk_log (BLK_EXTRA (blk), -1 __fl);
restrack_update (NULL, blk, _fl_, -1);
/* Update reference counter. */
- if (arch_atomic_add (&BLK_EXTRA (blk)->refcnt, -1) == 0)
+ if (arch_atomic_add_lock (&BLK_EXTRA (blk)->refcnt, -1) == 0)
{
blk_free_desc_ (blk __fl);
}
@@ -520,7 +520,7 @@ blk_release_ (void *data __FL)
blk_blame ((blk_t *) obj, obj->magic == BLK_OBJ_MAGIC);
blk_log (BLK_EXTRA (obj), -1 __fl);
restrack_update (NULL, obj, _fl_, -1);
- if (arch_atomic_add (&BLK_EXTRA (obj)->refcnt, -1) == 0)
+ if (arch_atomic_add_lock (&BLK_EXTRA (obj)->refcnt, -1) == 0)
{
if (obj->destructor)
obj->destructor (data);
diff --git a/cesar/lib/src/slab.c b/cesar/lib/src/slab.c
index 017a03dddb..058a07671a 100644
--- a/cesar/lib/src/slab.c
+++ b/cesar/lib/src/slab.c
@@ -222,7 +222,7 @@ slab_addref_ (void *object __FL)
{
dbg_blame_ptr (object);
/* Update reference counter. */
- arch_atomic_add (REFCNT (object), 1);
+ arch_atomic_add_lock (REFCNT (object), 1);
/* Book keeping. */
restrack_update (NULL, object, _fl_, 1);
}
@@ -235,7 +235,7 @@ slab_release_ (void *object __FL)
/* Book keeping. */
restrack_update (NULL, object, _fl_, -1);
/* Update reference counter. */
- if (arch_atomic_add (REFCNT (object), -1) == 0)
+ if (arch_atomic_add_lock (REFCNT (object), -1) == 0)
{
/* Lock. */
arch_dsr_lock ();
diff --git a/cesar/lib/src/trace.c b/cesar/lib/src/trace.c
index db9e65b2c8..819f8c90c7 100644
--- a/cesar/lib/src/trace.c
+++ b/cesar/lib/src/trace.c
@@ -118,7 +118,9 @@ trace_drop_chunks (uint n)
hdrop = bigest_buf->head;
tdrop = hdrop;
n -= i_can_drop;
- arch_atomic_add ((int *) &bigest_buf->chunks_nb, -i_can_drop);
+ uint flags = arch_isr_lock ();
+ bigest_buf->chunks_nb -= i_can_drop;
+ arch_isr_unlock (flags);
while (--i_can_drop)
tdrop = tdrop->next;
bigest_buf->head = tdrop->next;