[PATCH v3 0/5] rust: Add bug/warn abstractions
From: FUJITA Tomonori <fujita.tomonori@gmail.com>
Date: 2025-02-13 14:00:41
Also in:
linux-riscv, lkml, loongarch, rust-for-linux
This patchset adds warn_on and warn_on_once macros with the bug/warn abstraction. Wrapping C's BUG/WARN macros does not work well for x86, RISC-V, ARM64, and LoongArch. Rust code needs to directly execute the same assembly code used on the C side. To avoid duplicating the assembly code, this approach mirrors what the static branch code does: it generates the assembly code for Rust using the C preprocessor at compile time. The 1st to 4th patches export the BUG/WARN assembly code for Rust on each architecture, with no functional changes on the C side. The changes for x86 and RISC-V are straightforward. However, the ARM64 and LoongArch assembly code are designed differently; they are used by both C inline assembly and assembly code. As a result, sharing this code with Rust is complicated. The last patch adds the bug abstraction with warn_on and warn_on_once implementations. This has been tested on x86, ARM64, and RISC-V (QEMU), with only a compile test performed for LoongArch. The assembly code can be used for both BUG and WARN, but currently only supports warn_on and warn_on_once. I will work on the remaining functionality after this abstraction is merged. v3: - rebased on rust-next - use ANNOTATE_REACHABLE macro (replaced ASM_REACHABLE) - added Acked-by tag to the x86 change v2: https://lore.kernel.org/linux-arm-kernel/20241218062009.2402650-1-fujita.tomonori@gmail.com/ (local) - remove target_arch cfg by using asm comment - clean up the changes to loongarch asm v1: https://lore.kernel.org/linux-arm-kernel/20241210001802.228725-1-fujita.tomonori@gmail.com/ (local) FUJITA Tomonori (5): x86/bug: Add ARCH_WARN_ASM macro for BUG/WARN asm code sharing with Rust riscv/bug: Add ARCH_WARN_ASM macro for BUG/WARN asm code sharing with Rust arm64/bug: Add ARCH_WARN_ASM macro for BUG/WARN asm code sharing with Rust loongarch/bug: Add ARCH_WARN_ASM macro for BUG/WARN asm code sharing with Rust rust: Add warn_on and warn_on_once arch/arm64/include/asm/asm-bug.h | 33 +++++- arch/loongarch/include/asm/bug.h | 35 +++++- arch/riscv/include/asm/bug.h | 37 ++++--- arch/x86/include/asm/bug.h | 56 +++++----- rust/Makefile | 8 ++ rust/kernel/.gitignore | 2 + rust/kernel/bug.rs | 100 ++++++++++++++++++ rust/kernel/generated_arch_reachable_asm.rs.S | 7 ++ rust/kernel/generated_arch_warn_asm.rs.S | 7 ++ rust/kernel/lib.rs | 1 + 10 files changed, 235 insertions(+), 51 deletions(-) create mode 100644 rust/kernel/bug.rs create mode 100644 rust/kernel/generated_arch_reachable_asm.rs.S create mode 100644 rust/kernel/generated_arch_warn_asm.rs.S base-commit: beeb78d46249cab8b2b8359a2ce8fa5376b5ad2d -- 2.43.0