From 6003a4dae148964b2fb175c7fe5e3bff03e6c9d3 Mon Sep 17 00:00:00 2001 From: Nathan Hjelm Date: Tue, 4 Aug 2015 08:54:06 -0600 Subject: [PATCH] opal/lifo: add missing opal_atomic_wmb and remove unnecessary opal_atomic_rmb Signed-off-by: Nathan Hjelm --- opal/class/opal_lifo.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/opal/class/opal_lifo.h b/opal/class/opal_lifo.h index ca66a6e9a5..2297de56c1 100644 --- a/opal/class/opal_lifo.h +++ b/opal/class/opal_lifo.h @@ -187,20 +187,22 @@ static inline opal_list_item_t *opal_lifo_pop_atomic (opal_lifo_t* lifo) { opal_list_item_t *item; while ((item = (opal_list_item_t *) lifo->opal_lifo_head.data.item) != &lifo->opal_lifo_ghost) { - opal_atomic_rmb(); - /* ensure it is safe to pop the head */ if (opal_atomic_swap_32((volatile int32_t *) &item->item_free, 1)) { continue; } + opal_atomic_wmb (); + /* try to swap out the head pointer */ if (opal_atomic_cmpset_ptr (&lifo->opal_lifo_head.data.item, item, (void *) item->opal_list_next)) { break; } + /* NTH: don't need another atomic here */ item->item_free = 0; + /* Do some kind of pause to release the bus */ }