On Fri, 2015-10-16 at 21:50 +0300, Sergei Shtylyov wrote: > On 10/16/2015 09:04 PM, Joe Perches wrote: > > >>>> BITS_RX_EN is an 'unsigned long' constant, so the ones complement of that > >>>> has bits set that do not fit into a 32-bit variable on 64-bit > >>>> architectures, > >>>> which causes a harmless gcc warning: > >>> ... > >>>> static void hix5hd2_port_disable(struct hix5hd2_priv *priv) > >>>> { > >>>> - writel_relaxed(~(BITS_RX_EN | BITS_TX_EN), priv->base + PORT_EN); > >>>> + writel_relaxed(~(u32)(BITS_RX_EN | BITS_TX_EN), priv->base + > >>>> PORT_EN); > >>>> writel_relaxed(0, priv->base + DESC_WR_RD_ENA); > >>> > >>> ISTM that just means that the constants shouldn't be 'long'. > >> > >> Right, but that would probably mean changing the BIT() macro or not using > >> it > >> here. In the past I've argued against using that macro, but I've given > >> up that fight. > > > > Fight on... (Somebody must have gone to USC here) > > > > There might be value in aefin BIT_U32 macro. > > Maybe BIT_U64 too. > > There's BIT_ULL() already.
I know, but symmetry is good. I think there'd be no harm in adding it. Perhaps adding all the sized variants would be useful. Something like: #define BIT_OF_TYPE(type, nr) \ ({ \ typeof(type) rtn; \ BUILD_BUG_ON(__builtin_constant_p(nr) && \ ((nr) < 0 || \ (nr) >= sizeof(type) * BITS_PER_BYTE)); \ rtn = ((type)1) << (nr); \ rtn; \ }) #define BIT_U8(nr) BIT_OF_TYPE(u8, nr) #define BIT_U16(nr) BIT_OF_TYPE(u16, nr) #define BIT_U32(nr) BIT_OF_TYPE(u32, nr) #define BIT_U64(nr) BIT_OF_TYPE(u64, nr) -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html