From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bruce Richardson Subject: Re: [PATCH v6 7/8] rte_mbuf.h: add and subtract explicitly to avoid promotion Date: Mon, 21 May 2018 14:10:55 +0100 Message-ID: <20180521131055.GG22944@bricha3-MOBL.ger.corp.intel.com> References: <152686781484.58694.14737673447518527445.stgit@localhost.localdomain> <152686808848.58694.3396046717951220668.stgit@localhost.localdomain> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: dev@dpdk.org, thomas@monjalon.net To: Andy Green Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by dpdk.org (Postfix) with ESMTP id 84D557CD6 for ; Mon, 21 May 2018 15:11:00 +0200 (CEST) Content-Disposition: inline In-Reply-To: <152686808848.58694.3396046717951220668.stgit@localhost.localdomain> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On Mon, May 21, 2018 at 10:01:28AM +0800, Andy Green wrote: > /projects/lagopus/src/dpdk/build/include/rte_mbuf.h: > In function 'rte_pktmbuf_prepend': > /projects/lagopus/src/dpdk/build/include/rte_mbuf.h: > 1908:17: warning: conversion from 'int' to 'uint16_t' > {aka 'short unsigned int'} may change value [-Wconversion] > m->data_off -= len; > ^~~ > m->data_off is a uint16_t > > uint16_t data_off; > > len (a uint16_t) is promoted to an int using -=. Do the > subtraction explicitly and cast the result to uint16_t. > > - m->data_off -= len; > + m->data_off = (uint16_t)(m->data_off - len); > > The below += or -= changes are solving the same thing. > > /projects/lagopus/src/dpdk/build/include/rte_mbuf.h: > In function 'rte_pktmbuf_adj': > /projects/lagopus/src/dpdk/build/include/rte_mbuf.h: > 1969:17: warning: conversion from 'int' to 'uint16_t' > {aka 'short unsigned int'} may change value [-Wconversion] > m->data_off += len; > ^~~ > /projects/lagopus/src/dpdk/build/include/rte_mbuf.h: > In function 'rte_pktmbuf_chain': > /projects/lagopus/src/dpdk/build/include/rte_mbuf.h: > 2082:19: warning: conversion from 'int' to 'uint16_t' > {aka 'short unsigned int'} may change value [-Wconversion] > head->nb_segs += tail->nb_segs; > ^~~~ > Also uint16_t > > uint16_t nb_segs; /**< Number of segments. */ > > Fixes: 08b563ffb1 ("mbuf: replace data pointer by an offset") > Signed-off-by: Andy Green > --- > lib/librte_mbuf/rte_mbuf.h | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h > index a0423a548..beb104c69 100644 > --- a/lib/librte_mbuf/rte_mbuf.h > +++ b/lib/librte_mbuf/rte_mbuf.h > @@ -1908,7 +1908,7 @@ static inline char *rte_pktmbuf_prepend(struct rte_mbuf *m, > if (unlikely(len > rte_pktmbuf_headroom(m))) > return NULL; > > - m->data_off -= len; > + m->data_off = (uint16_t)(m->data_off - len); > m->data_len = (uint16_t)(m->data_len + len); > m->pkt_len = (m->pkt_len + len); > Code change looks ok to me, again it wouldn't hurt to have a comment explaining the absense of -=, but otherwise: Acked-by: Bruce Richardson