summaryrefslogtreecommitdiff
path: root/lib/Kconfig
diff options
context:
space:
mode:
authorYury Norov <ynorov@nvidia.com>2026-05-06 13:52:03 -0400
committerYury Norov <ynorov@nvidia.com>2026-05-28 11:39:16 -0400
commit00751d655ece97fe85ce9193542ee8396fe98651 (patch)
tree4d95cb8b90000b72d4a92bbaf1c6cac29de04c2c /lib/Kconfig
parent42d9c75e8b9cae9583c228617be38ab1637fd574 (diff)
downloadlinux-stable-00751d655ece97fe85ce9193542ee8396fe98651.tar.gz
linux-stable-00751d655ece97fe85ce9193542ee8396fe98651.zip
lib/bitrev: Introduce GENERIC_BITREVERSE
The generic bit reversal implementation is controlled by !HAVE_ARCH_BITREVERSE. This makes it difficult for architectures to provide a hardware-accelerated implementation while being able to fall back to the generic version if needed. This patch adds GENERIC_BITREVERSE, so bitreverse API is controlled by BITREVERSE, GENERIC_BITREVERSE and HAVE_ARCH_BITREVERSE options. The relationship between them is described as follows: - BITREVERSE is selected by user code; it's required to generate the API; - Architectures may select HAVE_ARCH_BITREVERSE and provide an arch implementation in arch/$(ARCH)/include/asm/bitrev.h. - if HAVE_ARCH_BITREVERSE isn't set, BITREVERSE selects GENERIC_BITREVERSE; - if GENERIC_BITREVERSE is set and HAVE_ARCH_BITREVERSE is not, the kernel provides generic implementation only, and wires bitrevXX() to it. - if HAVE_ARCH_BITREVERSE is set and GENERIC_BITREVERSE is not, the arch code provides __arch_bitrevXX(), and it is wired to bitrevXX(); - if both GENERIC_BITREVERSE and HAVE_ARCH_BITREVERSE are selected, the kernel generates generic___bitrev(), but wires bitrev() to the __arch_bitrev(). The last option allows architectures to use generic___bitrev() as a fallback option. Drivers and core code should never select GENERIC_BITREVERSE or HAVE_ARCH_BITREVERSE explicitly. Architectures that require generic bitreverse API as a fallback should explicitly enable GENERIC_BITREVERSE together with HAVE_ARCH_BITREVERSE. Signed-off-by: Yury Norov <ynorov@nvidia.com>
Diffstat (limited to 'lib/Kconfig')
-rw-r--r--lib/Kconfig12
1 files changed, 12 insertions, 0 deletions
diff --git a/lib/Kconfig b/lib/Kconfig
index d8e7e89ae320..a33988adfaa3 100644
--- a/lib/Kconfig
+++ b/lib/Kconfig
@@ -54,6 +54,7 @@ config PACKING_KUNIT_TEST
config BITREVERSE
tristate
+ select GENERIC_BITREVERSE if !HAVE_ARCH_BITREVERSE
config HAVE_ARCH_BITREVERSE
bool
@@ -63,6 +64,17 @@ config HAVE_ARCH_BITREVERSE
This option enables the use of hardware bit-reversal instructions on
architectures which support such operations.
+config GENERIC_BITREVERSE
+ tristate
+ depends on BITREVERSE
+ help
+ Generic bit reversal implementation. Drivers should never enable
+ it explicitly. Instead, enable BITREVERSE.
+
+ Architectures may want to select it as a fall-back option for
+ HAVE_ARCH_BITREVERSE, when the hardware-accelerated bit reverse
+ instruction set is optional, like RISC-V ZBKB extension.
+
config ARCH_HAS_STRNCPY_FROM_USER
bool