X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=lib%2Flibrte_ring%2Frte_ring_generic.h;fp=lib%2Flibrte_ring%2Frte_ring_generic.h;h=953cdbbd5eb15303b46aefc1493f31bd90aaf85e;hb=ce2f72a24eaa89ff08fd64742c9425f17f42345c;hp=ea7dbe5b9c07b255077ceec02ec0e0cccfbe0add;hpb=5edab9b0e790c4e369c46998a9e56206a044297b;p=deb_dpdk.git diff --git a/lib/librte_ring/rte_ring_generic.h b/lib/librte_ring/rte_ring_generic.h index ea7dbe5b..953cdbbd 100644 --- a/lib/librte_ring/rte_ring_generic.h +++ b/lib/librte_ring/rte_ring_generic.h @@ -158,11 +158,14 @@ __rte_ring_move_cons_head(struct rte_ring *r, unsigned int is_sc, return 0; *new_head = *old_head + n; - if (is_sc) - r->cons.head = *new_head, success = 1; - else + if (is_sc) { + r->cons.head = *new_head; + rte_smp_rmb(); + success = 1; + } else { success = rte_atomic32_cmpset(&r->cons.head, *old_head, *new_head); + } } while (unlikely(success == 0)); return n; }