mbuf: fix reference counter integer promotion
authorAndy Green <andy@warmcat.com>
Thu, 17 May 2018 13:49:27 +0000 (21:49 +0800)
committerThomas Monjalon <thomas@monjalon.net>
Sun, 20 May 2018 22:20:28 +0000 (00:20 +0200)
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 <andy@warmcat.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
lib/librte_mbuf/rte_mbuf.h

index eab13c6..8a2dae2 100644 (file)
@@ -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);