From: Petr Tesarik <ptesarik@suse.com>
To: Yury Norov <ynorov@nvidia.com>
Cc: Yury Norov <yury.norov@gmail.com>,
Rasmus Villemoes <linux@rasmusvillemoes.dk>,
Richard Henderson <richard.henderson@linaro.org>,
Matt Turner <mattst88@gmail.com>,
Magnus Lindholm <linmag7@gmail.com>,
Vineet Gupta <vgupta@kernel.org>,
Geert Uytterhoeven <geert@linux-m68k.org>,
"Maciej W. Rozycki" <macro@orcam.me.uk>,
Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
Madhavan Srinivasan <maddy@linux.ibm.com>,
Michael Ellerman <mpe@ellerman.id.au>,
Heiko Carstens <hca@linux.ibm.com>,
Vasily Gorbik <gor@linux.ibm.com>,
Alexander Gordeev <agordeev@linux.ibm.com>,
Chris Zankel <chris@zankel.net>,
Max Filippov <jcmvbkbc@gmail.com>,
Patrik Jakobsson <patrik.r.jakobsson@gmail.com>,
Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Maxime Ripard <mripard@kernel.org>,
Thomas Zimmermann <tzimmermann@suse.de>,
David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>,
Robin Murphy <robin.murphy@arm.com>,
Joerg Roedel <joro@8bytes.org>, Will Deacon <will@kernel.org>,
Jakub Kicinski <kuba@kernel.org>,
Andrew Lunn <andrew+netdev@lunn.ch>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Paolo Abeni <pabeni@redhat.com>,
Oliver Neukum <oliver@neukum.org>, Arnd Bergmann <arnd@arndb.de>,
Kuan-Wei Chiu <visitorckw@gmail.com>,
Andrew Morton <akpm@linux-foundation.org>,
Marcel Holtmann <marcel@holtmann.org>,
Johan Hedberg <johan.hedberg@gmail.com>,
Luiz Augusto von Dentz <luiz.dentz@gmail.com>,
Pablo Neira Ayuso <pablo@netfilter.org>,
Florian Westphal <fw@strlen.de>,
linux-kernel@vger.kernel.org
Subject: Re: [RFC PATCH 1/2] bits: introduce ffs_val()
Date: Fri, 9 Jan 2026 20:27:11 +0100 [thread overview]
Message-ID: <20260109202711.5f356b3e@mordecai> (raw)
In-Reply-To: <aWFIVrH41EPgVmbw@yury>
On Fri, 9 Jan 2026 13:26:30 -0500
Yury Norov <ynorov@nvidia.com> wrote:
> > > No need for a separate header. Just put int straight in bitops.h.
> >
> > Well, <linux/bitops.h> is a bit heavy, so I was afraid of spoiling
> > build times if I include it from <asm-generic/div64.h>, but if you say
> > it's fine, yes, why not, let's put it into bitops.h somewhere before
> > #include <asm/bitops.h>.
>
> Unless you have strong performance numbers, let's keep it in the
> bitops.h
OK.
> > > > +/**
> > > > + * ffs_val - find the value of the first set bit
> > >
> > > By definition, the value of 1st set bit is 1, just like any other set
> > > bit. :)
> >
> > I'm struggling with suitable wording. The trouble is that "find first
> > set bit" is generally understood as find the bit _position_. Maybe I
> > should say _isolate_ the bit, or something like that.
> >
> > > > + * @x: the value to search
> > > > + *
> > > > + * Unlike ffs(), which returns a bit position, ffs_val() returns the bit
> > > > + * value itself.
> > > > + *
> > > > + * Returns:
> > > > + * least significant non-zero bit, 0 if all bits are zero
> > > > + */
> > > > +#define ffs_val(x) \
> > > > +({ \
> > > > + const typeof(x) val__ = (x); \
> > >
> > > const auto? Also, are you sure it works OK with unsigned types? No
> > > warnings? Maybe add a test?
> >
> > The "const auto" is good idea. Regarding unsigned types, indeed, the
> > result of applying unary minus to any non-zero value is out of bounds
> > of an unsigned type. However, the C standard has this much to say:
> > "C’s unsigned integer types are ‘‘modulo’’ in the LIA−1 sense in that
> > overflows or out-of-bounds results silently wrap."
> >
> > Besides, this patch series does not change anything, it merely puts the
> > arithmetic inside a macro.
> >
> > > > + val__ & -val__; \
> > > > +})
> > >
> > > This macro returns in fact a mask containing LSB only, so I'd suggest
> > > to choose a name like lsb_mask().
> >
> > Mask is a terrible word, because it doesn't say if the masked bit is
> > set or clear. Even if I limit myself to the Linux kernel, it's used for
> > both in different contexts.
> >
> > What about isolate_lsb()?
>
> In bitops world, something_mask() has a very clear meaning. Consider
> GENMASK(), BITMAP_FIRST_BYTE_MASK(), __BF_FIELD_CHECK_MASK(), and so
> on.
>
> lsb_mask(), or LSB_MASK() if you prefer, is just right.
I assume you mean BITMAP_FIRST_WORD_MASK(), not btrfs-specific
BITMAP_FIRST_BYTE_MASK(), defined in fs/btrfs/extent_io.h.
But then it nicely illustrate exactly what I mean:
BIT_MASK(4) = 0x0000000000000010
GENMASK(4, 0) = 0x000000000000001f
BITMAP_FIRST_WORD_MASK(4) == 0xfffffffffffffff0
> > The only issue is that LSB may also refer to least-significant BYTE. :-(
>
> It will never mean byte because it hosts in bitops.h, not byteops.h
I'm afraid that identifiers from various sources end up next to each
other and they do not carry tags where each of them came from...
> > > This is also a replacement of BIT(ffs()), GENMASK(ffs(), 0) constructions.
> > > Can you check the kernel, and convert those patterns too? I found at least
> > > one in drivers/clk/nxp/clk-lpc32xx.c:lpc32xx_clk_div_quirk().
> >
> > Yes, there's a lot of places under drivers/ that can benefit from this
> > macro. I didn't want to spam everyone with this RFC, as we iron out the
> > details. I'm even unsure about the correct process to get such a change
> > into the kernel.
>
> If you don't want to fix every driver, it's OK. But please keep core
> kernel clean.
Yes, getting acks from all maintainers will take a lot of time even
then.
Again, thank you for all the tips!
Petr T
next prev parent reply other threads:[~2026-01-09 19:27 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-09 16:41 [RFC PATCH 0/2] Helper to isolate least-significant bit Petr Tesarik
2026-01-09 16:37 ` [RFC PATCH 1/2] bits: introduce ffs_val() Petr Tesarik
2026-01-09 17:01 ` Arnd Bergmann
2026-01-09 23:54 ` David Laight
2026-01-09 17:16 ` Yury Norov
2026-01-09 17:46 ` Petr Tesarik
2026-01-09 18:26 ` Yury Norov
2026-01-09 19:27 ` Petr Tesarik [this message]
2026-01-09 19:44 ` Yury Norov
2026-01-09 18:50 ` Arnd Bergmann
2026-01-10 10:50 ` David Laight
2026-01-12 8:15 ` Thomas Zimmermann
2026-01-12 8:58 ` Petr Tesarik
2026-01-12 11:22 ` David Laight
2026-01-13 1:40 ` Maciej W. Rozycki
2026-01-09 16:37 ` [RFC PATCH 2/2] treewide, bits: use ffs_val() where it is open-coded Petr Tesarik
2026-01-09 18:19 ` Yury Norov
2026-01-09 19:32 ` Petr Tesarik
2026-01-09 20:19 ` Yury Norov
2026-01-10 10:36 ` Maciej W. Rozycki
2026-01-10 11:54 ` David Laight
2026-01-11 3:15 ` Maciej W. Rozycki
2026-01-11 10:40 ` David Laight
2026-01-11 21:22 ` Maciej W. Rozycki
2026-01-11 23:57 ` David Laight
2026-01-12 11:21 ` Maciej W. Rozycki
2026-01-12 13:23 ` David Laight
2026-01-10 16:42 ` Kuan-Wei Chiu
2026-01-10 22:23 ` David Laight
2026-01-11 14:41 ` Kuan-Wei Chiu
2026-01-11 21:22 ` Maciej W. Rozycki
2026-01-09 17:20 ` [RFC PATCH 0/2] Helper to isolate least-significant bit Kuan-Wei Chiu
2026-01-09 18:59 ` Petr Tesarik
2026-01-09 19:26 ` Andrew Cooper
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=20260109202711.5f356b3e@mordecai \
--to=ptesarik@suse.com \
--cc=agordeev@linux.ibm.com \
--cc=airlied@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=andrew+netdev@lunn.ch \
--cc=arnd@arndb.de \
--cc=chris@zankel.net \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=fw@strlen.de \
--cc=geert@linux-m68k.org \
--cc=gor@linux.ibm.com \
--cc=hca@linux.ibm.com \
--cc=jcmvbkbc@gmail.com \
--cc=johan.hedberg@gmail.com \
--cc=joro@8bytes.org \
--cc=kuba@kernel.org \
--cc=linmag7@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@rasmusvillemoes.dk \
--cc=luiz.dentz@gmail.com \
--cc=maarten.lankhorst@linux.intel.com \
--cc=macro@orcam.me.uk \
--cc=maddy@linux.ibm.com \
--cc=marcel@holtmann.org \
--cc=mattst88@gmail.com \
--cc=mpe@ellerman.id.au \
--cc=mripard@kernel.org \
--cc=oliver@neukum.org \
--cc=pabeni@redhat.com \
--cc=pablo@netfilter.org \
--cc=patrik.r.jakobsson@gmail.com \
--cc=richard.henderson@linaro.org \
--cc=robin.murphy@arm.com \
--cc=simona@ffwll.ch \
--cc=tsbogend@alpha.franken.de \
--cc=tzimmermann@suse.de \
--cc=vgupta@kernel.org \
--cc=visitorckw@gmail.com \
--cc=will@kernel.org \
--cc=ynorov@nvidia.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
Powered by JetHome