[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250717184055.2071216-1-lyude@redhat.com>
Date: Thu, 17 Jul 2025 14:37:52 -0400
From: Lyude Paul <lyude@...hat.com>
To: rust-for-linux@...r.kernel.org,
Thomas Gleixner <tglx@...utronix.de>,
Boqun Feng <boqun.feng@...il.com>,
linux-kernel@...r.kernel.org,
Daniel Almeida <daniel.almeida@...labora.com>
Cc: Miguel Ojeda <ojeda@...nel.org>,
Alex Gaynor <alex.gaynor@...il.com>,
Gary Guo <gary@...yguo.net>,
Björn Roy Baron <bjorn3_gh@...tonmail.com>,
Benno Lossin <lossin@...nel.org>,
Andreas Hindborg <a.hindborg@...nel.org>,
Alice Ryhl <aliceryhl@...gle.com>,
Trevor Gross <tmgross@...ch.edu>,
Danilo Krummrich <dakr@...nel.org>
Subject: [PATCH v11 00/14] Refcounted interrupts, SpinLockIrq for rust
This is the latest patch series for adding rust bindings for controlling
local processor interrupts, adding support for spinlocks in rust that
are acquired with local processor interrupts disabled, and implementing
local interrupt controls through refcounting in the kernel.
The previous version of this patch series can be found here:
https://lkml.org/lkml/2025/5/27/1219
This patch series applies on top of the rust-next branch.
Boqun Feng (6):
preempt: Introduce HARDIRQ_DISABLE_BITS
preempt: Introduce __preempt_count_{sub, add}_return()
irq & spin_lock: Add counted interrupt disabling/enabling
rust: helper: Add spin_{un,}lock_irq_{enable,disable}() helpers
rust: sync: lock: Add `Backend::BackendInContext`
locking: Switch to _irq_{disable,enable}() variants in cleanup guards
Lyude Paul (8):
irq: Add KUnit test for refcounted interrupt enable/disable
rust: Introduce interrupt module
rust: sync: Add SpinLockIrq
rust: sync: Introduce lock::Backend::Context
rust: sync: Add a lifetime parameter to lock::global::GlobalGuard
rust: sync: Expose lock::Backend
rust: sync: lock/global: Add Backend parameter to GlobalGuard
rust: sync: lock/global: Add BackendInContext support to GlobalLock
arch/arm64/include/asm/preempt.h | 18 ++
arch/s390/include/asm/preempt.h | 10 +
arch/x86/include/asm/preempt.h | 10 +
include/asm-generic/preempt.h | 14 ++
include/linux/irqflags_types.h | 6 +
include/linux/preempt.h | 20 +-
include/linux/spinlock.h | 88 +++++++--
include/linux/spinlock_api_smp.h | 27 +++
include/linux/spinlock_api_up.h | 8 +
include/linux/spinlock_rt.h | 15 ++
kernel/irq/Makefile | 1 +
kernel/irq/refcount_interrupt_test.c | 108 +++++++++++
kernel/locking/spinlock.c | 29 +++
kernel/softirq.c | 3 +
rust/helpers/helpers.c | 1 +
rust/helpers/interrupt.c | 18 ++
rust/helpers/spinlock.c | 15 ++
rust/helpers/sync.c | 5 +
rust/kernel/interrupt.rs | 86 +++++++++
rust/kernel/lib.rs | 1 +
rust/kernel/sync.rs | 5 +-
rust/kernel/sync/lock.rs | 69 ++++++-
rust/kernel/sync/lock/global.rs | 91 ++++++---
rust/kernel/sync/lock/mutex.rs | 2 +
rust/kernel/sync/lock/spinlock.rs | 272 +++++++++++++++++++++++++++
25 files changed, 871 insertions(+), 51 deletions(-)
create mode 100644 kernel/irq/refcount_interrupt_test.c
create mode 100644 rust/helpers/interrupt.c
create mode 100644 rust/kernel/interrupt.rs
base-commit: 23b128bba76776541dc09efaf3acf6242917e1f0
--
2.50.0
Powered by blists - more mailing lists