|
@@ -128,6 +128,19 @@ do { \
|
|
|
__u.__val; \
|
|
|
})
|
|
|
|
|
|
+#define smp_cond_load_relaxed(ptr, cond_expr) \
|
|
|
+({ \
|
|
|
+ typeof(ptr) __PTR = (ptr); \
|
|
|
+ typeof(*ptr) VAL; \
|
|
|
+ for (;;) { \
|
|
|
+ VAL = READ_ONCE(*__PTR); \
|
|
|
+ if (cond_expr) \
|
|
|
+ break; \
|
|
|
+ __cmpwait_relaxed(__PTR, VAL); \
|
|
|
+ } \
|
|
|
+ VAL; \
|
|
|
+})
|
|
|
+
|
|
|
#define smp_cond_load_acquire(ptr, cond_expr) \
|
|
|
({ \
|
|
|
typeof(ptr) __PTR = (ptr); \
|