arch/riscv/Kconfig | 1 + arch/riscv/include/asm/bitrev.h | 55 +++++++++++++++++++++++++++ include/asm-generic/bitops/__bitrev.h | 22 +++++++++++ include/linux/bitrev.h | 20 ++-------- lib/bitrev.c | 3 -- 5 files changed, 82 insertions(+), 19 deletions(-) create mode 100644 arch/riscv/include/asm/bitrev.h create mode 100644 include/asm-generic/bitops/__bitrev.h
Add bitrev.h file to support rev8 and brev8 for riscv. Tested functionally on riscv64 QEMU with: "-M virt,acpi=on,zbkb=true,zbb=true" Changes in v3: - Fix the build issue by remving the CONFIG_HAVE_ARCH_BITREVERSE macro for byte_rev_table. - Update the riscv implementation as David suggested. - Add Reviwed-by. Changes in v2: - Define generic __bitrev8/16/32 for reuse in riscv. Jinjie Ruan (2): bitops: Define generic __bitrev8/16/32 for reuse arch/riscv: Add bitrev.h file to support rev8 and brev8 arch/riscv/Kconfig | 1 + arch/riscv/include/asm/bitrev.h | 55 +++++++++++++++++++++++++++ include/asm-generic/bitops/__bitrev.h | 22 +++++++++++ include/linux/bitrev.h | 20 ++-------- lib/bitrev.c | 3 -- 5 files changed, 82 insertions(+), 19 deletions(-) create mode 100644 arch/riscv/include/asm/bitrev.h create mode 100644 include/asm-generic/bitops/__bitrev.h -- 2.34.1
On Fri, Apr 17, 2026 at 05:31:00PM +0800, Jinjie Ruan wrote: > Add bitrev.h file to support rev8 and brev8 for riscv. > > Tested functionally on riscv64 QEMU with: > "-M virt,acpi=on,zbkb=true,zbb=true" > > Changes in v3: > - Fix the build issue by remving the CONFIG_HAVE_ARCH_BITREVERSE macro > for byte_rev_table. No arch needs byte_rev_table, except risc-v under a very certain configuration. Please find a better approach that wouldn't bloat random victims' .data section. > - Update the riscv implementation as David suggested. > - Add Reviwed-by. > > Changes in v2: > - Define generic __bitrev8/16/32 for reuse in riscv. > > Jinjie Ruan (2): > bitops: Define generic __bitrev8/16/32 for reuse > arch/riscv: Add bitrev.h file to support rev8 and brev8 > > arch/riscv/Kconfig | 1 + > arch/riscv/include/asm/bitrev.h | 55 +++++++++++++++++++++++++++ > include/asm-generic/bitops/__bitrev.h | 22 +++++++++++ > include/linux/bitrev.h | 20 ++-------- > lib/bitrev.c | 3 -- > 5 files changed, 82 insertions(+), 19 deletions(-) > create mode 100644 arch/riscv/include/asm/bitrev.h > create mode 100644 include/asm-generic/bitops/__bitrev.h > > -- > 2.34.1
On Fri, 17 Apr 2026 12:09:03 -0400 Yury Norov <ynorov@nvidia.com> wrote: > On Fri, Apr 17, 2026 at 05:31:00PM +0800, Jinjie Ruan wrote: > > Add bitrev.h file to support rev8 and brev8 for riscv. > > > > Tested functionally on riscv64 QEMU with: > > "-M virt,acpi=on,zbkb=true,zbb=true" > > > > Changes in v3: > > - Fix the build issue by remving the CONFIG_HAVE_ARCH_BITREVERSE macro > > for byte_rev_table. > > No arch needs byte_rev_table, except risc-v under a very certain > configuration. Please find a better approach that wouldn't bloat > random victims' .data section. Eh? x86 doesn't have a bit-reverse instruction. The only arch that 'select HAVE_ARCH_BITREVERSE' are arm64, arm32 (some cpu), loongarch and mips (for CPU_MIPSR6). I think you mean that no arch that sets CONFIG_HAVE_ARCH_BITREVERSE needs it except riscv. Could you globally have: select NEED_BYTE_REV_TABLE if !HAVE_ARCH_BITREVERSE and then riscv could also select it? (And isn't there a method of including files in the build based on kconfig options rather than unconditionally compiling it and getting cpp to throw the contents away?) David > > > - Update the riscv implementation as David suggested. > > - Add Reviwed-by. > > > > Changes in v2: > > - Define generic __bitrev8/16/32 for reuse in riscv. > > > > Jinjie Ruan (2): > > bitops: Define generic __bitrev8/16/32 for reuse > > arch/riscv: Add bitrev.h file to support rev8 and brev8 > > > > arch/riscv/Kconfig | 1 + > > arch/riscv/include/asm/bitrev.h | 55 +++++++++++++++++++++++++++ > > include/asm-generic/bitops/__bitrev.h | 22 +++++++++++ > > include/linux/bitrev.h | 20 ++-------- > > lib/bitrev.c | 3 -- > > 5 files changed, 82 insertions(+), 19 deletions(-) > > create mode 100644 arch/riscv/include/asm/bitrev.h > > create mode 100644 include/asm-generic/bitops/__bitrev.h > > > > -- > > 2.34.1
On 4/18/2026 2:42 AM, David Laight wrote: > On Fri, 17 Apr 2026 12:09:03 -0400 > Yury Norov <ynorov@nvidia.com> wrote: > >> On Fri, Apr 17, 2026 at 05:31:00PM +0800, Jinjie Ruan wrote: >>> Add bitrev.h file to support rev8 and brev8 for riscv. >>> >>> Tested functionally on riscv64 QEMU with: >>> "-M virt,acpi=on,zbkb=true,zbb=true" >>> >>> Changes in v3: >>> - Fix the build issue by remving the CONFIG_HAVE_ARCH_BITREVERSE macro >>> for byte_rev_table. >> >> No arch needs byte_rev_table, except risc-v under a very certain >> configuration. Please find a better approach that wouldn't bloat >> random victims' .data section. > > Eh? > x86 doesn't have a bit-reverse instruction. > The only arch that 'select HAVE_ARCH_BITREVERSE' are arm64, arm32 (some cpu), > loongarch and mips (for CPU_MIPSR6). > > I think you mean that no arch that sets CONFIG_HAVE_ARCH_BITREVERSE needs it > except riscv. > > Could you globally have: > select NEED_BYTE_REV_TABLE if !HAVE_ARCH_BITREVERSE > and then riscv could also select it? Thanks, David. I will follow your suggestion to introduce a NEED_BYTE_REVERSE_TABLE Kconfig option. This way, byte_rev_table is only compiled when !HAVE_ARCH_BITREVERSE or when an architecture (like RISC-V) explicitly selects it as a fallback. This avoids bloating the .data section for architectures that have full hardware bit-reverse support and don't need the table." > (And isn't there a method of including files in the build based on > kconfig options rather than unconditionally compiling it and getting cpp > to throw the contents away?) > > David > >> >>> - Update the riscv implementation as David suggested. >>> - Add Reviwed-by. >>> >>> Changes in v2: >>> - Define generic __bitrev8/16/32 for reuse in riscv. >>> >>> Jinjie Ruan (2): >>> bitops: Define generic __bitrev8/16/32 for reuse >>> arch/riscv: Add bitrev.h file to support rev8 and brev8 >>> >>> arch/riscv/Kconfig | 1 + >>> arch/riscv/include/asm/bitrev.h | 55 +++++++++++++++++++++++++++ >>> include/asm-generic/bitops/__bitrev.h | 22 +++++++++++ >>> include/linux/bitrev.h | 20 ++-------- >>> lib/bitrev.c | 3 -- >>> 5 files changed, 82 insertions(+), 19 deletions(-) >>> create mode 100644 arch/riscv/include/asm/bitrev.h >>> create mode 100644 include/asm-generic/bitops/__bitrev.h >>> >>> -- >>> 2.34.1 >
© 2016 - 2026 Red Hat, Inc.