rust-for-linux.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] rust: sync: lock: Add an example for Guard::lock_ref()
@ 2025-02-23  7:21 Boqun Feng
  2025-02-23 10:54 ` Benno Lossin
                   ` (2 more replies)
  0 siblings, 3 replies; 11+ messages in thread
From: Boqun Feng @ 2025-02-23  7:21 UTC (permalink / raw)
  To: linux-kernel, rust-for-linux
  Cc: Peter Zijlstra, Ingo Molnar, Will Deacon, Boqun Feng, Waiman Long,
	Miguel Ojeda, Alex Gaynor, Gary Guo, Björn Roy Baron,
	Benno Lossin, Andreas Hindborg, Alice Ryhl, Trevor Gross

To provide examples on usage of `Guard::lock_ref()` along with the unit
test, an "assert a lock is held by a guard" example is added.

Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
---
This depends on Alice's patch:

	https://lore.kernel.org/all/20250130-guard-get-lock-v1-1-8ed87899920a@google.com/

I'm also OK to fold this in if Alice thinks it's fine.

 rust/kernel/sync/lock.rs | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/rust/kernel/sync/lock.rs b/rust/kernel/sync/lock.rs
index 3701fac6ebf6..6d868e35b0a3 100644
--- a/rust/kernel/sync/lock.rs
+++ b/rust/kernel/sync/lock.rs
@@ -201,6 +201,30 @@ unsafe impl<T: Sync + ?Sized, B: Backend> Sync for Guard<'_, T, B> {}
 
 impl<'a, T: ?Sized, B: Backend> Guard<'a, T, B> {
     /// Returns the lock that this guard originates from.
+    ///
+    /// # Examples
+    ///
+    /// The following example shows how to use [`Guard::lock_ref()`] to assert the corresponding
+    /// lock is held.
+    ///
+    /// ```
+    /// # use kernel::{new_spinlock, stack_pin_init, sync::lock::{Backend, Guard, Lock}};
+    ///
+    /// fn assert_held<T, B: Backend>(guard: &Guard<'_, T, B>, lock: &Lock<T, B>) {
+    ///     // Address-equal means the same lock.
+    ///     assert!(core::ptr::eq(guard.lock_ref(), lock));
+    /// }
+    ///
+    /// // Creates a new lock on stack.
+    /// stack_pin_init!{
+    ///     let l = new_spinlock!(42)
+    /// }
+    ///
+    /// let g = l.lock();
+    ///
+    /// // `g` originates from `l`.
+    /// assert_held(&g, &l);
+    /// ```
     pub fn lock_ref(&self) -> &'a Lock<T, B> {
         self.lock
     }
-- 
2.39.5 (Apple Git-154)


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

end of thread, other threads:[~2025-02-25 16:53 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-23  7:21 [PATCH] rust: sync: lock: Add an example for Guard::lock_ref() Boqun Feng
2025-02-23 10:54 ` Benno Lossin
2025-02-23 21:51   ` Boqun Feng
2025-02-24  8:08 ` Andreas Hindborg
2025-02-24 10:06   ` Benno Lossin
2025-02-24 11:15     ` Andreas Hindborg
2025-02-24 22:50       ` Benno Lossin
2025-02-25  5:52         ` Andreas Hindborg
2025-02-24 23:31   ` Boqun Feng
2025-02-24 11:19 ` Alice Ryhl
2025-02-25 16:53   ` Boqun Feng

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).