From 4d2ef6901697461477db05fe27805d390a698874 Mon Sep 17 00:00:00 2001
From: johann <johann>
Date: Thu, 6 Dec 2007 11:27:48 +0000
Subject: [PATCH] Branch b1_6 b=13843 i=adilger i=nathan

Dynamically create DLM blocking callback threads
+ fix an issue with MacOS implementation of atomic_sub_and_test().
---
 lnet/include/libcfs/darwin/darwin-types.h | 7 +++++--
 lnet/include/libcfs/user-lock.h           | 2 ++
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/lnet/include/libcfs/darwin/darwin-types.h b/lnet/include/libcfs/darwin/darwin-types.h
index 805c3c836e..3c247246b2 100644
--- a/lnet/include/libcfs/darwin/darwin-types.h
+++ b/lnet/include/libcfs/darwin/darwin-types.h
@@ -64,6 +64,7 @@ typedef struct { volatile uint32_t counter; }	atomic_t;
 #define atomic_read(a)			((a)->counter)
 #define atomic_set(a, v)		(((a)->counter) = (v))
 #ifdef __DARWIN8__
+/* OS*Atomic return the value before the operation */
 #define atomic_add(v, a)		OSAddAtomic(v, (SInt32 *)&((a)->counter))
 #define atomic_sub(v, a)		OSAddAtomic(-(v), (SInt32 *)&((a)->counter))
 #define atomic_inc(a)			OSIncrementAtomic((SInt32 *)&((a)->counter))
@@ -74,8 +75,10 @@ typedef struct { volatile uint32_t counter; }	atomic_t;
 #define atomic_inc(a)			atomic_add(1, a)
 #define atomic_dec(a)			atomic_sub(1, a)
 #endif /* !__DARWIN8__ */
-#define atomic_sub_and_test(v, a)	( atomic_sub(v, a) == -(a) )
-#define atomic_dec_and_test(a)		( atomic_dec(a) == 1 )
+#define atomic_sub_and_test(v, a)       (atomic_sub(v, a) == (v))
+#define atomic_dec_and_test(a)          (atomic_dec(a) == 1)
+#define atomic_inc_return(a)            (atomic_inc(a) + 1)
+#define atomic_dec_return(a)            (atomic_dec(a) - 1)
 
 #include <libsa/mach/mach.h>
 typedef off_t   			loff_t;
diff --git a/lnet/include/libcfs/user-lock.h b/lnet/include/libcfs/user-lock.h
index 97a5a16d5c..6b46ce2194 100644
--- a/lnet/include/libcfs/user-lock.h
+++ b/lnet/include/libcfs/user-lock.h
@@ -187,6 +187,8 @@ typedef struct { volatile int counter; } atomic_t;
 #define atomic_inc(a)  (((a)->counter)++)
 #define atomic_dec(a)  do { (a)->counter--; } while (0)
 #define atomic_add(b,a)  do {(a)->counter += b;} while (0)
+#define atomic_add_return(n,a) ((a)->counter = n)
+#define atomic_inc_return(a) atomic_add_return(1,a)
 #define atomic_sub(b,a)  do {(a)->counter -= b;} while (0)
 
 #endif
-- 
GitLab