+ bool available = false;
+ int mask;
+
+ mask = membarrier(MEMBARRIER_CMD_QUERY, 0);
+ if (mask >= 0) {
+ if (mask & MEMBARRIER_CMD_PRIVATE_EXPEDITED) {
+ if (membarrier(MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED, 0))
+ urcu_die(errno);
+ has_sys_membarrier_private_expedited = 1;
+ available = true;
+ } else if (mask & MEMBARRIER_CMD_SHARED) {
+ available = true;
+ }
+ }
+ rcu_sys_membarrier_status(available);
+}