On 31/03/2023 07:54, Dan Carpenter wrote: > Hello Edward Cree, > > The patch 2245eb0086d8: "sfc: add functions to insert encap matches > into the MAE" from Mar 27, 2023, leads to the following Smatch static > checker warning: > > drivers/net/ethernet/sfc/mae.c:1002 efx_mae_register_encap_match() > warn: this cast is a no-op ... > 998 MCDI_STRUCT_SET_WORD_BE(match_crit, MAE_ENC_FIELD_PAIRS_ENC_ETHER_TYPE_BE_MASK, > 999 ~(__be16)0); > > But for these ones the u16 is type promoted to int and so ~0 is negative > one and will be sign extended. The cast does nothing. > > 1000 MCDI_STRUCT_SET_WORD_BE(match_crit, MAE_ENC_FIELD_PAIRS_ENC_L4_DPORT_BE, > 1001 encap->udp_dport); > --> 1002 MCDI_STRUCT_SET_WORD_BE(match_crit, MAE_ENC_FIELD_PAIRS_ENC_L4_DPORT_BE_MASK, > 1003 ~(__be16)0); > > Same. The casts are there for Sparse reasons (endianness), rather than particularly caring about the size (although that conveniently documents to the reader the width of the MCDI field). We could instead use (__be16)~0 but I believe some versions of sparse will warn on this (I forget the details). To the compiler (i.e. outside of sparse) the cast is indeed a no-op, but this is fine. I would consider this Smatch warning a false positive; lmk if you disagree. -ed