[dpdk-dev,v4,13/23] rte_mbuf.h: explicit casts to uint16 to avoid warnings
Checks
Commit Message
Signed-off-by: Andy Green <andy@warmcat.com>
---
lib/librte_mbuf/rte_mbuf.h | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
Comments
On Mon, May 14, 2018 at 01:10:32PM +0800, Andy Green wrote:
> Signed-off-by: Andy Green <andy@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;
>
On 05/17/2018 06:58 PM, Bruce Richardson wrote:
> On Mon, May 14, 2018 at 01:10:32PM +0800, Andy Green wrote:
>> Signed-off-by: Andy Green <andy@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.
OK.
>> @@ -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.
/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;
^~~
I have added all the original warnings to the patch.
-Andy
>> @@ -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;
>>
@@ -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;
@@ -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);
@@ -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;