Re: [PATCH v7 0/4] rust: helpers: add SRCU helpers
From: Paul E. McKenney
Date: Thu May 28 2026 - 14:51:29 EST
On Thu, May 28, 2026 at 09:27:32AM +0300, Onur Özkan wrote:
> The immediate motivation is the Tyr reset infrastructure [1] which needs
> to serialize reset sensitive hardware access against reset and teardown
> paths. That reset series started to require many independent dependencies
> so this SRCU support is split out as a standalone Rust API to keep the
> reset series focused on the reset logic and easier to review, rebase and
> land.
For the first two:
Reviewed-by: Paul E. McKenney <paulmck@xxxxxxxxxx>
They also pass short rcutorture testing, which is reassuring:
tools/testing/selftests/rcutorture/bin/kvm.sh --allcpus --duration 40 --configs "SRCU-N SRCU-P SRCU-T SRCU-U" --trust-make
> Changes since v6:
>
> - Removed "CONFIG_DEBUG_LOCK_ALLOC" condition from "rust/helpers/srcu.c"
> and created a simple wrapper inside "include/linux/srcu.h" for it.
>
> v6: https://lore.kernel.org/all/20260527203615.163688-1-work@xxxxxxxxxxxxx
>
> Changes since v5:
>
> - Created separate srcu_readers_active() variants for "srcutiny.h" and
> "srcutree.h".
>
> v5: https://lore.kernel.org/all/20260527174120.510447-1-work@xxxxxxxxxxxxx
>
> Changes since v4:
>
> - Exposed srcu_readers_active from C side and wired it to the Rust
> helpers.
> - Used srcu_readers_active() in SRCU drop and logged with pr_warn if
> there are leaked guards during the drop.
>
> v4: https://lore.kernel.org/all/20260525175706.124910-1-work@xxxxxxxxxxxxx
>
> Changes since v3 (which are for Sashiko notes [2]):
>
> - Added rust helpers for srcu_barrier() and synchronize_srcu_expedited()
> so the abstraction builds with CONFIG_TINY_SRCU, where these are
> static inline functions.
> - Added missing INVARIANT comment in Srcu::new() about why the type
> invariants hold after successful initialization.
>
> v3: https://lore.kernel.org/all/20260522054228.114814-1-work@xxxxxxxxxxxxx
>
> Changes since v2:
>
> - Removed closure-based API.
> - Added #[doc(hidden)] on new_srcu macro.
> - Added #[must_use..] on srcu::Guard.
> - Improved the clean-up path (PinnedDrop implementation) which
> eventually made read_lock safe with leaked guards.
>
> v2: https://lore.kernel.org/all/20260502162833.34334-1-work@xxxxxxxxxxxxx
>
> Changes since v1:
>
> - Made the owned SRCU read-side guard API unsafe and added a safe closure
> based helper for callers that do not need to keep the guard. This is to
> avoid UB on the C side cleanup_srcu_struct where the SRCU struct is freed
> while there are still active guards, which can happen if the caller leaks
> the guard e.g., with mem::forget().
> - Improved doc comments.
>
> v1: https://lore.kernel.org/all/20260428103437.156236-1-work@xxxxxxxxxxxxx
>
>
> [1]: https://lore.kernel.org/all/20260416171728.205141-1-work@xxxxxxxxxxxxx
> [2]: https://sashiko.dev/#/patchset/20260522054228.114814-1-work@xxxxxxxxxxxxx?part=2
>
> Onur Özkan (4):
> rust: helpers: add SRCU helpers
> srcu: expose srcu_readers_active()
> rust: sync: add SRCU abstraction
> MAINTAINERS: add Rust SRCU files to SRCU entry
>
> MAINTAINERS | 3 +
> include/linux/srcu.h | 5 ++
> include/linux/srcutiny.h | 13 +++
> include/linux/srcutree.h | 24 ++++++
> kernel/rcu/srcutiny.c | 2 +-
> kernel/rcu/srcutree.c | 25 ------
> rust/helpers/helpers.c | 1 +
> rust/helpers/srcu.c | 35 +++++++++
> rust/kernel/sync.rs | 2 +
> rust/kernel/sync/srcu.rs | 166 +++++++++++++++++++++++++++++++++++++++
> 10 files changed, 250 insertions(+), 26 deletions(-)
> create mode 100644 rust/helpers/srcu.c
> create mode 100644 rust/kernel/sync/srcu.rs
>
> --
> 2.51.2
>
>