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
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. 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@onurozkan.dev 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@onurozkan.dev 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@onurozkan.dev 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@onurozkan.dev 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@onurozkan.dev 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@onurozkan.dev [1]: https://lore.kernel.org/all/20260416171728.205141-1-work@onurozkan.dev [2]: https://sashiko.dev/#/patchset/20260522054228.114814-1-work@onurozkan.dev?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
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@kernel.org> 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@onurozkan.dev > > 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@onurozkan.dev > > 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@onurozkan.dev > > 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@onurozkan.dev > > 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@onurozkan.dev > > 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@onurozkan.dev > > > [1]: https://lore.kernel.org/all/20260416171728.205141-1-work@onurozkan.dev > [2]: https://sashiko.dev/#/patchset/20260522054228.114814-1-work@onurozkan.dev?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 > >
© 2016 - 2026 Red Hat, Inc.