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;
> 

Reply via email to