Rust for Linux List
 help / color / mirror / Atom feed
* [PATCH v2 0/3] Add and use abstraction for synchronize_rcu()
@ 2026-06-22 17:32 Philipp Stanner
  2026-06-22 17:32 ` [PATCH v2 1/3] rust: sync: Add " Philipp Stanner
                   ` (4 more replies)
  0 siblings, 5 replies; 10+ messages in thread
From: Philipp Stanner @ 2026-06-22 17:32 UTC (permalink / raw)
  To: Miguel Ojeda, Boqun Feng, Gary Guo, Björn Roy Baron,
	Benno Lossin, Andreas Hindborg, Alice Ryhl, Trevor Gross,
	Danilo Krummrich, Daniel Almeida, Tamir Duberstein,
	Alexandre Courbot, Onur Özkan, Alexander Viro,
	Christian Brauner, Jan Kara, Lyude Paul, Paul E. McKenney,
	Frederic Weisbecker, Neeraj Upadhyay, Joel Fernandes,
	Josh Triplett, Uladzislau Rezki, Steven Rostedt,
	Mathieu Desnoyers, Lai Jiangshan, Zqiang, Christian Schrefl,
	Philipp Stanner
  Cc: rust-for-linux, linux-kernel, linux-fsdevel, rcu

Changes since v1:
  - Vertically format imports. (Onur)
  - Make the new function #[inline]. (Alice)
  - Add Alice's R-b.

Philipp Stanner (3):
  rust: sync: Add abstraction for synchronize_rcu()
  rust: revocable: Use safe synchronize_rcu() abstraction
  rust: sync: Use safe synchronize_rcu() abstraction in poll

 rust/kernel/revocable.rs |  9 ++++++---
 rust/kernel/sync/poll.rs | 10 ++++++----
 rust/kernel/sync/rcu.rs  |  9 +++++++++
 3 files changed, 21 insertions(+), 7 deletions(-)


base-commit: 43a393185e33e573a374c1d4f7ddf6481484ef8d
-- 
2.54.0


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH v2 1/3] rust: sync: Add abstraction for synchronize_rcu()
  2026-06-22 17:32 [PATCH v2 0/3] Add and use abstraction for synchronize_rcu() Philipp Stanner
@ 2026-06-22 17:32 ` Philipp Stanner
  2026-06-22 17:46   ` Gary Guo
  2026-06-22 18:46   ` Danilo Krummrich
  2026-06-22 17:32 ` [PATCH v2 2/3] rust: revocable: Use safe synchronize_rcu() abstraction Philipp Stanner
                   ` (3 subsequent siblings)
  4 siblings, 2 replies; 10+ messages in thread
From: Philipp Stanner @ 2026-06-22 17:32 UTC (permalink / raw)
  To: Miguel Ojeda, Boqun Feng, Gary Guo, Björn Roy Baron,
	Benno Lossin, Andreas Hindborg, Alice Ryhl, Trevor Gross,
	Danilo Krummrich, Daniel Almeida, Tamir Duberstein,
	Alexandre Courbot, Onur Özkan, Alexander Viro,
	Christian Brauner, Jan Kara, Lyude Paul, Paul E. McKenney,
	Frederic Weisbecker, Neeraj Upadhyay, Joel Fernandes,
	Josh Triplett, Uladzislau Rezki, Steven Rostedt,
	Mathieu Desnoyers, Lai Jiangshan, Zqiang, Christian Schrefl,
	Philipp Stanner
  Cc: rust-for-linux, linux-kernel, linux-fsdevel, rcu

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 <phasta@kernel.org>
---
 rust/kernel/sync/rcu.rs | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/rust/kernel/sync/rcu.rs b/rust/kernel/sync/rcu.rs
index a32bef6e490b..0d438ef31766 100644
--- a/rust/kernel/sync/rcu.rs
+++ b/rust/kernel/sync/rcu.rs
@@ -50,3 +50,12 @@ 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`].
+#[inline]
+pub fn synchronize_rcu() {
+    // SAFETY: `synchronize_rcu()` is always safe to be called. It just waits for a grace period.
+    unsafe { bindings::synchronize_rcu() };
+}
-- 
2.54.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v2 2/3] rust: revocable: Use safe synchronize_rcu() abstraction
  2026-06-22 17:32 [PATCH v2 0/3] Add and use abstraction for synchronize_rcu() Philipp Stanner
  2026-06-22 17:32 ` [PATCH v2 1/3] rust: sync: Add " Philipp Stanner
@ 2026-06-22 17:32 ` Philipp Stanner
  2026-06-22 17:47   ` Gary Guo
  2026-06-22 17:32 ` [PATCH v2 3/3] rust: sync: Use safe synchronize_rcu() abstraction in poll Philipp Stanner
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 10+ messages in thread
From: Philipp Stanner @ 2026-06-22 17:32 UTC (permalink / raw)
  To: Miguel Ojeda, Boqun Feng, Gary Guo, Björn Roy Baron,
	Benno Lossin, Andreas Hindborg, Alice Ryhl, Trevor Gross,
	Danilo Krummrich, Daniel Almeida, Tamir Duberstein,
	Alexandre Courbot, Onur Özkan, Alexander Viro,
	Christian Brauner, Jan Kara, Lyude Paul, Paul E. McKenney,
	Frederic Weisbecker, Neeraj Upadhyay, Joel Fernandes,
	Josh Triplett, Uladzislau Rezki, Steven Rostedt,
	Mathieu Desnoyers, Lai Jiangshan, Zqiang, Christian Schrefl,
	Philipp Stanner
  Cc: rust-for-linux, linux-kernel, linux-fsdevel, rcu

