*
* Userspace RCU library - batch memory reclamation
*
- * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
+ * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
static void wait_defer(void)
{
uatomic_dec(&defer_thread_futex);
- smp_mb(); /* Write futex before read queue */
+ cmm_smp_mb(); /* Write futex before read queue */
if (rcu_defer_num_callbacks()) {
- smp_mb(); /* Read queue before write futex */
+ cmm_smp_mb(); /* Read queue before write futex */
/* Callbacks are queued, don't wait. */
uatomic_set(&defer_thread_futex, 0);
} else {
- smp_rmb(); /* Read queue before read futex */
+ cmm_smp_rmb(); /* Read queue before read futex */
if (uatomic_read(&defer_thread_futex) == -1)
futex_noasync(&defer_thread_futex, FUTEX_WAIT, -1,
NULL, NULL, 0);
*/
for (i = queue->tail; i != head;) {
- smp_rmb(); /* read head before q[]. */
+ cmm_smp_rmb(); /* read head before q[]. */
p = LOAD_SHARED(queue->q[i++ & DEFER_QUEUE_MASK]);
if (unlikely(DQ_IS_FCT_BIT(p))) {
DQ_CLEAR_FCT_BIT(p);
fct = queue->last_fct_out;
fct(p);
}
- smp_mb(); /* push tail after having used q[] */
+ cmm_smp_mb(); /* push tail after having used q[] */
STORE_SHARED(queue->tail, i);
}
}
}
_STORE_SHARED(defer_queue.q[head++ & DEFER_QUEUE_MASK], p);
- smp_wmb(); /* Publish new pointer before head */
+ cmm_smp_wmb(); /* Publish new pointer before head */
/* Write q[] before head. */
STORE_SHARED(defer_queue.head, head);
- smp_mb(); /* Write queue head before read futex */
+ cmm_smp_mb(); /* Write queue head before read futex */
/*
* Wake-up any waiting defer thread.
*/