On Thu, 2026-06-18 at 11:59 +0200, Philipp Stanner wrote:
> synchronize_rcu() is a frequently used C function which is always safe
> to be called.
>
> Add a safe abstraction for synchronize_rcu().
>
> Signed-off-by: Philipp Stanner <[email protected]>
> ---
> rust/kernel/sync/rcu.rs | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/rust/kernel/sync/rcu.rs b/rust/kernel/sync/rcu.rs
> index a32bef6e490b..9b9addf8fedf 100644
> --- a/rust/kernel/sync/rcu.rs
> +++ b/rust/kernel/sync/rcu.rs
> @@ -50,3 +50,11 @@ fn drop(&mut self) {
> pub fn read_lock() -> Guard {
> Guard::new()
> }
> +
> +/// Wait for one RCU grace period.
> +///
> +/// You typically do this to wait for everyone holding a [`Guard`].
> +pub fn synchronize_rcu() {
Hm, should it actually be #[inline]?
In C nowadays usage of inline is discouraged ("compiler knows better").
Unsure how Rust handles it; is its compiler different?
Moreover, this would be an opportunity to change the naming convention
to rcu::synchronize()
But since Boqun & Alice are pushing for rcu::RcuKBox for the reason
that it seems desirable to explicitly highlight that that's a special
Box, I guess we should be consistent with that and also have "rcu" in
the name here.
P.
> + // SAFETY: `synchronize_rcu()` is always safe to be called. It just
> waits for a grace period.
> + unsafe { bindings::synchronize_rcu() };
> +}