From c3acd92746c3cf5521e583d3a7a6c63d7980db3a Mon Sep 17 00:00:00 2001 From: Jerin Jacob Date: Sun, 24 Jul 2016 22:37:40 +0530 Subject: [PATCH] ring: fix single consumer dequeue performance Use of rte_smb_wmb() instead of rte_smb_rmb() in sc dequeue function creates the additional overhead of waiting for all the STOREs to be completed to local buffer from ring buffer memory. The sc dequeue function demands only LOAD-STORE barrier where LOADs from ring buffer memory needs to be completed before tail pointer update. Changing to rte_smb_rmb() to enable the required LOAD-STORE barrier. Fixes: ecc7d10e448e ("ring: guarantee dequeue ordering before tail update") Signed-off-by: Jerin Jacob Acked-by: Konstantin Ananyev --- lib/librte_ring/rte_ring.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/librte_ring/rte_ring.h b/lib/librte_ring/rte_ring.h index f928324d95..0e22e6946f 100644 --- a/lib/librte_ring/rte_ring.h +++ b/lib/librte_ring/rte_ring.h @@ -756,7 +756,7 @@ __rte_ring_sc_do_dequeue(struct rte_ring *r, void **obj_table, /* copy in table */ DEQUEUE_PTRS(); - rte_smp_wmb(); + rte_smp_rmb(); __RING_STAT_ADD(r, deq_success, n); r->cons.tail = cons_next; -- 2.20.1