We now have a safe wrapper for the foreign function synchronize_rcu().

Use it in revocable.rs.

Signed-off-by: Philipp Stanner <phasta@kernel.org>
---
 rust/kernel/revocable.rs | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/rust/kernel/revocable.rs b/rust/kernel/revocable.rs
index 0f4ae673256d..f539603349f1 100644
--- a/rust/kernel/revocable.rs
+++ b/rust/kernel/revocable.rs
@@ -7,7 +7,11 @@
 
 use pin_init::Wrapper;
 
-use crate::{bindings, prelude::*, sync::rcu, types::Opaque};
+use crate::{
+    prelude::*,
+    sync::rcu,
+    types::Opaque, //
+};
 use core::{
     marker::PhantomData,
     ops::Deref,
@@ -161,8 +165,7 @@ unsafe fn revoke_internal<const SYNC: bool>(&self) -> bool {
 
         if revoke {
             if SYNC {
-                // SAFETY: Just an FFI call, there are no further requirements.
-                unsafe { bindings::synchronize_rcu() };
+                rcu::synchronize_rcu();
             }
 
             // SAFETY: We know `self.data` is valid because only one CPU can succeed the
-- 
2.54.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v2 3/3] rust: sync: Use safe synchronize_rcu() abstraction in poll
  2026-06-22 17:32 [PATCH v2 0/3] Add and use abstraction for synchronize_rcu() Philipp Stanner
  2026-06-22 17:32 ` [PATCH v2 1/3] rust: sync: Add " Philipp Stanner
  2026-06-22 17:32 ` [PATCH v2 2/3] rust: revocable: Use safe synchronize_rcu() abstraction Philipp Stanner
@ 2026-06-22 17:32 ` Philipp Stanner
  2026-06-22 17:47   ` Gary Guo
  2026-06-22 17:36 ` [PATCH v2 0/3] Add and use abstraction for synchronize_rcu() Onur Özkan
  2026-06-22 18:47 ` Danilo Krummrich
  4 siblings, 1 reply; 10+ messages in thread
From: Philipp Stanner @ 2026-06-22 17:32 UTC (permalink / raw)
  To: Miguel Ojeda, Boqun Feng, Gary Guo, Björn Roy Baron,
	Benno Lossin, Andreas Hindborg, Alice Ryhl, Trevor Gross,
	Danilo Krummrich, Daniel Almeida, Tamir Duberstein,
	Alexandre Courbot, Onur Özkan, Alexander Viro,
	Christian Brauner, Jan Kara, Lyude Paul, Paul E. McKenney,
	Frederic Weisbecker, Neeraj Upadhyay, Joel Fernandes,
	Josh Triplett, Uladzislau Rezki, Steven Rostedt,
	Mathieu Desnoyers, Lai Jiangshan, Zqiang, Christian Schrefl,
	Philipp Stanner
  Cc: rust-for-linux, linux-kernel, linux-fsdevel, rcu

We now have a safe wrapper for the foreign function synchronize_rcu().

Use it in poll.rs.

Signed-off-by: Philipp Stanner <phasta@kernel.org>
Reviewed-by: Alice Ryhl <aliceryhl@google.com>
---
 rust/kernel/sync/poll.rs | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/rust/kernel/sync/poll.rs b/rust/kernel/sync/poll.rs
index 0ec985d560c8..30ebeea1702f 100644
--- a/rust/kernel/sync/poll.rs
+++ b/rust/kernel/sync/poll.rs
@@ -8,7 +8,11 @@
     bindings,
     fs::File,
     prelude::*,
-    sync::{CondVar, LockClassKey},
+    sync::{
+        CondVar,
+        LockClassKey,
+        rcu::synchronize_rcu, //
+    }, //
 };
 use core::{marker::PhantomData, ops::Deref};
 
@@ -99,8 +103,6 @@ fn drop(self: Pin<&mut Self>) {
         unsafe { bindings::__wake_up_pollfree(self.inner.wait_queue_head.get()) };
 
         // Wait for epoll items to be properly removed.
-        //
-        // SAFETY: Just an FFI call.
-        unsafe { bindings::synchronize_rcu() };
+        synchronize_rcu();
     }
 }
