Re: [RFC PATCH 0/2] Helper to isolate least-significant bit
From: Kuan-Wei Chiu
Date: Fri Jan 09 2026 - 12:21:08 EST
Hi Petr,
On Fri, Jan 09, 2026 at 05:41:34PM +0100, Petr Tesarik wrote:
> Isolation of the least significant bit can be achieved with 3 basic
> ALU operations which are already open-coded in various places in the
> kernel.
>
> However, since other places less efficient constructs, for example
> `1UL << ffs(x)`, I assume the trick is known only to some authors, and
> it's worth adding a helper to promote its use.
Just out of curiosity, are there any existing users employing 1 <<
ffs(x) (or other inefficient variants) in performance-critical
hotpaths?
>From a quick grep, I only found one instance in drivers/clk/ti/mux.c
matching the 1 << ffs(x) pattern. However, this doesn't appear to be a
bottleneck since it is followed by ti_clk_ll_ops->clk_writel(...). The
latency of the MMIO write would likely overshadow the savings of a few
ALU cycles.
Additionally, it seems that patch #2 focuses on replacing the x & -x
implementation with the new API, rather than converting inefficient
constructs like 1 << ffs(x) to use ffs_val().
Regards,
Kuan-Wei
>
> Petr Tesarik (2):
> bits: introduce ffs_val()
> treewide, bits: use ffs_val() where it is open-coded
>
> arch/alpha/include/asm/bitops.h | 2 +-
> arch/alpha/kernel/core_cia.c | 2 +-
> arch/alpha/kernel/smp.c | 2 +-
> arch/arc/include/asm/bitops.h | 2 +-
> arch/m68k/include/asm/bitops.h | 12 +++++------
> arch/mips/dec/ecc-berr.c | 2 +-
> arch/mips/include/asm/bitops.h | 4 ++--
> arch/mips/pci/pci-malta.c | 4 ++--
> arch/powerpc/include/asm/bitops.h | 4 ++--
> arch/powerpc/kvm/e500_mmu_host.c | 2 +-
> arch/powerpc/lib/sstep.c | 2 +-
> arch/powerpc/xmon/ppc-dis.c | 3 ++-
> arch/powerpc/xmon/ppc-opc.c | 6 +++---
> arch/s390/include/asm/bitops.h | 2 +-
> arch/xtensa/include/asm/bitops.h | 6 +++---
> arch/xtensa/kernel/traps.c | 2 +-
> drivers/gpu/drm/gma500/psb_intel_sdvo.c | 2 +-
> drivers/iommu/dma-iommu.c | 2 +-
> drivers/net/ethernet/netronome/nfp/bpf/jit.c | 2 +-
> drivers/net/usb/cdc_ncm.c | 4 ++--
> include/asm-generic/div64.h | 4 ++--
> include/linux/bitfield.h | 3 ++-
> include/linux/bitops.h | 1 +
> include/linux/ffs_val.h | 21 ++++++++++++++++++++
> include/linux/log2.h | 2 +-
> include/linux/min_heap.h | 5 +++--
> lib/math/gcd.c | 4 ++--
> lib/sort.c | 3 ++-
> net/bluetooth/mgmt.c | 2 +-
> net/netfilter/nft_set_pipapo.c | 2 +-
> 30 files changed, 70 insertions(+), 44 deletions(-)
> create mode 100644 include/linux/ffs_val.h
>
> --
> 2.52.0
>