On Mon, May 21, 2018 at 10:01:08AM +0800, Andy Green wrote:
> /projects/lagopus/src/dpdk/build/include/rte_ip.h:
> In function 'rte_ipv4_udptcp_cksum':
> /projects/lagopus/src/dpdk/build/include/rte_byteorder.h:
> 51:24: warning: conversion from 'long unsigned int' to
> 'uint32_t' {aka 'unsigned int'} may change value
> [-Wconversion]
> #define rte_bswap16(x) ((uint16_t)
> (__builtin_constant_p(x) ? \
> ^
> /projects/lagopus/src/dpdk/build/include/rte_byteorder.h:
> 85:29: note: in expansion of macro 'rte_bswap16'
> #define rte_be_to_cpu_16(x) rte_bswap16(x)
> ^~~~~~~~~~~
> /projects/lagopus/src/dpdk/build/include/rte_ip.h:321:11:
> note: in expansion of macro 'rte_be_to_cpu_16'
> l4_len = rte_be_to_cpu_16(ipv4_hdr->total_length) -
> ^~~~~~~~~~~~~~~~
>
> Also with this one, it is a cast that always occurred
> and is just being done explicitly, with no changes to
> the generated code.
>
> The warning stack is misleading, it points to the last
> element in the macro that produced the lhs of the subtraction
> above. But the only "unsigned long int" in the expression is
> the result of the sizeof() on the rhs, it promotes the
> subtraction result to unsigned long. So the error actually
> relates to the result of the outer subtraction.
>
> The actual error is "you are trying to put an unsigned long
> into a uint32_t". We always did so, the fix is just to inform
> the compiler it is intentional with an explicit cast.
>
> Fixes: 6006818cfb ("net: new checksum functions")
> Signed-off-by: Andy Green <a...@warmcat.com>
> ---
> lib/librte_net/rte_ip.h | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
Acked-by: Bruce Richardson <bruce.richard...@intel.com>