From: Christian Schrefl <chrisi.schrefl@gmail.com>
To: "Miguel Ojeda" <ojeda@kernel.org>,
"Alex Gaynor" <alex.gaynor@gmail.com>,
"Boqun Feng" <boqun.feng@gmail.com>,
"Gary Guo" <gary@garyguo.net>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Benno Lossin" <lossin@kernel.org>,
"Andreas Hindborg" <a.hindborg@kernel.org>,
"Alice Ryhl" <aliceryhl@google.com>,
"Trevor Gross" <tmgross@umich.edu>,
"Danilo Krummrich" <dakr@kernel.org>
Cc: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org,
Christian Schrefl <chrisi.schrefl@gmail.com>
Subject: [PATCH] rust: add `assert_sync` function
Date: Sat, 07 Jun 2025 15:02:14 +0200 [thread overview]
Message-ID: <20250607-assert_sync-v1-1-b18261da83e2@gmail.com> (raw)
Adds a new file `compile_assert.rs` for asserts during compile time and
add the `assert_sync` function to this file.
This will be used in `miscdevice` to avoid regression in case a `: Send`
bound falsely gets dropped in the future.
Suggested-by: Benno Lossin <lossin@kernel.org>
Link: https://lore.kernel.org/rust-for-linux/20250530-b4-rust_miscdevice_registrationdata-v4-0-d313aafd7e59@gmail.com/T/#mdf3328834ce1d136daf836c9e089b5a8627a6d53
Signed-off-by: Christian Schrefl <chrisi.schrefl@gmail.com>
---
For now I've only added the function.
Some things that might make sense to do as well:
- Move `static_assert` into `compile_assert.rs`.
- Add `assert_sync` to prelude.
- Add `assert_send` as well.
- Use these asserts in various places around the kernel. (I'm not sure
where it would make sense)
---
rust/kernel/compile_assert.rs | 24 ++++++++++++++++++++++++
rust/kernel/lib.rs | 1 +
2 files changed, 25 insertions(+)
diff --git a/rust/kernel/compile_assert.rs b/rust/kernel/compile_assert.rs
new file mode 100644
index 0000000000000000000000000000000000000000..2a99de1ba919dc3952d7a1585869567a44106b44
--- /dev/null
+++ b/rust/kernel/compile_assert.rs
@@ -0,0 +1,24 @@
+// SPDX-License-Identifier: GPL-2.0
+
+//! Compile-time asserts.
+
+/// Asserts that the given type is [`Sync`]. This check is done at compile time and does nothing
+/// at runtime.
+///
+/// Note that this is only intended to avoid regressions and for sanity checks.
+///
+/// # Examples
+/// ```
+/// # use kernel::compile_assert::assert_sync;
+/// # use kernel::types::NotThreadSafe;
+///
+///
+/// // Do the assertion in a const block to make sure it won't be executed at runtime.
+/// const _:() = {
+/// assert_sync::<i32>(); // Succeeds because `i32` is Sync
+/// // assert_sync::<NotThreadSafe>(); // Fails because `NotThreadSafe` is not `Sync`.
+/// };
+///
+/// ```
+#[inline(always)]
+pub const fn assert_sync<T: ?Sized + Sync>() {}
diff --git a/rust/kernel/lib.rs b/rust/kernel/lib.rs
index 7e227b52b4d8ff23d39d5cc9ad3ab57132c448d0..e1630e5079b2436eda6f8b71225bd5371af337b4 100644
--- a/rust/kernel/lib.rs
+++ b/rust/kernel/lib.rs
@@ -56,6 +56,7 @@
pub mod block;
#[doc(hidden)]
pub mod build_assert;
+pub mod compile_assert;
pub mod cred;
pub mod device;
pub mod device_id;
---
base-commit: 7a17bbc1d952057898cb0739e60665908fbb8c72
change-id: 20250607-assert_sync-62fddc5a0adc
Best regards,
--
Christian Schrefl <chrisi.schrefl@gmail.com>
next reply other threads:[~2025-06-07 13:02 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-07 13:02 Christian Schrefl [this message]
2025-06-07 15:42 ` [PATCH] rust: add `assert_sync` function Benno Lossin
2025-06-07 15:54 ` Christian Schrefl
2025-06-07 17:30 ` Miguel Ojeda
2025-06-07 18:11 ` Benno Lossin
2025-06-07 19:20 ` Christian Schrefl
2025-06-07 22:31 ` Benno Lossin
2025-06-07 23:38 ` Christian Schrefl
2025-06-08 7:41 ` Benno Lossin
2025-06-07 17:29 ` Miguel Ojeda
2025-06-07 20:19 ` Christian Schrefl
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250607-assert_sync-v1-1-b18261da83e2@gmail.com \
--to=chrisi.schrefl@gmail.com \
--cc=a.hindborg@kernel.org \
--cc=alex.gaynor@gmail.com \
--cc=aliceryhl@google.com \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun.feng@gmail.com \
--cc=dakr@kernel.org \
--cc=gary@garyguo.net \
--cc=linux-kernel@vger.kernel.org \
--cc=lossin@kernel.org \
--cc=ojeda@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=tmgross@umich.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.