-- 
2.54.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH v2 0/3] Add and use abstraction for synchronize_rcu()
  2026-06-22 17:32 [PATCH v2 0/3] Add and use abstraction for synchronize_rcu() Philipp Stanner
                   ` (2 preceding siblings ...)
  2026-06-22 17:32 ` [PATCH v2 3/3] rust: sync: Use safe synchronize_rcu() abstraction in poll Philipp Stanner
@ 2026-06-22 17:36 ` Onur Özkan
  2026-06-22 18:47 ` Danilo Krummrich
  4 siblings, 0 replies; 10+ messages in thread
From: Onur Özkan @ 2026-06-22 17:36 UTC (permalink / raw)
  To: Philipp Stanner
  Cc: Miguel Ojeda, Boqun Feng, Gary Guo, Björn Roy Baron,
	Benno Lossin, Andreas Hindborg, Alice Ryhl, Trevor Gross,
	Danilo Krummrich, Daniel Almeida, Tamir Duberstein,
	Alexandre Courbot, Alexander Viro, Christian Brauner, Jan Kara,
	Lyude Paul, Paul E. McKenney, Frederic Weisbecker,
	Neeraj Upadhyay, Joel Fernandes, Josh Triplett, Uladzislau Rezki,
	Steven Rostedt, Mathieu Desnoyers, Lai Jiangshan, Zqiang,
	Christian Schrefl, rust-for-linux, linux-kernel, linux-fsdevel,
	rcu, Onur Özkan

On Mon, 22 Jun 2026 19:32:48 +0200
Philipp Stanner <phasta@kernel.org> wrote:

> Changes since v1:
>   - Vertically format imports. (Onur)
>   - Make the new function #[inline]. (Alice)
>   - Add Alice's R-b.
> 
> Philipp Stanner (3):
>   rust: sync: Add abstraction for synchronize_rcu()
>   rust: revocable: Use safe synchronize_rcu() abstraction
>   rust: sync: Use safe synchronize_rcu() abstraction in poll
> 
>  rust/kernel/revocable.rs |  9 ++++++---
>  rust/kernel/sync/poll.rs | 10 ++++++----
>  rust/kernel/sync/rcu.rs  |  9 +++++++++
>  3 files changed, 21 insertions(+), 7 deletions(-)
> 
> 
> base-commit: 43a393185e33e573a374c1d4f7ddf6481484ef8d
> -- 
> 2.54.0
> 

For the whole series:

