MINOR: xref: Add missing barriers.
Add a few missing barriers in the xref code, it's unlikely to be a problem
for x86, but may be on architectures with weak memory ordering.
diff --git a/include/common/xref.h b/include/common/xref.h
index 6dfa7b6..a6291f5 100644
--- a/include/common/xref.h
+++ b/include/common/xref.h
@@ -32,6 +32,7 @@
/* Get the local pointer to the peer. */
local = HA_ATOMIC_XCHG(&xref->peer, XREF_BUSY);
+ __ha_barrier_store();
/* If the local pointer is NULL, the peer no longer exists. */
if (local == NULL) {
@@ -53,6 +54,7 @@
/* The remote lock is BUSY, We retry the process. */
if (remote == XREF_BUSY) {
xref->peer = local;
+ __ha_barrier_store();
continue;
}
@@ -66,6 +68,8 @@
/* Release the peer. */
peer->peer = xref;
+ __ha_barrier_store();
+
/* Release myself. */
xref->peer = peer;
}
@@ -73,6 +77,7 @@
static inline void xref_disconnect(struct xref *xref, struct xref *peer)
{
peer->peer = NULL;
+ __ha_barrier_store();
xref->peer = NULL;
}