Hi Andy,

See my inline comments.

-Gavin

-----Original Message-----
From: dev <dev-boun...@dpdk.org> On Behalf Of Andy Green
Sent: Monday, May 28, 2018 10:29 AM
To: dev@dpdk.org
Subject: [dpdk-dev] [PATCH 1/2] ring: fix declaration after code

On gcc 5.4.0 / native aarch64 from Ubuntu 16.04:

/home/agreen/lagopus/src/dpdk/build/include/
rte_ring_c11_mem.h: In function
'__rte_ring_move_prod_head':
/home/agreen/lagopus/src/dpdk/build/include/
rte_ring_c11_mem.h:69:3: warning: ISO C90 forbids mixed declarations and code 
[-Wdeclaration-after-statement]
   const uint32_t cons_tail = r->cons.tail;
   ^
/home/agreen/lagopus/src/dpdk/build/include/
rte_ring_c11_mem.h: In function
'__rte_ring_move_cons_head':
/home/agreen/lagopus/src/dpdk/build/include/
rte_ring_c11_mem.h:136:3: warning: ISO C90 forbids mixed declarations and code 
[-Wdeclaration-after-statement]
   const uint32_t prod_tail = r->prod.tail;
   ^

Signed-off-by: Andy Green <a...@warmcat.com>
Fixes: 39368ebfc6 ("ring: introduce C11 memory model barrier option")
---
 lib/librte_ring/rte_ring_c11_mem.h |    8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/lib/librte_ring/rte_ring_c11_mem.h 
b/lib/librte_ring/rte_ring_c11_mem.h
index cb3f82b1a..3cc339558 100644
--- a/lib/librte_ring/rte_ring_c11_mem.h
+++ b/lib/librte_ring/rte_ring_c11_mem.h
@@ -61,12 +61,14 @@ __rte_ring_move_prod_head(struct rte_ring *r, unsigned int 
is_sp,
 int success;

 do {
+const uint32_t cons_tail = r->cons.tail;
+
 /* Reset n to the initial burst count */
 n = max;

 *old_head = __atomic_load_n(&r->prod.head,
 __ATOMIC_ACQUIRE);
-const uint32_t cons_tail = r->cons.tail;
+
[Gavin Hu] The ACQUIRE and RELEASE pair protects anything that between the two 
must be visible to other threads when they perform an acquire operation on the 
same memory address. Your changes broke this semantics.  I advise to move the 
declaration before and keep the assignment in the old place.
 /*
  *  The subtraction is done between two unsigned 32bits value
  * (the result is always modulo 32 bits even if we have @@ -129,11 +131,13 @@ 
__rte_ring_move_cons_head(struct rte_ring *r, int is_sc,

 /* move cons.head atomically */
 do {
+const uint32_t prod_tail = r->prod.tail;
+
 /* Restore n as it may change every loop */
 n = max;
 *old_head = __atomic_load_n(&r->cons.head,
 __ATOMIC_ACQUIRE);
-const uint32_t prod_tail = r->prod.tail;
+
 /* The subtraction is done between two unsigned 32bits value
  * (the result is always modulo 32 bits even if we have
  * cons_head > prod_tail). So 'entries' is always between 0

IMPORTANT NOTICE: The contents of this email and any attachments are 
confidential and may also be privileged. If you are not the intended recipient, 
please notify the sender immediately and do not disclose the contents to any 
other person, use it for any purpose, or store or copy the information in any 
medium. Thank you.

Reply via email to