Re: [PATCH v3 0/2] arch/riscv: Add bitrev.h file to support rev8 and brev8

From: Jinjie Ruan

Date: Mon Apr 20 2026 - 08:37:23 EST




On 4/18/2026 2:42 AM, David Laight wrote:
> On Fri, 17 Apr 2026 12:09:03 -0400
> Yury Norov <ynorov@xxxxxxxxxx> 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
>