Reviewed-by: Onur Özkan <work@onurozkan.dev>


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v2 1/3] rust: sync: Add abstraction for synchronize_rcu()
  2026-06-22 17:32 ` [PATCH v2 1/3] rust: sync: Add " Philipp Stanner
@ 2026-06-22 17:46   ` Gary Guo
  2026-06-22 18:46   ` Danilo Krummrich
  1 sibling, 0 replies; 10+ messages in thread
From: Gary Guo @ 2026-06-22 17:46 UTC (permalink / raw)
  To: Philipp Stanner, Miguel Ojeda, Boqun Feng, Gary Guo,
	Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
	Trevor Gross, Danilo Krummrich, Daniel Almeida, Tamir Duberstein,
	Alexandre Courbot, Onur Özkan, Alexander Viro,
	Christian Brauner, Jan Kara, Lyude Paul, Paul E. McKenney,
	Frederic Weisbecker, Neeraj Upadhyay, Joel Fernandes,
	Josh Triplett, Uladzislau Rezki, Steven Rostedt,
	Mathieu Desnoyers, Lai Jiangshan, Zqiang, Christian Schrefl
  Cc: rust-for-linux, linux-kernel, linux-fsdevel, rcu

On Mon Jun 22, 2026 at 6:32 PM BST, 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 <phasta@kernel.org>

Reviewed-by: Gary Guo <gary@garyguo.net>

> ---
>  rust/kernel/sync/rcu.rs | 9 +++++++++
>  1 file changed, 9 insertions(+)


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v2 2/3] rust: revocable: Use safe synchronize_rcu() abstraction
  2026-06-22 17:32 ` [PATCH v2 2/3] rust: revocable: Use safe synchronize_rcu() abstraction Philipp Stanner
@ 2026-06-22 17:47   ` Gary Guo
  0 siblings, 0 replies; 10+ messages in thread
From: Gary Guo @ 2026-06-22 17:47 UTC (permalink / raw)
  To: Philipp Stanner, Miguel Ojeda, Boqun Feng, Gary Guo,
	Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
	Trevor Gross, Danilo Krummrich, Daniel Almeida, Tamir Duberstein,
	Alexandre Courbot, Onur Özkan, Alexander Viro,
	Christian Brauner, Jan Kara, Lyude Paul, Paul E. McKenney,
	Frederic Weisbecker, Neeraj Upadhyay, Joel Fernandes,
	Josh Triplett, Uladzislau Rezki, Steven Rostedt,
	Mathieu Desnoyers, Lai Jiangshan, Zqiang, Christian Schrefl
  Cc: rust-for-linux, linux-kernel, linux-fsdevel, rcu

On Mon Jun 22, 2026 at 6:32 PM BST, Philipp Stanner wrote:
> We now have a safe wrapper for the foreign function synchronize_rcu().
> 
> Use it in revocable.rs.
> 
> Signed-off-by: Philipp Stanner <phasta@kernel.org>

Reviewed-by: Gary Guo <gary@garyguo.net>

> ---
>  rust/kernel/revocable.rs | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v2 3/3] rust: sync: Use safe synchronize_rcu() abstraction in poll
  2026-06-22 17:32 ` [PATCH v2 3/3] rust: sync: Use safe synchronize_rcu() abstraction in poll Philipp Stanner
@ 2026-06-22 17:47   ` Gary Guo
  0 siblings, 0 replies; 10+ messages in thread
From: Gary Guo @ 2026-06-22 17:47 UTC (permalink / raw)
  To: Philipp Stanner, Miguel Ojeda, Boqun Feng, Gary Guo,
	Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
	Trevor Gross, Danilo Krummrich, Daniel Almeida, Tamir Duberstein,
	Alexandre Courbot, Onur Özkan, Alexander Viro,
	Christian Brauner, Jan Kara, Lyude Paul, Paul E. McKenney,
	Frederic Weisbecker, Neeraj Upadhyay, Joel Fernandes,
	Josh Triplett, Uladzislau Rezki, Steven Rostedt,
	Mathieu Desnoyers, Lai Jiangshan, Zqiang, Christian Schrefl
  Cc: rust-for-linux, linux-kernel, linux-fsdevel, rcu

On Mon Jun 22, 2026 at 6:32 PM BST, Philipp Stanner wrote:
> We now have a safe wrapper for the foreign function synchronize_rcu().
> 
> Use it in poll.rs.
> 
> Signed-off-by: Philipp Stanner <phasta@kernel.org>
> Reviewed-by: Alice Ryhl <aliceryhl@google.com>

Reviewed-by: Gary Guo <gary@garyguo.net>

> ---
>  rust/kernel/sync/poll.rs | 10 ++++++----
>  1 file changed, 6 insertions(+), 4 deletions(-)


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v2 1/3] rust: sync: Add abstraction for synchronize_rcu()
  2026-06-22 17:32 ` [PATCH v2 1/3] rust: sync: Add " Philipp Stanner
  2026-06-22 17:46   ` Gary Guo
@ 2026-06-22 18:46   ` Danilo Krummrich
  1 sibling, 0 replies; 10+ messages in thread
