[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20171212170437.4b129e50@cakuba.netronome.com>
Date: Tue, 12 Dec 2017 17:04:37 -0800
From: Jakub Kicinski <kubakici@...pl>
To: Al Viro <viro@...IV.linux.org.uk>
Cc: Linus Torvalds <torvalds@...ux-foundation.org>,
netdev@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [RFC][PATCH] new byteorder primitives -
..._{replace,get}_bits()
On Wed, 13 Dec 2017 00:36:59 +0000, Al Viro wrote:
> On Tue, Dec 12, 2017 at 03:59:33PM -0800, Jakub Kicinski wrote:
> > > +static __always_inline __##type type##_replace_bits(__##type old, \
> > > + base val, base mask) \
> > > +{ \
> > > + __##type m = to(mask); \
> > > + if (__builtin_constant_p(val) && \
> >
> > Is the lack of a __builtin_constant_p(mask) test intentional? Sometimes
> > the bitfield is a packed array and people may have a helper to which
> > only the mask is passed as non-constant and the value is implied by the
> > helper, thus constant.
>
> If the mask in non-constant, we probably shouldn't be using that at all;
> could you show a real-world example where that would be the case?
FIELD_* macros explicitly forbid this, since the code would be...
suboptimal with the runtime ffsl. Real life examples are the hackish
macro NFP_ETH_SET_BIT_CONFIG() in
drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp_eth.c
I remember there was also some Renesas code.. maybe this:
https://patchwork.kernel.org/patch/9881279/
it looks like cpg_z_clk_recalc_rate() and cpg_z2_clk_recalc_rate() only
differ in mask.
Powered by blists - more mailing lists