From ee07d519ceb05e59dd970c48a42cf2f09b3ac4dc Mon Sep 17 00:00:00 2001 From: Andy Green Date: Thu, 17 May 2018 21:49:27 +0800 Subject: [PATCH] mbuf: fix reference counter integer promotion GCC 8.1 warned: "1 + value", where value is an uint16_t causes promotion to a signed int. The compiler complained that we are shoving an int into a uint16_t return type with different size and sign. Bumping and returning value directly instead removes the promotion and the problem. Fixes: f20b50b946da ("mbuf: optimize refcnt update") Fixes: a53aa2b9f3be ("mbuf: support attaching external buffer") Cc: stable@dpdk.org Signed-off-by: Andy Green Acked-by: Olivier Matz --- lib/librte_mbuf/rte_mbuf.h | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h index eab13c6bf8..8a2dae23b0 100644 --- a/lib/librte_mbuf/rte_mbuf.h +++ b/lib/librte_mbuf/rte_mbuf.h @@ -836,8 +836,9 @@ rte_mbuf_refcnt_update(struct rte_mbuf *m, int16_t value) * reference counter can occur. */ if (likely(rte_mbuf_refcnt_read(m) == 1)) { - rte_mbuf_refcnt_set(m, 1 + value); - return 1 + value; + ++value; + rte_mbuf_refcnt_set(m, value); + return value; } return __rte_mbuf_refcnt_update(m, value); @@ -927,8 +928,9 @@ rte_mbuf_ext_refcnt_update(struct rte_mbuf_ext_shared_info *shinfo, int16_t value) { if (likely(rte_mbuf_ext_refcnt_read(shinfo) == 1)) { - rte_mbuf_ext_refcnt_set(shinfo, 1 + value); - return 1 + value; + ++value; + rte_mbuf_ext_refcnt_set(shinfo, value); + return value; } return (uint16_t)rte_atomic16_add_return(&shinfo->refcnt_atomic, value); -- 2.20.1