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

Reply via email to