[ovs-dev] [PATCH] compiler: Add OVS_ACQ_BEFORE, OVS_ACQ_AFTER macros.

Ben Pfaff blp at nicira.com
Fri Aug 9 19:34:33 UTC 2013


An upcoming patch will add the first uses.

Signed-off-by: Ben Pfaff <blp at nicira.com>
---
This will be used by a revision of the netdev patch 27/27
that I am about to send out.

 lib/compiler.h |   17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/lib/compiler.h b/lib/compiler.h
index 94a2218..2ca81bd 100644
--- a/lib/compiler.h
+++ b/lib/compiler.h
@@ -65,6 +65,16 @@
  *      while the specific MUTEX is held.
  *
  *
+ * On a variable A of mutex type:
+ *
+ *    - OVS_ACQ_BEFORE(B), where B is a mutex or a comma-separated list of
+ *      mutexes, declare that if both A and B are acquired at the same time,
+ *      then A must be acquired before B.  That is, B nests inside A.
+ *
+ *    - OVS_ACQ_AFTER(B) is the opposite of OVS_ACQ_BEFORE(B), that is, it
+ *      declares that A nests inside B.
+ *
+ *
  * On a function, the following attributes apply to mutexes:
  *
  *    - OVS_ACQUIRES(MUTEX) indicate that the function must be called without
@@ -84,6 +94,7 @@
  *    - OVS_LOCKS_EXCLUDED(MUTEX) indicates that the function may only be
  *      called when MUTEX is not held.
  *
+ *
  * The following variants, with the same syntax, apply to reader-writer locks:
  *
  *    mutex                rwlock, for reading  rwlock, for writing
@@ -115,6 +126,8 @@
 #define OVS_GUARDED_BY(...) __attribute__((guarded_by(__VA_ARGS__)))
 #define OVS_RELEASES(...) __attribute__((unlock_function(__VA_ARGS__)))
 #define OVS_EXCLUDED(...) __attribute__((locks_excluded(__VA_ARGS__)))
+#define OVS_ACQ_BEFORE(...) __attribute__((acquired_before(__VA_ARGS__)))
+#define OVS_ACQ_AFTER(...) __attribute__((acquired_after(__VA_ARGS__)))
 #elif __CHECKER__
 /* "sparse" annotations for mutexes and mutex-like constructs.
  *
@@ -136,6 +149,8 @@
 #define OVS_GUARDED_BY(...)
 #define OVS_EXCLUDED(...)
 #define OVS_RELEASES(...)   __attribute__((context(MUTEX, 1, 0)))
+#define OVS_ACQ_BEFORE(...)
+#define OVS_ACQ_AFTER(...)
 #define OVS_MACRO_LOCK(...) __context__(MUTEX, 0, 1)
 #define OVS_MACRO_RELEASE(...) __context__(MUTEX, 1, 0)
 #else
@@ -153,6 +168,8 @@
 #define OVS_GUARDED_BY(...)
 #define OVS_EXCLUDED(...)
 #define OVS_RELEASES(...)
+#define OVS_ACQ_BEFORE(...)
+#define OVS_ACQ_AFTER(...)
 #define OVS_MACRO_LOCK(...)
 #define OVS_MACRO_RELEASE(...)
 #endif
-- 
1.7.10.4




More information about the dev mailing list