From: David Laight <david.laight.linux@gmail.com>
To: Andy Shevchenko <andriy.shevchenko@intel.com>
Cc: Yury Norov <yury.norov@gmail.com>,
Rasmus Villemoes <linux@rasmusvillemoes.dk>,
linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org,
Geert Uytterhoeven <geert+renesas@glider.be>,
Alexandre Belloni <alexandre.belloni@bootlin.com>,
Jonathan Cameron <Jonathan.Cameron@huawei.com>,
Crt Mori <cmo@melexis.com>,
Richard Genoud <richard.genoud@bootlin.com>,
Luo Jie <quic_luoj@quicinc.com>,
Peter Zijlstra <peterz@infradead.org>,
Jakub Kicinski <kuba@kernel.org>,
netdev@vger.kernel.org, "David S . Miller" <davem@davemloft.net>,
Simon Horman <simon.horman@netronome.com>,
Mika Westerberg <mika.westerberg@linux.intel.com>,
Andreas Noever <andreas.noever@gmail.com>,
Yehezkel Bernat <YehezkelShB@gmail.com>,
Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
Subject: Re: [PATCH 4/9] bitfield: Copy #define parameters to locals
Date: Tue, 9 Dec 2025 19:11:48 +0000 [thread overview]
Message-ID: <20251209191148.16b7fdee@pumpkin> (raw)
In-Reply-To: <aThFlDZVFBEyBhFq@smile.fi.intel.com>
On Tue, 9 Dec 2025 17:51:48 +0200
Andy Shevchenko <andriy.shevchenko@intel.com> wrote:
> On Tue, Dec 09, 2025 at 10:03:08AM +0000, david.laight.linux@gmail.com wrote:
>
> > Use __auto_type to take copies of parameters to both ensure they are
> > evaluated only once and to avoid bloating the pre-processor output.
> > In particular 'mask' is likely to be GENMASK() and the expension
> > of FIELD_GET() is then about 18KB.
> >
> > Remove any extra (), update kerneldoc.
>
> > Consistently use xxx for #define formal parameters and _xxx for
> > local variables.
>
> Okay, I commented below, and I think this is too huge to be in this commit.
> Can we make it separate?
I originally wrote a much longer patch set, then merged some to reduce
the number of patches - you can't win really.
>
> > Rather than use (typeof(mask))(val) to ensure bits aren't lost when
> > val is shifted left, use '__auto_type _val = 1 ? (val) : _mask;'
> > relying on the ?: operator to generate a type that is large enough.
> >
> > Remove the (typeof(mask)) cast from __FIELD_GET(), it can only make
> > a difference if 'reg' is larger than 'mask' and the caller cares about
> > the actual type.
> > Note that mask usually comes from GENMASK() and is then 'unsigned long'.
> >
> > Rename the internal defines __FIELD_PREP to __BF_FIELD_PREP and
> > __FIELD_GET to __BF_FIELD_GET.
> >
> > Now that field_prep() and field_get() copy their parameters there is
> > no need for the __field_prep() and __field_get() defines.
> > But add a define to generate the required 'shift' to use in both defines.
>
> ...
>
> > -#define __BF_FIELD_CHECK_MASK(_mask, _val, _pfx) \
> > +#define __BF_FIELD_CHECK_MASK(mask, val, pfx) \
> > ({ \
> > - BUILD_BUG_ON_MSG(!__builtin_constant_p(_mask), \
> > - _pfx "mask is not constant"); \
> > - BUILD_BUG_ON_MSG((_mask) == 0, _pfx "mask is zero"); \
> > - BUILD_BUG_ON_MSG(__builtin_constant_p(_val) ? \
> > - ~((_mask) >> __bf_shf(_mask)) & \
> > - (0 + (_val)) : 0, \
> > - _pfx "value too large for the field"); \
> > - __BUILD_BUG_ON_NOT_POWER_OF_2((_mask) + \
> > - (1ULL << __bf_shf(_mask))); \
> > + BUILD_BUG_ON_MSG(!__builtin_constant_p(mask), \
> > + pfx "mask is not constant"); \
> > + BUILD_BUG_ON_MSG((mask) == 0, _pfx "mask is zero"); \
> > + BUILD_BUG_ON_MSG(__builtin_constant_p(val) ? \
> > + ~((mask) >> __bf_shf(mask)) & \
> > + (0 + (val)) : 0, \
> > + pfx "value too large for the field"); \
> > + __BUILD_BUG_ON_NOT_POWER_OF_2((mask) + \
> > + (1ULL << __bf_shf(mask))); \
> > })
>
> I looks like renaming parameters without any benefit, actually the opposite
> it's very hard to see if there is any interesting change here. Please, drop
> this or make it clear to focus only on the things that needs to be changed.
I'm pretty sure there are no other changes in that bit.
(The entire define is pretty much re-written in a later patch and I
did want to separate the changes.)
I wanted to the file to be absolutely consistent with the parameter/variable
names.
Plausibly the scheme could be slightly different:
'user' parameters are 'xxx', '__auto_type' variables are '_xxx'.
But internal defines that evaluate/expand parameters more than once are
'_xxx' and must be 'copied' by an outer define.
David
next prev parent reply other threads:[~2025-12-09 19:11 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-09 10:03 [PATCH 0/9] bitfield: tidy up bitfield.h david.laight.linux
2025-12-09 10:03 ` [PATCH 1/9] nfp: Call FIELD_PREP() in NFP_ETH_SET_BIT_CONFIG() wrapper david.laight.linux
2025-12-10 9:29 ` Jakub Kicinski
2025-12-10 10:04 ` David Laight
2025-12-09 10:03 ` [PATCH 2/9] thunderblot: Don't pass a bitfield to FIELD_GET david.laight.linux
2025-12-10 5:56 ` Mika Westerberg
2025-12-10 9:34 ` David Laight
2025-12-10 9:41 ` Mika Westerberg
2025-12-10 10:18 ` David Laight
2025-12-10 18:13 ` Yury Norov
2025-12-10 20:23 ` David Laight
2025-12-09 10:03 ` [PATCH 3/9] bitmap: Use FIELD_PREP() in expansion of FIELD_PREP_WM16() david.laight.linux
2025-12-09 15:46 ` Andy Shevchenko
2025-12-09 18:54 ` David Laight
2025-12-10 19:18 ` Nicolas Frattaroli
2025-12-10 20:59 ` David Laight
2025-12-11 12:50 ` Nicolas Frattaroli
2025-12-11 17:52 ` David Laight
2025-12-09 10:03 ` [PATCH 4/9] bitfield: Copy #define parameters to locals david.laight.linux
2025-12-09 15:51 ` Andy Shevchenko
2025-12-09 19:11 ` David Laight [this message]
2025-12-09 21:54 ` Andy Shevchenko
2025-12-10 18:45 ` Yury Norov
2025-12-09 10:03 ` [PATCH 5/9] bitfield: FIELD_MODIFY: Only do a single read/write on the target david.laight.linux
2025-12-09 10:03 ` [PATCH 6/9] bitfield: Update sanity checks david.laight.linux
2025-12-09 10:03 ` [PATCH 7/9] bitfield: Reduce indentation david.laight.linux
2025-12-09 10:03 ` [PATCH 8/9] bitfield: Add comment block for the host/fixed endian functions david.laight.linux
2025-12-09 15:53 ` Andy Shevchenko
2025-12-10 9:23 ` Jakub Kicinski
2025-12-10 10:08 ` David Laight
2025-12-11 5:26 ` Jakub Kicinski
2025-12-09 10:03 ` [PATCH 9/9] bitfield: Update comments for le/be functions david.laight.linux
2025-12-10 18:20 ` [PATCH 0/9] bitfield: tidy up bitfield.h Yury Norov
2025-12-10 22:40 ` David Laight
2025-12-11 10:51 ` David Laight
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251209191148.16b7fdee@pumpkin \
--to=david.laight.linux@gmail.com \
--cc=Jonathan.Cameron@huawei.com \
--cc=YehezkelShB@gmail.com \
--cc=alexandre.belloni@bootlin.com \
--cc=andreas.noever@gmail.com \
--cc=andriy.shevchenko@intel.com \
--cc=cmo@melexis.com \
--cc=davem@davemloft.net \
--cc=geert+renesas@glider.be \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=linux@rasmusvillemoes.dk \
--cc=mika.westerberg@linux.intel.com \
--cc=netdev@vger.kernel.org \
--cc=nicolas.frattaroli@collabora.com \
--cc=peterz@infradead.org \
--cc=quic_luoj@quicinc.com \
--cc=richard.genoud@bootlin.com \
--cc=simon.horman@netronome.com \
--cc=yury.norov@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).