[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20241210001802.228725-1-fujita.tomonori@gmail.com>
Date: Tue, 10 Dec 2024 09:17:56 +0900
From: FUJITA Tomonori <fujita.tomonori@...il.com>
To: linux-kernel@...r.kernel.org,
rust-for-linux@...r.kernel.org
Cc: x86@...nel.org,
linux-riscv@...ts.infradead.org,
linux-arm-kernel@...ts.infradead.org,
loongarch@...ts.linux.dev,
tglx@...utronix.de,
mingo@...hat.com,
bp@...en8.de,
dave.hansen@...ux.intel.com,
peterz@...radead.org,
hpa@...or.com,
paul.walmsley@...ive.com,
palmer@...belt.com,
aou@...s.berkeley.edu,
catalin.marinas@....com,
will@...nel.org,
chenhuacai@...nel.org,
kernel@...0n.name,
tangyouling@...ngson.cn,
hejinyang@...ngson.cn,
yangtiezhu@...ngson.cn,
ojeda@...nel.org,
alex.gaynor@...il.com,
boqun.feng@...il.com,
gary@...yguo.net,
bjorn3_gh@...tonmail.com,
benno.lossin@...ton.me,
a.hindborg@...nel.org,
aliceryhl@...gle.com,
tmgross@...ch.edu
Subject: [PATCH v1 0/5] rust: Add bug/warn abstractions
This patchset adds warn_on and warn_on_once macros with the bug/warn
abstraction.
Wrapping C's BUG/WARN macros does not work the same way on
architectures that support Rust (x86, RISC-V, ARM64, 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 dynamically generates the
assembly code for Rust using the C preprocessor.
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. Seems that an unused named
argument in Rust inline assembly can't be allowed so we need multiple
#[cfg].
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.
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 | 31 ++++-
arch/loongarch/include/asm/bug.h | 31 ++++-
arch/riscv/include/asm/bug.h | 35 +++--
arch/x86/include/asm/bug.h | 51 ++++---
rust/Makefile | 8 ++
rust/kernel/.gitignore | 2 +
rust/kernel/bug.rs | 131 ++++++++++++++++++
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, 255 insertions(+), 49 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: 7503345ac5f5e82fd9a36d6e6b447c016376403a
--
2.43.0
Powered by blists - more mailing lists