From nobody Tue Jun 16 07:38:50 2026 Received: from canpmsgout10.his.huawei.com (canpmsgout10.his.huawei.com [113.46.200.225]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6231F3AE6EB; Fri, 17 Apr 2026 09:27:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=113.46.200.225 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776418047; cv=none; b=bT6DAEhO76HeBcrqYrjbd1ohJ4+0zKx2HXKEbngddspYh6J1aKbvuX7DHNBG8xIOSZ0cRvhCU8QKQdCTpVTkZTvL9s+N4e1CipzcoR7Yf7Ts2bcECiLhif3VNUQxUYqH+NMO2HL3R8/z0ZsKord1pvLQLScMXutBGX5HBboy1rI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776418047; c=relaxed/simple; bh=MsjW0E55sgRoO1Ehj2OWcNL0gIYd1dV0t11CeVj9Y8E=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=B+5yCAilogPMRo2+UNkB2JrkGANs9m/Cwrndq+9sM2zNMMrBwktmIhBdxucuTq/eO9Eu9Z1cDq2tA8lI17oClyxjA02j516ycSX9yw/qyDI8X4642/E77kEHFIGdwekTMjI/EWEMF4Tt+nOUM8QZC1mRsvdgzgFia9Hz4/A9b00= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; dkim=pass (1024-bit key) header.d=huawei.com header.i=@huawei.com header.b=MGK0+RWI; arc=none smtp.client-ip=113.46.200.225 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=huawei.com header.i=@huawei.com header.b="MGK0+RWI" dkim-signature: v=1; a=rsa-sha256; d=huawei.com; s=dkim; c=relaxed/relaxed; q=dns/txt; h=From; bh=28exkkb846fkQzFD/3OS2zyXjXJpiFk6w+RdpP5t20c=; b=MGK0+RWIqAIyPdyNOKU2y4nRUQxfXBJ3rjaH8tIsb3ZAMeVrcdklkSAxYesft8/iPYF2eakRg Xr7xOXaQvHJXpLVhTMasd1+1AEC7YWncvD0F5jmTPDvex/C/ZhSlaGz19IlGmFq+NyRIU8jr+Tm JY4AD7ypPr4np2qy51wFeBM= Received: from mail.maildlp.com (unknown [172.19.163.127]) by canpmsgout10.his.huawei.com (SkyGuard) with ESMTPS id 4fxqB41GjYz1K9D4; Fri, 17 Apr 2026 17:21:00 +0800 (CST) Received: from dggpemf500011.china.huawei.com (unknown [7.185.36.131]) by mail.maildlp.com (Postfix) with ESMTPS id 7AF0A4061D; Fri, 17 Apr 2026 17:27:17 +0800 (CST) Received: from huawei.com (10.90.53.73) by dggpemf500011.china.huawei.com (7.185.36.131) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Fri, 17 Apr 2026 17:27:16 +0800 From: Jinjie Ruan To: , , , , , , , , , , , , , Subject: [PATCH v3 1/2] bitops: Define generic __bitrev8/16/32 for reuse Date: Fri, 17 Apr 2026 17:31:01 +0800 Message-ID: <20260417093102.3812978-2-ruanjinjie@huawei.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260417093102.3812978-1-ruanjinjie@huawei.com> References: <20260417093102.3812978-1-ruanjinjie@huawei.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: kwepems200001.china.huawei.com (7.221.188.67) To dggpemf500011.china.huawei.com (7.185.36.131) Content-Type: text/plain; charset="utf-8" Define generic __bitrev8/16/32 using the implementation in , so they can be reused in , such as RISCV. Reviewed-by: Yury Norov Signed-off-by: Jinjie Ruan --- include/asm-generic/bitops/__bitrev.h | 22 ++++++++++++++++++++++ include/linux/bitrev.h | 20 ++++---------------- lib/bitrev.c | 3 --- 3 files changed, 26 insertions(+), 19 deletions(-) create mode 100644 include/asm-generic/bitops/__bitrev.h diff --git a/include/asm-generic/bitops/__bitrev.h b/include/asm-generic/bi= tops/__bitrev.h new file mode 100644 index 000000000000..1b8c0f464d26 --- /dev/null +++ b/include/asm-generic/bitops/__bitrev.h @@ -0,0 +1,22 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _ASM_GENERIC_BITOPS___BITREV_H_ +#define _ASM_GENERIC_BITOPS___BITREV_H_ + +#include + +extern u8 const byte_rev_table[256]; +static __always_inline __attribute_const__ u8 generic___bitrev8(u8 byte) +{ + return byte_rev_table[byte]; +} + +static __always_inline __attribute_const__ u16 generic___bitrev16(u16 x) +{ + return (generic___bitrev8(x & 0xff) << 8) | generic___bitrev8(x >> 8); +} + +static __always_inline __attribute_const__ u32 generic___bitrev32(u32 x) +{ + return (generic___bitrev16(x & 0xffff) << 16) | generic___bitrev16(x >> 1= 6); +} +#endif /* _ASM_GENERIC_BITOPS___BITREV_H_ */ diff --git a/include/linux/bitrev.h b/include/linux/bitrev.h index d35b8ec1c485..11620a70e776 100644 --- a/include/linux/bitrev.h +++ b/include/linux/bitrev.h @@ -12,22 +12,10 @@ #define __bitrev8 __arch_bitrev8 =20 #else -extern u8 const byte_rev_table[256]; -static inline u8 __bitrev8(u8 byte) -{ - return byte_rev_table[byte]; -} - -static inline u16 __bitrev16(u16 x) -{ - return (__bitrev8(x & 0xff) << 8) | __bitrev8(x >> 8); -} - -static inline u32 __bitrev32(u32 x) -{ - return (__bitrev16(x & 0xffff) << 16) | __bitrev16(x >> 16); -} - +#include +#define __bitrev32 generic___bitrev32 +#define __bitrev16 generic___bitrev16 +#define __bitrev8 generic___bitrev8 #endif /* CONFIG_HAVE_ARCH_BITREVERSE */ =20 #define __bitrev8x4(x) (__bitrev32(swab32(x))) diff --git a/lib/bitrev.c b/lib/bitrev.c index 81b56e0a7f32..05088231f31f 100644 --- a/lib/bitrev.c +++ b/lib/bitrev.c @@ -1,5 +1,4 @@ // SPDX-License-Identifier: GPL-2.0-only -#ifndef CONFIG_HAVE_ARCH_BITREVERSE #include #include #include @@ -43,5 +42,3 @@ const u8 byte_rev_table[256] =3D { 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff, }; EXPORT_SYMBOL_GPL(byte_rev_table); - -#endif /* CONFIG_HAVE_ARCH_BITREVERSE */ --=20 2.34.1 From nobody Tue Jun 16 07:38:50 2026 Received: from canpmsgout01.his.huawei.com (canpmsgout01.his.huawei.com [113.46.200.216]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8F9503B8954; Fri, 17 Apr 2026 09:27:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=113.46.200.216 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776418050; cv=none; b=o59sZFQPO6JIAXNoEIBua7uR+a2KF1Luc5DFYtrAJOmuaS9SpACeW5QE6F/IPjVDj7DydEjxLlAomM0Rlxl2/Cuuaj/mGW0nrA38xIlCC+SE3Yi3pIU94b74oVGQIOu1GpxiEN2GSID9zPW/DLRUPsZvdm3HyiC7tDh8RRJpdTg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776418050; c=relaxed/simple; bh=D/zLDc18CVpUYFzDOP75JnUzec69UpoBBQhVE9wSyvo=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=adJEtl12yUoL7qHaeWEdSFLzgtPoasw7XPRGPsy3EqyiGUBvCYB5PmfIsiQB9JylZzt2mpkaG7YZFg6OSdCqDIzhS37j8Oz/SEWZz0Vo5uHuqpmJ/fLou1Qo+J6x3E0cux0jMnFXphh+BKXJYd3fTZGYAmVLzWDiLReEoNy8u1Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; dkim=pass (1024-bit key) header.d=huawei.com header.i=@huawei.com header.b=27xrz80L; arc=none smtp.client-ip=113.46.200.216 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=huawei.com header.i=@huawei.com header.b="27xrz80L" dkim-signature: v=1; a=rsa-sha256; d=huawei.com; s=dkim; c=relaxed/relaxed; q=dns/txt; h=From; bh=FxlOPvECtnjnV1ZPXJ4JS7Iipj4rGHRkRHW8wOcFGus=; b=27xrz80Lb6YDOwbToRfaauDbt5LrRgkq5V+ucI30qtuXhCW8heYYUHT/QuoKW/nKImoUWxRip v5Y+zVVhNpKzaTsMa8gZzyoblGxL5KMwjBYukCSrrBkQI47mFz3f8NF3afLNBPaEy4EiA+RoTH8 J0BkdHhlvJ2AOgevXdJuw8g= Received: from mail.maildlp.com (unknown [172.19.162.197]) by canpmsgout01.his.huawei.com (SkyGuard) with ESMTPS id 4fxqBL6FRdz1T4Hx; Fri, 17 Apr 2026 17:21:14 +0800 (CST) Received: from dggpemf500011.china.huawei.com (unknown [7.185.36.131]) by mail.maildlp.com (Postfix) with ESMTPS id 59EBE40569; Fri, 17 Apr 2026 17:27:18 +0800 (CST) Received: from huawei.com (10.90.53.73) by dggpemf500011.china.huawei.com (7.185.36.131) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Fri, 17 Apr 2026 17:27:17 +0800 From: Jinjie Ruan To: , , , , , , , , , , , , , Subject: [PATCH v3 2/2] arch/riscv: Add bitrev.h file to support rev8 and brev8 Date: Fri, 17 Apr 2026 17:31:02 +0800 Message-ID: <20260417093102.3812978-3-ruanjinjie@huawei.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260417093102.3812978-1-ruanjinjie@huawei.com> References: <20260417093102.3812978-1-ruanjinjie@huawei.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: kwepems200001.china.huawei.com (7.221.188.67) To dggpemf500011.china.huawei.com (7.185.36.131) Content-Type: text/plain; charset="utf-8" The RISC-V Bit-manipulation Extension for Cryptography (Zbkb) provides the 'brev8' instruction, which reverses the bits within each byte. Combined with the 'rev8' instruction (from Zbb or Zbkb), which reverses the byte order of a register, we can efficiently implement 16-bit, 32-bit, and (on RV64) 64-bit bit reversal. This is significantly faster than the default software table-lookup implementation in lib/bitrev.c, as it replaces memory accesses and multiple arithmetic operations with just two or three hardware instructions. Select HAVE_ARCH_BITREVERSE and provide to utilize these instructions when the Zbkb extension is available at runtime via the alternatives mechanism. Link: https://docs.riscv.org/reference/isa/unpriv/b-st-ext.html Signed-off-by: Jinjie Ruan --- arch/riscv/Kconfig | 1 + arch/riscv/include/asm/bitrev.h | 55 +++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 arch/riscv/include/asm/bitrev.h diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig index 90c531e6abf5..05f2b2166a83 100644 --- a/arch/riscv/Kconfig +++ b/arch/riscv/Kconfig @@ -128,6 +128,7 @@ config RISCV select HAS_IOPORT if MMU select HAVE_ALIGNED_STRUCT_PAGE select HAVE_ARCH_AUDITSYSCALL + select HAVE_ARCH_BITREVERSE if RISCV_ISA_ZBKB select HAVE_ARCH_HUGE_VMALLOC if HAVE_ARCH_HUGE_VMAP select HAVE_ARCH_HUGE_VMAP if MMU && 64BIT select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL diff --git a/arch/riscv/include/asm/bitrev.h b/arch/riscv/include/asm/bitre= v.h new file mode 100644 index 000000000000..eef263cc6655 --- /dev/null +++ b/arch/riscv/include/asm/bitrev.h @@ -0,0 +1,55 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __ASM_BITREV_H +#define __ASM_BITREV_H + +#include +#include +#include +#include + +static __always_inline __attribute_const__ u32 __arch_bitrev32(u32 x) +{ + unsigned long result =3D (unsigned long)x; + + if (!riscv_has_extension_likely(RISCV_ISA_EXT_ZBKB)) + return generic___bitrev32(x); + + asm volatile( + ".option push\n" + ".option arch,+zbkb\n" + "rev8 %0, %0\n" + "brev8 %0, %0\n" + ".option pop" + : "+r" (result) + ); + +#if __riscv_xlen =3D=3D 64 + return (u32)(result >> 32); +#else + return (u32)result; +#endif +} + +static __always_inline __attribute_const__ u16 __arch_bitrev16(u16 x) +{ + return __arch_bitrev32((u32)x) >> 16; +} + +static __always_inline __attribute_const__ u8 __arch_bitrev8(u8 x) +{ + unsigned long result =3D (unsigned long)x; + + if (!riscv_has_extension_likely(RISCV_ISA_EXT_ZBKB)) + return generic___bitrev8(x); + + asm volatile( + ".option push\n" + ".option arch,+zbkb\n" + "brev8 %0, %0\n" + ".option pop" + : "+r" (result) + ); + + return (u8)result; +} +#endif --=20 2.34.1