linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/16] bitfield: tidy up bitfield.h
@ 2025-12-12 19:37 david.laight.linux
  2025-12-12 19:37 ` [PATCH v2 01/16] nfp: Call FIELD_PREP() in NFP_ETH_SET_BIT_CONFIG() wrapper david.laight.linux
                   ` (15 more replies)
  0 siblings, 16 replies; 23+ messages in thread
From: david.laight.linux @ 2025-12-12 19:37 UTC (permalink / raw)
  To: Yury Norov, Rasmus Villemoes, linux-kernel, linux-usb,
	Geert Uytterhoeven, Alexandre Belloni, Jonathan Cameron, Crt Mori,
	Richard Genoud, Andy Shevchenko, Luo Jie, Peter Zijlstra,
	Jakub Kicinski, netdev, David S . Miller, Mika Westerberg,
	Andreas Noever, Yehezkel Bernat, Nicolas Frattaroli
  Cc: David Laight

From: David Laight <david.laight.linux@gmail.com>

I noticed some very long (18KB) error messages from the compiler.
Turned out they were errors on lines that passed GENMASK() to FIELD_PREP().
Since most of the #defines are already statement functions the values
can be copied to locals so the actual parameters only get expanded once.

The 'bloat' is reduced further by using a simple test to ensure 'reg'
is large enough, slightly simplifying the test for constant 'val' and
only checking 'reg' and 'val' when the parameters are present.

The first two patches are slightly problematic.

drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp_eth.c manages to use
a #define that should be an internal to bitfield.h, the changed file
is actually more similar to the previous version.

drivers/thunderbolt/tb.h passes a bifield to FIELD_GET(), these can't
be used with sizeof, typeof or __auto_type.
The existing FIELD_GET() uses _Generic(); gcc treats 'u32 foo:8' as
'unsigned char' and clang treats 'u32 foo:n' as 'unsigned int'.
So the code currentyly compiles 'by accident', pass 'u32 foo:6' and
gcc will error the attempt to use typeof with a bitfield.
For v2 fixed by changing the structure definition to use u8 for the
relevant field.

Both changes may need to to through the same tree as the header file changes.

The changes are based on 'next' and contain the addition of field_prep()
and field_get() for non-constant values.

I also know it is the merge window.
I expect to be generating a v3 in the new year (someone always has a comment).

Changes for v2:
- Change thunderbolt header (see above).
- Fix variable name re-use in FIELD_PREP_WM16()
- Use 'mask' (not _mask) in __BF_SHIFT().
The changes to bitfield.h have been split into multiple patches,
but the actual final file only has whitespace differences.

David Laight (16):
  nfp: Call FIELD_PREP() in NFP_ETH_SET_BIT_CONFIG() wrapper
  thunderbolt: Don't pass a bitfield to FIELD_GET
  bitmap: Use FIELD_PREP() in expansion of FIELD_PREP_WM16()
  bitfield: Copy #define parameters to locals
  bitfield: Merge __field_prep/get() into field_prep/get()
  bitfield: Remove some pointless casts
  bitfield: FIELD_MODIFY: Only do a single read/write on  the target
  bitfield: Simplify __BF_FIELD_CHECK_REG()
  bitfield: Rename __FIELD_PREP/GET() to __BF_FIELD_PREP/GET()
  bitfield: Split the 'val' check out of __BF_FIELD_CHECK_MASK()
  bitfield: Common up validation of the mask parameter
  bitfield: Remove leading _ from #define formal parameter names
  bitfield: Reduce indentation
  bitfield: Add comment block for the host/fixed endian functions
  bitfield: Update comments for le/be functions
  build_bug.h; Remove __BUILD_BUG_ON_NOT_POWER_OF_2()

 .../netronome/nfp/nfpcore/nfp_nsp_eth.c       |  16 +-
 drivers/thunderbolt/tb_regs.h                 |  16 +-
 include/linux/bitfield.h                      | 278 ++++++++++--------
 include/linux/build_bug.h                     |   2 -
 include/linux/hw_bitfield.h                   |  21 +-
 5 files changed, 175 insertions(+), 158 deletions(-)

-- 
2.39.5


^ permalink raw reply	[flat|nested] 23+ messages in thread

end of thread, other threads:[~2025-12-14 13:17 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-12-12 19:37 [PATCH v2 0/16] bitfield: tidy up bitfield.h david.laight.linux
2025-12-12 19:37 ` [PATCH v2 01/16] nfp: Call FIELD_PREP() in NFP_ETH_SET_BIT_CONFIG() wrapper david.laight.linux
2025-12-12 23:10   ` Jakub Kicinski
2025-12-12 19:37 ` [PATCH v2 02/16] thunderbolt: Don't pass a bitfield to FIELD_GET david.laight.linux
2025-12-13  2:28   ` Yury Norov
2025-12-13 10:01     ` David Laight
2025-12-13 22:14       ` David Laight
2025-12-12 19:37 ` [PATCH v2 03/16] bitmap: Use FIELD_PREP() in expansion of FIELD_PREP_WM16() david.laight.linux
2025-12-12 19:37 ` [PATCH v2 04/16] bitfield: Copy #define parameters to locals david.laight.linux
2025-12-12 19:37 ` [PATCH v2 05/16] bitfield: Merge __field_prep/get() into field_prep/get() david.laight.linux
2025-12-12 19:37 ` [PATCH v2 06/16] bitfield: Remove some pointless casts david.laight.linux
2025-12-12 19:37 ` [PATCH v2 07/16] bitfield: FIELD_MODIFY: Only do a single read/write on the target david.laight.linux
2025-12-12 19:37 ` [PATCH v2 08/16] bitfield: Simplify __BF_FIELD_CHECK_REG() david.laight.linux
2025-12-12 19:37 ` [PATCH v2 09/16] bitfield: Rename __FIELD_PREP/GET() to __BF_FIELD_PREP/GET() david.laight.linux
2025-12-12 19:37 ` [PATCH v2 10/16] bitfield: Split the 'val' check out of __BF_FIELD_CHECK_MASK() david.laight.linux
2025-12-12 19:37 ` [PATCH v2 11/16] bitfield: Common up validation of the mask parameter david.laight.linux
2025-12-14  6:19   ` kernel test robot
2025-12-14 13:17     ` David Laight
2025-12-12 19:37 ` [PATCH v2 12/16] bitfield: Remove leading _ from #define formal parameter names david.laight.linux
2025-12-12 19:37 ` [PATCH v2 13/16] bitfield: Reduce indentation david.laight.linux
2025-12-12 19:37 ` [PATCH v2 14/16] bitfield: Add comment block for the host/fixed endian functions david.laight.linux
2025-12-12 19:37 ` [PATCH v2 15/16] bitfield: Update comments for le/be functions david.laight.linux
2025-12-12 19:37 ` [PATCH v2 16/16] build_bug.h; Remove __BUILD_BUG_ON_NOT_POWER_OF_2() david.laight.linux

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).