From: Danilo Krummrich @ 2026-06-22 18:46 UTC (permalink / raw)
  To: Philipp Stanner
  Cc: Miguel Ojeda, Boqun Feng, Gary Guo, Björn Roy Baron,
	Benno Lossin, Andreas Hindborg, Alice Ryhl, Trevor Gross,
	Daniel Almeida, Tamir Duberstein, Alexandre Courbot,
	Onur Özkan, Alexander Viro, Christian Brauner, Jan Kara,
	Lyude Paul, Paul E. McKenney, Frederic Weisbecker,
	Neeraj Upadhyay, Joel Fernandes, Josh Triplett, Uladzislau Rezki,
	Steven Rostedt, Mathieu Desnoyers, Lai Jiangshan, Zqiang,
	Christian Schrefl, rust-for-linux, linux-kernel, linux-fsdevel,
	rcu

On Mon Jun 22, 2026 at 7:32 PM CEST, Philipp Stanner wrote:
> +/// Wait for one RCU grace period.
> +///
> +/// You typically do this to wait for everyone holding a [`Guard`].

NIT: "typically" reads a bit as if there were other reasons to call
synchronize_rcu() than to wait for all concurrent RCU read side critical
sections.

Also, while it's implicit, it might still be worth to explicitly call out that
this means concurrently held Guard objects (concurrent read side critical
sections), i.e. subsequent read side critical sections may still run
concurrently.

> +#[inline]
> +pub fn synchronize_rcu() {
> +    // SAFETY: `synchronize_rcu()` is always safe to be called. It just waits for a grace period.
> +    unsafe { bindings::synchronize_rcu() };
> +}
> -- 
> 2.54.0


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v2 0/3] Add and use abstraction for synchronize_rcu()
  2026-06-22 17:32 [PATCH v2 0/3] Add and use abstraction for synchronize_rcu() Philipp Stanner
                   ` (3 preceding siblings ...)
  2026-06-22 17:36 ` [PATCH v2 0/3] Add and use abstraction for synchronize_rcu() Onur Özkan
@ 2026-06-22 18:47 ` Danilo Krummrich
  4 siblings, 0 replies; 10+ messages in thread
From: Danilo Krummrich @ 2026-06-22 18:47 UTC (permalink / raw)
  To: Philipp Stanner
  Cc: Miguel Ojeda, Boqun Feng, Gary Guo, Björn Roy Baron,
	Benno Lossin, Andreas Hindborg, Alice Ryhl, Trevor Gross,
	Daniel Almeida, Tamir Duberstein, Alexandre Courbot,
	Onur Özkan, Alexander Viro, Christian Brauner, Jan Kara,
	Lyude Paul, Paul E. McKenney, Frederic Weisbecker,
	Neeraj Upadhyay, Joel Fernandes, Josh Triplett, Uladzislau Rezki,
	Steven Rostedt, Mathieu Desnoyers, Lai Jiangshan, Zqiang,
	Christian Schrefl, rust-for-linux, linux-kernel, linux-fsdevel,
	rcu

On Mon Jun 22, 2026 at 7:32 PM CEST, Philipp Stanner wrote:
>   rust: sync: Add abstraction for synchronize_rcu()
>   rust: revocable: Use safe synchronize_rcu() abstraction
>   rust: sync: Use safe synchronize_rcu() abstraction in poll

Reviewed-by: Danilo Krummrich <dakr@kernel.org>

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2026-06-22 18:47 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-22 17:32 [PATCH v2 0/3] Add and use abstraction for synchronize_rcu() Philipp Stanner
2026-06-22 17:32 ` [PATCH v2 1/3] rust: sync: Add " Philipp Stanner
2026-06-22 17:46   ` Gary Guo
2026-06-22 18:46   ` Danilo Krummrich
2026-06-22 17:32 ` [PATCH v2 2/3] rust: revocable: Use safe synchronize_rcu() abstraction Philipp Stanner
2026-06-22 17:47   ` Gary Guo
2026-06-22 17:32 ` [PATCH v2 3/3] rust: sync: Use safe synchronize_rcu() abstraction in poll Philipp Stanner
2026-06-22 17:47   ` Gary Guo
2026-06-22 17:36 ` [PATCH v2 0/3] Add and use abstraction for synchronize_rcu() Onur Özkan
2026-06-22 18:47 ` Danilo Krummrich

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox