bug from a long time :
authoradash <adash>
Thu, 3 Dec 2009 01:03:44 +0000 (01:03 +0000)
committeradash <adash>
Thu, 3 Dec 2009 01:03:44 +0000 (01:03 +0000)
change unsigned ints to signed, needs to be ported to dsm recovery version

Robust/src/Runtime/DSTM/interface/dsmlock.c
Robust/src/Runtime/DSTM/interface/dsmlock.h

index f9bc82e01b20320d4b6cd1b780b5b108e3607b71..e9839362bbe38557feb643b53d76354ca523b517 100644 (file)
@@ -1,21 +1,21 @@
 #include "dsmlock.h"
 #include <stdio.h>
 
-inline void initdsmlocks(volatile unsigned int *addr) {
+inline void initdsmlocks(volatile int *addr) {
   (*addr) = RW_LOCK_BIAS;
 }
 
-inline void atomic_dec(volatile unsigned int *v) {
+inline void atomic_dec(volatile int *v) {
   __asm__ __volatile__ (LOCK_PREFIX "decl %0"
                        : "+m" (*v));
 }
 
-inline void atomic_inc(volatile unsigned int *v) {
+inline void atomic_inc(volatile int *v) {
   __asm__ __volatile__ (LOCK_PREFIX "incl %0"
                        : "+m" (*v));
 }
 
-static inline int atomic_sub_and_test(int i, volatile unsigned int *v) {
+static inline int atomic_sub_and_test(int i, volatile int *v) {
   unsigned char c;
 
   __asm__ __volatile__ (LOCK_PREFIX "subl %2,%0; sete %1"
@@ -31,13 +31,13 @@ static inline int atomic_sub_and_test(int i, volatile unsigned int *v) {
  *
  * Atomically adds @i to @v.
  */
-static inline void atomic_add(int i, volatile unsigned int *v) {
+static inline void atomic_add(int i, volatile int *v) {
   __asm__ __volatile__ (LOCK_PREFIX "addl %1,%0"
                        : "+m" (*v)
                        : "ir" (i));
 }
 
-inline int read_trylock(volatile unsigned int  *lock) {
+inline int read_trylock(volatile int  *lock) {
   atomic_dec(lock);
   if (atomic_read(lock) >= 0)
     return 1; //can aquire a new read lock
@@ -45,7 +45,7 @@ inline int read_trylock(volatile unsigned int  *lock) {
   return 0; //failure
 }
 
-inline int write_trylock(volatile unsigned int  *lock) {
+inline int write_trylock(volatile int  *lock) {
   if (atomic_sub_and_test(RW_LOCK_BIAS, lock)) {
     return 1; // get a write lock
   }
@@ -53,11 +53,11 @@ inline int write_trylock(volatile unsigned int  *lock) {
   return 0; // failed to acquire a write lock
 }
 
-inline void read_unlock(volatile unsigned int *rw) {
+inline void read_unlock(volatile int *rw) {
   __asm__ __volatile__ (LOCK_PREFIX "incl %0" : "+m" (*rw) : : "memory");
 }
 
-inline void write_unlock(volatile unsigned int *rw) {
+inline void write_unlock(volatile int *rw) {
   __asm__ __volatile__ (LOCK_PREFIX "addl %1, %0"
                        : "+m" (*rw) : "i" (RW_LOCK_BIAS) : "memory");
 }
index 80761feebea5531f2d558c49a04828af1e5157a3..f95edf675238e3569d03adca6918bbb97616d04c 100644 (file)
   "661:\n\tlock; "
 
 
-
-typedef struct {
-  unsigned int counter;
-} atomic_t;
-
-void initdsmlocks(volatile unsigned int *addr);
-int read_trylock(volatile unsigned int *lock);
-int write_trylock(volatile unsigned int *lock);
-void atomic_dec(volatile unsigned int *v);
-void atomic_inc(volatile unsigned int *v);
-static void atomic_add(int i, volatile unsigned int *v);
-static int atomic_sub_and_test(int i, volatile unsigned int *v);
-void read_unlock(volatile unsigned int *rw);
-void write_unlock(volatile unsigned int *rw);
+void initdsmlocks(volatile int *addr);
+int read_trylock(volatile int *lock);
+int write_trylock(volatile int *lock);
+void atomic_dec(volatile int *v);
+void atomic_inc(volatile int *v);
+static void atomic_add(int i, volatile int *v);
+static int atomic_sub_and_test(int i, volatile int *v);
+void read_unlock(volatile int *rw);
+void write_unlock(volatile int *rw);
 #endif