On 03/07/2020 18:46, kernel test robot wrote:
> In file included from include/linux/skbuff.h:31,
> from include/linux/if_ether.h:19,
> from include/uapi/linux/ethtool.h:19,
> from include/linux/ethtool.h:18,
> from include/linux/netdevice.h:37,
> from drivers/net/ethernet/sfc/net_driver.h:13,
> from drivers/net/ethernet/sfc/ef100.c:12:
> drivers/net/ethernet/sfc/ef100.c: In function
> 'ef100_pci_parse_continue_entry':
>>> include/linux/dma-mapping.h:139:25: warning: conversion from 'long long
>>> unsigned int' to 'dma_addr_t' {aka 'unsigned int'} changes value from
>>> '18446744073709551615' to '4294967295' [-Woverflow]
> 139 | #define DMA_BIT_MASK(n) (((n) == 64) ? ~0ULL : ((1ULL<<(n))-1))
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>> drivers/net/ethernet/sfc/ef100.c:144:6: note: in expansion of macro
>>> 'DMA_BIT_MASK'
> 144 | DMA_BIT_MASK(ESF_GZ_TX_SEND_ADDR_WIDTH),
> | ^~~~~~~~~~~~
I think this is spurious? DMA_BIT_MASK() looks likeit's intended to
return a dma_addr_t, and the conversion does the right thing (truncate
to 32 bits), so maybe all that's needed is some suitable annotation to
make the compiler happy. Would casting explicitly to dma_addr_t do it?
-ed