On Mon, May 14, 2018 at 01:10:32PM +0800, Andy Green wrote: > Signed-off-by: Andy Green <a...@warmcat.com> > --- > lib/librte_mbuf/rte_mbuf.h | 15 ++++++++------- > 1 file changed, 8 insertions(+), 7 deletions(-) > > diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h > index 169f3d3b0..3cd76abbc 100644 > --- a/lib/librte_mbuf/rte_mbuf.h > +++ b/lib/librte_mbuf/rte_mbuf.h > @@ -1580,7 +1580,7 @@ static inline void rte_pktmbuf_detach(struct rte_mbuf > *m) > mbuf_size = (uint32_t)sizeof(struct rte_mbuf) + priv_size; > buf_len = rte_pktmbuf_data_room_size(mp); > > - m->priv_size = priv_size; > + m->priv_size = (uint16_t)priv_size; > m->buf_addr = (char *)m + mbuf_size; > m->buf_iova = rte_mempool_virt2iova(m) + mbuf_size; > m->buf_len = (uint16_t)buf_len;
I think a better fix for this is to change priv_size to be uint16_t. There is no reason for it to be a 32-bit value. > @@ -1905,7 +1905,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); > What is the error message here? The cast isn't wrong, it just seems like we shouldn't need it. I suppose it's implicit promotion being done in the subtraction operation. > @@ -1966,7 +1966,7 @@ static inline char *rte_pktmbuf_adj(struct rte_mbuf *m, > uint16_t len) > return NULL; > > m->data_len = (uint16_t)(m->data_len - len); > - m->data_off += len; > + m->data_off = (uint16_t)(m->data_off + len); > m->pkt_len = (m->pkt_len - len); > return (char *)m->buf_addr + m->data_off; > } > @@ -2079,7 +2079,7 @@ static inline int rte_pktmbuf_chain(struct rte_mbuf > *head, struct rte_mbuf *tail > cur_tail->next = tail; > > /* accumulate number of segments and total length. */ > - head->nb_segs += tail->nb_segs; > + head->nb_segs = (uint16_t)(head->nb_segs + tail->nb_segs); > head->pkt_len += tail->pkt_len; > > /* pkt_len is only set in the head */ > @@ -2109,7 +2109,8 @@ rte_validate_tx_offload(const struct rte_mbuf *m) > return 0; > > if (ol_flags & PKT_TX_OUTER_IP_CKSUM) > - inner_l3_offset += m->outer_l2_len + m->outer_l3_len; > + inner_l3_offset += (unsigned int)(m->outer_l2_len + > + m->outer_l3_len); > > /* Headers are fragmented */ > if (rte_pktmbuf_data_len(m) < inner_l3_offset + m->l3_len + m->l4_len) > @@ -2154,7 +2155,7 @@ rte_validate_tx_offload(const struct rte_mbuf *m) > static inline int > rte_pktmbuf_linearize(struct rte_mbuf *mbuf) > { > - int seg_len, copy_len; > + size_t seg_len, copy_len; > struct rte_mbuf *m; > struct rte_mbuf *m_next; > char *buffer; > @@ -2169,7 +2170,7 @@ rte_pktmbuf_linearize(struct rte_mbuf *mbuf) > return -1; > > buffer = rte_pktmbuf_mtod_offset(mbuf, char *, mbuf->data_len); > - mbuf->data_len = (uint16_t)(mbuf->pkt_len); > + mbuf->data_len = (uint16_t)mbuf->pkt_len; > > /* Append data from next segments to the first one */ > m = mbuf->next; >