summaryrefslogtreecommitdiff
path: root/src/include/hardware.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/hardware.h')
-rw-r--r--src/include/hardware.h26
1 files changed, 20 insertions, 6 deletions
diff --git a/src/include/hardware.h b/src/include/hardware.h
index e3c098826d0..32353072c5b 100644
--- a/src/include/hardware.h
+++ b/src/include/hardware.h
@@ -33,8 +33,8 @@
uint8_t __orig; \
do { \
__orig = (p)->flags_atomic; \
- } while (!WT_ATOMIC_CAS1((p)->flags_atomic, \
- __orig, __orig | (uint8_t)(mask))); \
+ } while (!__wt_atomic_cas8( \
+ &(p)->flags_atomic, __orig, __orig | (uint8_t)(mask))); \
} while (0)
#define F_CAS_ATOMIC(p, mask, ret) do { \
@@ -46,16 +46,30 @@
ret = EBUSY; \
break; \
} \
- } while (!WT_ATOMIC_CAS1((p)->flags_atomic, \
- __orig, __orig | (uint8_t)(mask))); \
+ } while (!__wt_atomic_cas8( \
+ &(p)->flags_atomic, __orig, __orig | (uint8_t)(mask))); \
+} while (0)
+
+#define F_CAS_ATOMIC_WAIT(p, mask) do { \
+ int __ret; \
+ for (;;) { \
+ F_CAS_ATOMIC(p, mask, __ret); \
+ if (__ret == 0) \
+ break; \
+ __wt_yield(); \
+ } \
} while (0)
#define F_CLR_ATOMIC(p, mask) do { \
uint8_t __orig; \
do { \
__orig = (p)->flags_atomic; \
- } while (!WT_ATOMIC_CAS1((p)->flags_atomic, \
- __orig, __orig & ~(uint8_t)(mask))); \
+ } while (!__wt_atomic_cas8( \
+ &(p)->flags_atomic, __orig, __orig & ~(uint8_t)(mask))); \
} while (0)
#define WT_CACHE_LINE_ALIGNMENT 64 /* Cache line alignment */
+#define WT_CACHE_LINE_ALIGNMENT_VERIFY(session, a) \
+ WT_ASSERT(session, \
+ WT_PTRDIFF(&(a)[1], &(a)[0]) >= WT_CACHE_LINE_ALIGNMENT && \
+ WT_PTRDIFF(&(a)[1], &(a)[0]) % WT_CACHE_LINE_ALIGNMENT == 0)