linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 01/13] rust: sync: introduce `LockClassKey`
@ 2023-03-30  4:39 Wedson Almeida Filho
  2023-03-30  4:39 ` [PATCH 02/13] rust: sync: introduce `Lock` and `Guard` Wedson Almeida Filho
                   ` (13 more replies)
  0 siblings, 14 replies; 42+ messages in thread
From: Wedson Almeida Filho @ 2023-03-30  4:39 UTC (permalink / raw)
  To: rust-for-linux
  Cc: Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
	Björn Roy Baron, linux-kernel, Wedson Almeida Filho,
	Peter Zijlstra, Ingo Molnar, Will Deacon, Waiman Long

From: Wedson Almeida Filho <walmeida@microsoft.com>

It is a wrapper around C's `lock_class_key`, which is used by the
synchronisation primitives that are checked with lockdep. This is in
preparation for introducing Rust abstractions for these primitives.

Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Will Deacon <will@kernel.org>
Cc: Waiman Long <longman@redhat.com>
Co-developed-by: Boqun Feng <boqun.feng@gmail.com>
Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
Signed-off-by: Wedson Almeida Filho <walmeida@microsoft.com>
---
 rust/kernel/sync.rs | 45 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 45 insertions(+)

diff --git a/rust/kernel/sync.rs b/rust/kernel/sync.rs
index 33da23e3076d..84a4b560828c 100644
--- a/rust/kernel/sync.rs
+++ b/rust/kernel/sync.rs
@@ -5,6 +5,51 @@
 //! This module contains the kernel APIs related to synchronisation that have been ported or
 //! wrapped for usage by Rust code in the kernel.
 
+use crate::types::Opaque;
+
 mod arc;
 
 pub use arc::{Arc, ArcBorrow, UniqueArc};
+
+/// Represents a lockdep class. It's a wrapper around C's `lock_class_key`.
+#[repr(transparent)]
+pub struct LockClassKey(Opaque<bindings::lock_class_key>);
+
+// SAFETY: `bindings::lock_class_key` is designed to be used concurrently from multiple threads and
+// provides its own synchronization.
+unsafe impl Sync for LockClassKey {}
+
+impl LockClassKey {
+    /// Creates a new lock class key.
+    pub const fn new() -> Self {
+        Self(Opaque::uninit())
+    }
+
+    #[allow(dead_code)]
+    pub(crate) fn as_ptr(&self) -> *mut bindings::lock_class_key {
+        self.0.get()
+    }
+}
+
+/// Defines a new static lock class and returns a pointer to it.
+#[doc(hidden)]
+#[macro_export]
+macro_rules! static_lock_class {
+    () => {{
+        static CLASS: $crate::sync::LockClassKey = $crate::sync::LockClassKey::new();
+        &CLASS
+    }};
+}
+
+/// Returns the given string, if one is provided, otherwise generateis one based on the source code
+/// location.
+#[doc(hidden)]
+#[macro_export]
+macro_rules! optional_name {
+    () => {
+        $crate::c_str!(core::concat!(core::file!(), ":", core::line!()))
+    };
+    ($name:literal) => {
+        $crate::c_str!($name)
+    };
+}
-- 
2.34.1


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

end of thread, other threads:[~2023-04-05 17:42 UTC | newest]

Thread overview: 42+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-03-30  4:39 [PATCH 01/13] rust: sync: introduce `LockClassKey` Wedson Almeida Filho
2023-03-30  4:39 ` [PATCH 02/13] rust: sync: introduce `Lock` and `Guard` Wedson Almeida Filho
2023-03-30  4:39 ` [PATCH 03/13] rust: lock: introduce `Mutex` Wedson Almeida Filho
2023-03-30 13:01   ` Peter Zijlstra
2023-03-30 18:47     ` Boqun Feng
2023-03-30 18:51       ` [DRAFT 1/2] locking/selftest: Add test infrastructure for Rust locking APIs Boqun Feng
2023-03-30 18:51         ` [DRAFT 2/2] locking/selftest: Add AA deadlock selftest for Mutex and SpinLock Boqun Feng
2023-03-30 18:56       ` [PATCH 03/13] rust: lock: introduce `Mutex` Boqun Feng
2023-04-03  8:20       ` Peter Zijlstra
2023-04-03 13:50         ` Wedson Almeida Filho
2023-04-03 15:25           ` Gary Guo
2023-04-03 15:44             ` Boqun Feng
2023-04-03 14:04         ` Boqun Feng
2023-03-30  4:39 ` [PATCH 04/13] locking/spinlock: introduce spin_lock_init_with_key Wedson Almeida Filho
2023-03-30  4:39 ` [PATCH 05/13] rust: lock: introduce `SpinLock` Wedson Almeida Filho
2023-03-30  4:39 ` [PATCH 06/13] rust: lock: add support for `Lock::lock_irqsave` Wedson Almeida Filho
2023-03-30  4:39 ` [PATCH 07/13] rust: lock: implement `IrqSaveBackend` for `SpinLock` Wedson Almeida Filho
2023-03-30  4:39 ` [PATCH 08/13] rust: introduce `ARef` Wedson Almeida Filho
2023-03-30 14:17   ` Gary Guo
2023-03-30  4:39 ` [PATCH 09/13] rust: add basic `Task` Wedson Almeida Filho
2023-03-30  4:39 ` [PATCH 10/13] rust: introduce `Task::current` Wedson Almeida Filho
2023-03-31  2:47   ` Gary Guo
2023-03-31  7:32     ` Alice Ryhl
2023-04-01  4:09     ` Wedson Almeida Filho
2023-04-01  7:01       ` Gary Guo
2023-03-30  4:39 ` [PATCH 11/13] rust: lock: add `Guard::do_unlocked` Wedson Almeida Filho
2023-03-30  4:39 ` [PATCH 12/13] rust: sync: introduce `CondVar` Wedson Almeida Filho
2023-03-30 12:52   ` Peter Zijlstra
2023-03-30 14:43     ` Wedson Almeida Filho
2023-03-30 12:59   ` Peter Zijlstra
2023-03-30 14:56     ` Wedson Almeida Filho
2023-04-03  8:59       ` Peter Zijlstra
2023-04-03 13:35         ` Wedson Almeida Filho
2023-03-30  4:39 ` [PATCH 13/13] rust: sync: introduce `LockedBy` Wedson Almeida Filho
2023-03-30 11:28   ` Benno Lossin
2023-03-30 11:45     ` Benno Lossin
2023-03-30 21:04       ` Wedson Almeida Filho
2023-03-30 21:10         ` Benno Lossin
2023-03-30 20:44     ` Wedson Almeida Filho
2023-03-30 11:10 ` [PATCH 01/13] rust: sync: introduce `LockClassKey` Gary Guo
2023-03-31  7:28 ` Alice Ryhl
2023-04-05 17:42   ` Wedson Almeida Filho

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).