All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/2] rust: sync: Arc: Implement Debug and Display
@ 2023-02-07 18:52 Boqun Feng
  2023-02-07 18:52 ` [PATCH v2 1/2] rust: sync: impl {Debug,Display} for {Unique,}Arc Boqun Feng
                   ` (2 more replies)
  0 siblings, 3 replies; 17+ messages in thread
From: Boqun Feng @ 2023-02-07 18:52 UTC (permalink / raw)
  To: linux-kernel, rust-for-linux
  Cc: Miguel Ojeda, Alex Gaynor, Wedson Almeida Filho, Boqun Feng,
	Gary Guo, Björn Roy Baron, Vincenzo Palazzo, Will Deacon,
	Peter Zijlstra, Mark Rutland, Greg Kroah-Hartman,
	Sergio González Collado, Finn Behrens

previous version:

v1:	https://lore.kernel.org/rust-for-linux/20230201232244.212908-1-boqun.feng@gmail.com/	

Changes since v1:

*	Remove the refcount for Debug impl as per Peter and Greg.
*	Since the refcount_read() bits are removed, therefore squash all
	4 patches into one (I keep the Reviewed-by tags for anyone that
	gave to both patch #1 and patch #4 in v1). Thanks for everyone
	for the reviewing ;-)


I found that our Arc doesn't implement `Debug` or `Display` when I tried
to play with them, therefore add these implementation.

With these changes, I could get the following print with the sample code
in patch #2:

	[..] rust_print: 1
	[..] rust_print: "hello, world"
	[..] rust_print: [samples/rust/rust_print.rs:34] c = "hello, world"
	[..] rust_print: "hello, world"

Suggestions and comments are welcome!

Regards,
Boqun

-- 
2.39.1


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

* [PATCH v2 1/2] rust: sync: impl {Debug,Display} for {Unique,}Arc
  2023-02-07 18:52 [PATCH v2 0/2] rust: sync: Arc: Implement Debug and Display Boqun Feng
@ 2023-02-07 18:52 ` Boqun Feng
  2023-02-07 19:03   ` Carlos Bilbao
                     ` (4 more replies)
  2023-02-07 18:52 ` [PATCH v2 2/2] sample: rust: print: Add sampe code for Arc printing Boqun Feng
  2023-04-10  2:53 ` [PATCH v2 0/2] rust: sync: Arc: Implement Debug and Display Miguel Ojeda
  2 siblings, 5 replies; 17+ messages in thread
From: Boqun Feng @ 2023-02-07 18:52 UTC (permalink / raw)
  To: linux-kernel, rust-for-linux
  Cc: Miguel Ojeda, Alex Gaynor, Wedson Almeida Filho, Boqun Feng,
	Gary Guo, Björn Roy Baron, Vincenzo Palazzo, Will Deacon,
	Peter Zijlstra, Mark Rutland, Greg Kroah-Hartman,
	Sergio González Collado, Finn Behrens

This allows printing the inner data of `Arc` and its friends if the
inner data implements `Display` or `Debug`. It's useful for logging and
debugging purpose.

Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
Reviwed-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com>
---
 rust/kernel/sync/arc.rs | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/rust/kernel/sync/arc.rs b/rust/kernel/sync/arc.rs
index 519a6ec43644..e6176d9b5b29 100644
--- a/rust/kernel/sync/arc.rs
+++ b/rust/kernel/sync/arc.rs
@@ -22,6 +22,7 @@ use crate::{
 };
 use alloc::boxed::Box;
 use core::{
+    fmt,
     marker::{PhantomData, Unsize},
     mem::{ManuallyDrop, MaybeUninit},
     ops::{Deref, DerefMut},
@@ -522,3 +523,27 @@ impl<T: ?Sized> DerefMut for UniqueArc<T> {
         unsafe { &mut self.inner.ptr.as_mut().data }
     }
 }
+
+impl<T: fmt::Display + ?Sized> fmt::Display for UniqueArc<T> {
+    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+        fmt::Display::fmt(self.deref(), f)
+    }
+}
+
+impl<T: fmt::Display + ?Sized> fmt::Display for Arc<T> {
+    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+        fmt::Display::fmt(self.deref(), f)
+    }
+}
+
+impl<T: fmt::Debug + ?Sized> fmt::Debug for UniqueArc<T> {
+    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+        fmt::Debug::fmt(self.deref(), f)
+    }
+}
+
+impl<T: fmt::Debug + ?Sized> fmt::Debug for Arc<T> {
+    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+        fmt::Debug::fmt(self.deref(), f)
+    }
+}
-- 
2.39.1


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

* [PATCH v2 2/2] sample: rust: print: Add sampe code for Arc printing
  2023-02-07 18:52 [PATCH v2 0/2] rust: sync: Arc: Implement Debug and Display Boqun Feng
  2023-02-07 18:52 ` [PATCH v2 1/2] rust: sync: impl {Debug,Display} for {Unique,}Arc Boqun Feng
@ 2023-02-07 18:52 ` Boqun Feng
  2023-02-08  4:57   ` Gary Guo
                     ` (2 more replies)
  2023-04-10  2:53 ` [PATCH v2 0/2] rust: sync: Arc: Implement Debug and Display Miguel Ojeda
  2 siblings, 3 replies; 17+ messages in thread
From: Boqun Feng @ 2023-02-07 18:52 UTC (permalink / raw)
  To: linux-kernel, rust-for-linux
  Cc: Miguel Ojeda, Alex Gaynor, Wedson Almeida Filho, Boqun Feng,
	Gary Guo, Björn Roy Baron, Vincenzo Palazzo, Will Deacon,
	Peter Zijlstra, Mark Rutland, Greg Kroah-Hartman,
	Sergio González Collado, Finn Behrens

This both demonstrates the usage of different print format in Rust and
serves as a selftest for the `Display` and `Debug` implementation of
`Arc` and its friends.

Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
Reviewed-by: Björn Roy Baron <bjorn3_gh@protonmail.com>
Reviewed-by: Finn Behrens <fin@nyantec.com>
Reviewed-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com>
---
 samples/rust/rust_print.rs | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/samples/rust/rust_print.rs b/samples/rust/rust_print.rs
index 8b39d9cef6d1..165a8d7b1c07 100644
--- a/samples/rust/rust_print.rs
+++ b/samples/rust/rust_print.rs
@@ -15,6 +15,30 @@ module! {
 
 struct RustPrint;
 
+fn arc_print() -> Result {
+    use kernel::sync::*;
+
+    let a = Arc::try_new(1)?;
+    let b = UniqueArc::try_new("hello, world")?;
+
+    // Prints the value of data in `a`.
+    pr_info!("{}", a);
+
+    // Uses ":?" to print debug fmt of `b`.
+    pr_info!("{:?}", b);
+
+    let a: Arc<&str> = b.into();
+    let c = a.clone();
+
+    // Uses `dbg` to print, will move `c`.
+    dbg!(c);
+
+    // Prints debug fmt with pretty-print "#" and number-in-hex "x".
+    pr_info!("{:#x?}", a);
+
+    Ok(())
+}
+
 impl kernel::Module for RustPrint {
     fn init(_module: &'static ThisModule) -> Result<Self> {
         pr_info!("Rust printing macros sample (init)\n");
@@ -43,6 +67,8 @@ impl kernel::Module for RustPrint {
         pr_cont!(" is {}", "continued");
         pr_cont!(" with {}\n", "args");
 
+        arc_print()?;
+
         Ok(RustPrint)
     }
 }
-- 
2.39.1


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

* Re: [PATCH v2 1/2] rust: sync: impl {Debug,Display} for {Unique,}Arc
  2023-02-07 18:52 ` [PATCH v2 1/2] rust: sync: impl {Debug,Display} for {Unique,}Arc Boqun Feng
@ 2023-02-07 19:03   ` Carlos Bilbao
  2023-02-07 20:27     ` Vincenzo Palazzo
  2023-02-07 20:45   ` Vincenzo Palazzo
                     ` (3 subsequent siblings)
  4 siblings, 1 reply; 17+ messages in thread
From: Carlos Bilbao @ 2023-02-07 19:03 UTC (permalink / raw)
  To: Boqun Feng, linux-kernel, rust-for-linux
  Cc: Miguel Ojeda, Alex Gaynor, Wedson Almeida Filho, Gary Guo,
	Björn Roy Baron, Vincenzo Palazzo, Will Deacon,
	Peter Zijlstra, Mark Rutland, Greg Kroah-Hartman,
	Sergio González Collado, Finn Behrens

On 2/7/23 12:52, Boqun Feng wrote:

> This allows printing the inner data of `Arc` and its friends if the
> inner data implements `Display` or `Debug`. It's useful for logging and
> debugging purpose.
>
> Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
> Reviwed-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com>


s/Reviwed/Reviewed


> ---
>   rust/kernel/sync/arc.rs | 25 +++++++++++++++++++++++++
>   1 file changed, 25 insertions(+)
>
> diff --git a/rust/kernel/sync/arc.rs b/rust/kernel/sync/arc.rs
> index 519a6ec43644..e6176d9b5b29 100644
> --- a/rust/kernel/sync/arc.rs
> +++ b/rust/kernel/sync/arc.rs
> @@ -22,6 +22,7 @@ use crate::{
>   };
>   use alloc::boxed::Box;
>   use core::{
> +    fmt,
>       marker::{PhantomData, Unsize},
>       mem::{ManuallyDrop, MaybeUninit},
>       ops::{Deref, DerefMut},
> @@ -522,3 +523,27 @@ impl<T: ?Sized> DerefMut for UniqueArc<T> {
>           unsafe { &mut self.inner.ptr.as_mut().data }
>       }
>   }
> +
> +impl<T: fmt::Display + ?Sized> fmt::Display for UniqueArc<T> {
> +    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
> +        fmt::Display::fmt(self.deref(), f)
> +    }
> +}
> +
> +impl<T: fmt::Display + ?Sized> fmt::Display for Arc<T> {
> +    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
> +        fmt::Display::fmt(self.deref(), f)
> +    }
> +}
> +
> +impl<T: fmt::Debug + ?Sized> fmt::Debug for UniqueArc<T> {
> +    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
> +        fmt::Debug::fmt(self.deref(), f)
> +    }
> +}
> +
> +impl<T: fmt::Debug + ?Sized> fmt::Debug for Arc<T> {
> +    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
> +        fmt::Debug::fmt(self.deref(), f)
> +    }
> +}


Just a thought, perhaps it's worth creating a macro to implement this
trait, since all do the same with fmt and others might join later on.


Thanks,
Carlos

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

* Re: [PATCH v2 1/2] rust: sync: impl {Debug,Display} for {Unique,}Arc
  2023-02-07 19:03   ` Carlos Bilbao
@ 2023-02-07 20:27     ` Vincenzo Palazzo
  0 siblings, 0 replies; 17+ messages in thread
From: Vincenzo Palazzo @ 2023-02-07 20:27 UTC (permalink / raw)
  To: Carlos Bilbao, Boqun Feng, linux-kernel, rust-for-linux
  Cc: Miguel Ojeda, Alex Gaynor, Wedson Almeida Filho, Gary Guo,
	Björn Roy Baron, Will Deacon, Peter Zijlstra, Mark Rutland,
	Greg Kroah-Hartman, Sergio González Collado, Finn Behrens

On Tue Feb 7, 2023 at 7:03 PM UTC, Carlos Bilbao wrote:
> On 2/7/23 12:52, Boqun Feng wrote:
>
> > This allows printing the inner data of `Arc` and its friends if the
> > inner data implements `Display` or `Debug`. It's useful for logging and
> > debugging purpose.
> >
> > Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
> > Reviwed-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com>
>
>
> s/Reviwed/Reviewed
Ops! this is my fautl! I will review the version 2.

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

* Re: [PATCH v2 1/2] rust: sync: impl {Debug,Display} for {Unique,}Arc
  2023-02-07 18:52 ` [PATCH v2 1/2] rust: sync: impl {Debug,Display} for {Unique,}Arc Boqun Feng
  2023-02-07 19:03   ` Carlos Bilbao
@ 2023-02-07 20:45   ` Vincenzo Palazzo
  2023-02-07 20:54     ` Boqun Feng
  2023-02-08  4:57   ` Gary Guo
                     ` (2 subsequent siblings)
  4 siblings, 1 reply; 17+ messages in thread
From: Vincenzo Palazzo @ 2023-02-07 20:45 UTC (permalink / raw)
  To: Boqun Feng, linux-kernel, rust-for-linux
  Cc: Miguel Ojeda, Alex Gaynor, Wedson Almeida Filho, Gary Guo,
	Björn Roy Baron, Will Deacon, Peter Zijlstra, Mark Rutland,
	Greg Kroah-Hartman, Sergio González Collado, Finn Behrens

> This allows printing the inner data of `Arc` and its friends if the
> inner data implements `Display` or `Debug`. It's useful for logging and
> debugging purpose.
>
> Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
> Reviwed-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com>
> ---
With this review I will override my previous one, because it 
contains a typo inside the Reviewed-by.

Sorry about that!

Reviewed-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com>

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

* Re: [PATCH v2 1/2] rust: sync: impl {Debug,Display} for {Unique,}Arc
  2023-02-07 20:45   ` Vincenzo Palazzo
@ 2023-02-07 20:54     ` Boqun Feng
  0 siblings, 0 replies; 17+ messages in thread
From: Boqun Feng @ 2023-02-07 20:54 UTC (permalink / raw)
  To: Vincenzo Palazzo
  Cc: linux-kernel, rust-for-linux, Miguel Ojeda, Alex Gaynor,
	Wedson Almeida Filho, Gary Guo, Björn Roy Baron,
	Will Deacon, Peter Zijlstra, Mark Rutland, Greg Kroah-Hartman,
	Sergio González Collado, Finn Behrens

On Tue, Feb 07, 2023 at 08:45:59PM +0000, Vincenzo Palazzo wrote:
> > This allows printing the inner data of `Arc` and its friends if the
> > inner data implements `Display` or `Debug`. It's useful for logging and
> > debugging purpose.
> >
> > Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
> > Reviwed-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com>
> > ---
> With this review I will override my previous one, because it 
> contains a typo inside the Reviewed-by.
> 
> Sorry about that!
> 

No worries.

> Reviewed-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com>

Thanks!

Regards,
Boqun

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

* Re: [PATCH v2 1/2] rust: sync: impl {Debug,Display} for {Unique,}Arc
  2023-02-07 18:52 ` [PATCH v2 1/2] rust: sync: impl {Debug,Display} for {Unique,}Arc Boqun Feng
  2023-02-07 19:03   ` Carlos Bilbao
  2023-02-07 20:45   ` Vincenzo Palazzo
@ 2023-02-08  4:57   ` Gary Guo
  2023-02-08 10:00   ` Andreas Hindborg
  2023-02-08 13:43   ` Björn Roy Baron
  4 siblings, 0 replies; 17+ messages in thread
From: Gary Guo @ 2023-02-08  4:57 UTC (permalink / raw)
  To: Boqun Feng
  Cc: linux-kernel, rust-for-linux, Miguel Ojeda, Alex Gaynor,
	Wedson Almeida Filho, Björn Roy Baron, Vincenzo Palazzo,
	Will Deacon, Peter Zijlstra, Mark Rutland, Greg Kroah-Hartman,
	Sergio González Collado, Finn Behrens

On Tue,  7 Feb 2023 10:52:15 -0800
Boqun Feng <boqun.feng@gmail.com> wrote:

> This allows printing the inner data of `Arc` and its friends if the
> inner data implements `Display` or `Debug`. It's useful for logging and
> debugging purpose.
> 
> Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
> Reviwed-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com>

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

> ---
>  rust/kernel/sync/arc.rs | 25 +++++++++++++++++++++++++
>  1 file changed, 25 insertions(+)
> 
> diff --git a/rust/kernel/sync/arc.rs b/rust/kernel/sync/arc.rs
> index 519a6ec43644..e6176d9b5b29 100644
> --- a/rust/kernel/sync/arc.rs
> +++ b/rust/kernel/sync/arc.rs
> @@ -22,6 +22,7 @@ use crate::{
>  };
>  use alloc::boxed::Box;
>  use core::{
> +    fmt,
>      marker::{PhantomData, Unsize},
>      mem::{ManuallyDrop, MaybeUninit},
>      ops::{Deref, DerefMut},
> @@ -522,3 +523,27 @@ impl<T: ?Sized> DerefMut for UniqueArc<T> {
>          unsafe { &mut self.inner.ptr.as_mut().data }
>      }
>  }
> +
> +impl<T: fmt::Display + ?Sized> fmt::Display for UniqueArc<T> {
> +    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
> +        fmt::Display::fmt(self.deref(), f)
> +    }
> +}
> +
> +impl<T: fmt::Display + ?Sized> fmt::Display for Arc<T> {
> +    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
> +        fmt::Display::fmt(self.deref(), f)
> +    }
> +}
> +
> +impl<T: fmt::Debug + ?Sized> fmt::Debug for UniqueArc<T> {
> +    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
> +        fmt::Debug::fmt(self.deref(), f)
> +    }
> +}
> +
> +impl<T: fmt::Debug + ?Sized> fmt::Debug for Arc<T> {
> +    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
> +        fmt::Debug::fmt(self.deref(), f)
> +    }
> +}


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

* Re: [PATCH v2 2/2] sample: rust: print: Add sampe code for Arc printing
  2023-02-07 18:52 ` [PATCH v2 2/2] sample: rust: print: Add sampe code for Arc printing Boqun Feng
@ 2023-02-08  4:57   ` Gary Guo
  2023-02-08 10:01   ` Andreas Hindborg
  2023-02-08 15:19   ` Miguel Ojeda
  2 siblings, 0 replies; 17+ messages in thread
From: Gary Guo @ 2023-02-08  4:57 UTC (permalink / raw)
  To: Boqun Feng
  Cc: linux-kernel, rust-for-linux, Miguel Ojeda, Alex Gaynor,
	Wedson Almeida Filho, Björn Roy Baron, Vincenzo Palazzo,
	Will Deacon, Peter Zijlstra, Mark Rutland, Greg Kroah-Hartman,
	Sergio González Collado, Finn Behrens

On Tue,  7 Feb 2023 10:52:16 -0800
Boqun Feng <boqun.feng@gmail.com> wrote:

> This both demonstrates the usage of different print format in Rust and
> serves as a selftest for the `Display` and `Debug` implementation of
> `Arc` and its friends.
> 
> Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
> Reviewed-by: Björn Roy Baron <bjorn3_gh@protonmail.com>
> Reviewed-by: Finn Behrens <fin@nyantec.com>
> Reviewed-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com>

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

> ---
>  samples/rust/rust_print.rs | 26 ++++++++++++++++++++++++++
>  1 file changed, 26 insertions(+)
> 
> diff --git a/samples/rust/rust_print.rs b/samples/rust/rust_print.rs
> index 8b39d9cef6d1..165a8d7b1c07 100644
> --- a/samples/rust/rust_print.rs
> +++ b/samples/rust/rust_print.rs
> @@ -15,6 +15,30 @@ module! {
>  
>  struct RustPrint;
>  
> +fn arc_print() -> Result {
> +    use kernel::sync::*;
> +
> +    let a = Arc::try_new(1)?;
> +    let b = UniqueArc::try_new("hello, world")?;
> +
> +    // Prints the value of data in `a`.
> +    pr_info!("{}", a);
> +
> +    // Uses ":?" to print debug fmt of `b`.
> +    pr_info!("{:?}", b);
> +
> +    let a: Arc<&str> = b.into();
> +    let c = a.clone();
> +
> +    // Uses `dbg` to print, will move `c`.
> +    dbg!(c);
> +
> +    // Prints debug fmt with pretty-print "#" and number-in-hex "x".
> +    pr_info!("{:#x?}", a);
> +
> +    Ok(())
> +}
> +
>  impl kernel::Module for RustPrint {
>      fn init(_module: &'static ThisModule) -> Result<Self> {
>          pr_info!("Rust printing macros sample (init)\n");
> @@ -43,6 +67,8 @@ impl kernel::Module for RustPrint {
>          pr_cont!(" is {}", "continued");
>          pr_cont!(" with {}\n", "args");
>  
> +        arc_print()?;
> +
>          Ok(RustPrint)
>      }
>  }


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

* Re: [PATCH v2 1/2] rust: sync: impl {Debug,Display} for {Unique,}Arc
  2023-02-07 18:52 ` [PATCH v2 1/2] rust: sync: impl {Debug,Display} for {Unique,}Arc Boqun Feng
                     ` (2 preceding siblings ...)
  2023-02-08  4:57   ` Gary Guo
@ 2023-02-08 10:00   ` Andreas Hindborg
  2023-02-08 13:43   ` Björn Roy Baron
  4 siblings, 0 replies; 17+ messages in thread
From: Andreas Hindborg @ 2023-02-08 10:00 UTC (permalink / raw)
  To: Boqun Feng
  Cc: linux-kernel, rust-for-linux, Miguel Ojeda, Alex Gaynor,
	Wedson Almeida Filho, Gary Guo, Björn Roy Baron,
	Vincenzo Palazzo, Will Deacon, Peter Zijlstra, Mark Rutland,
	Greg Kroah-Hartman, Sergio González Collado, Finn Behrens


Boqun Feng <boqun.feng@gmail.com> writes:

> This allows printing the inner data of `Arc` and its friends if the
> inner data implements `Display` or `Debug`. It's useful for logging and
> debugging purpose.
>
> Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
> Reviwed-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com>
> ---

Reviewed-by: Andreas Hindborg <a.hindborg@samsung.com>

>  rust/kernel/sync/arc.rs | 25 +++++++++++++++++++++++++
>  1 file changed, 25 insertions(+)
>
> diff --git a/rust/kernel/sync/arc.rs b/rust/kernel/sync/arc.rs
> index 519a6ec43644..e6176d9b5b29 100644
> --- a/rust/kernel/sync/arc.rs
> +++ b/rust/kernel/sync/arc.rs
> @@ -22,6 +22,7 @@ use crate::{
>  };
>  use alloc::boxed::Box;
>  use core::{
> +    fmt,
>      marker::{PhantomData, Unsize},
>      mem::{ManuallyDrop, MaybeUninit},
>      ops::{Deref, DerefMut},
> @@ -522,3 +523,27 @@ impl<T: ?Sized> DerefMut for UniqueArc<T> {
>          unsafe { &mut self.inner.ptr.as_mut().data }
>      }
>  }
> +
> +impl<T: fmt::Display + ?Sized> fmt::Display for UniqueArc<T> {
> +    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
> +        fmt::Display::fmt(self.deref(), f)
> +    }
> +}
> +
> +impl<T: fmt::Display + ?Sized> fmt::Display for Arc<T> {
> +    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
> +        fmt::Display::fmt(self.deref(), f)
> +    }
> +}
> +
> +impl<T: fmt::Debug + ?Sized> fmt::Debug for UniqueArc<T> {
> +    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
> +        fmt::Debug::fmt(self.deref(), f)
> +    }
> +}
> +
> +impl<T: fmt::Debug + ?Sized> fmt::Debug for Arc<T> {
> +    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
> +        fmt::Debug::fmt(self.deref(), f)
> +    }
> +}


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

* Re: [PATCH v2 2/2] sample: rust: print: Add sampe code for Arc printing
  2023-02-07 18:52 ` [PATCH v2 2/2] sample: rust: print: Add sampe code for Arc printing Boqun Feng
  2023-02-08  4:57   ` Gary Guo
@ 2023-02-08 10:01   ` Andreas Hindborg
  2023-02-08 15:19   ` Miguel Ojeda
  2 siblings, 0 replies; 17+ messages in thread
From: Andreas Hindborg @ 2023-02-08 10:01 UTC (permalink / raw)
  To: Boqun Feng
  Cc: linux-kernel, rust-for-linux, Miguel Ojeda, Alex Gaynor,
	Wedson Almeida Filho, Gary Guo, Björn Roy Baron,
	Vincenzo Palazzo, Will Deacon, Peter Zijlstra, Mark Rutland,
	Greg Kroah-Hartman, Sergio González Collado, Finn Behrens


Boqun Feng <boqun.feng@gmail.com> writes:

> This both demonstrates the usage of different print format in Rust and
> serves as a selftest for the `Display` and `Debug` implementation of
> `Arc` and its friends.
>
> Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
> Reviewed-by: Björn Roy Baron <bjorn3_gh@protonmail.com>
> Reviewed-by: Finn Behrens <fin@nyantec.com>
> Reviewed-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com>
> ---

Reviewed-by: Andreas Hindborg <a.hindborg@samsung.com>


>  samples/rust/rust_print.rs | 26 ++++++++++++++++++++++++++
>  1 file changed, 26 insertions(+)
>
> diff --git a/samples/rust/rust_print.rs b/samples/rust/rust_print.rs
> index 8b39d9cef6d1..165a8d7b1c07 100644
> --- a/samples/rust/rust_print.rs
> +++ b/samples/rust/rust_print.rs
> @@ -15,6 +15,30 @@ module! {
>  
>  struct RustPrint;
>  
> +fn arc_print() -> Result {
> +    use kernel::sync::*;
> +
> +    let a = Arc::try_new(1)?;
> +    let b = UniqueArc::try_new("hello, world")?;
> +
> +    // Prints the value of data in `a`.
> +    pr_info!("{}", a);
> +
> +    // Uses ":?" to print debug fmt of `b`.
> +    pr_info!("{:?}", b);
> +
> +    let a: Arc<&str> = b.into();
> +    let c = a.clone();
> +
> +    // Uses `dbg` to print, will move `c`.
> +    dbg!(c);
> +
> +    // Prints debug fmt with pretty-print "#" and number-in-hex "x".
> +    pr_info!("{:#x?}", a);
> +
> +    Ok(())
> +}
> +
>  impl kernel::Module for RustPrint {
>      fn init(_module: &'static ThisModule) -> Result<Self> {
>          pr_info!("Rust printing macros sample (init)\n");
> @@ -43,6 +67,8 @@ impl kernel::Module for RustPrint {
>          pr_cont!(" is {}", "continued");
>          pr_cont!(" with {}\n", "args");
>  
> +        arc_print()?;
> +
>          Ok(RustPrint)
>      }
>  }


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

* Re: [PATCH v2 1/2] rust: sync: impl {Debug,Display} for {Unique,}Arc
  2023-02-07 18:52 ` [PATCH v2 1/2] rust: sync: impl {Debug,Display} for {Unique,}Arc Boqun Feng
                     ` (3 preceding siblings ...)
  2023-02-08 10:00   ` Andreas Hindborg
@ 2023-02-08 13:43   ` Björn Roy Baron
  4 siblings, 0 replies; 17+ messages in thread
From: Björn Roy Baron @ 2023-02-08 13:43 UTC (permalink / raw)
  To: Boqun Feng
  Cc: linux-kernel, rust-for-linux, Miguel Ojeda, Alex Gaynor,
	Wedson Almeida Filho, Gary Guo, Vincenzo Palazzo, Will Deacon,
	Peter Zijlstra, Mark Rutland, Greg Kroah-Hartman,
	Sergio González Collado, Finn Behrens

On Tuesday, February 7th, 2023 at 19:52, Boqun Feng <boqun.feng@gmail.com> wrote:

> This allows printing the inner data of `Arc` and its friends if the
> inner data implements `Display` or `Debug`. It's useful for logging and
> debugging purpose.
> 
> Signed-off-by: Boqun Feng boqun.feng@gmail.com
> 
> Reviwed-by: Vincenzo Palazzo vincenzopalazzodev@gmail.com

Reviewed-by: Björn Roy Baron <bjorn3_gh@protonmail.com>

> 
> ---
>  rust/kernel/sync/arc.rs | 25 +++++++++++++++++++++++++
>  1 file changed, 25 insertions(+)
> 
> diff --git a/rust/kernel/sync/arc.rs b/rust/kernel/sync/arc.rs
> index 519a6ec43644..e6176d9b5b29 100644
> --- a/rust/kernel/sync/arc.rs
> +++ b/rust/kernel/sync/arc.rs
> @@ -22,6 +22,7 @@ use crate::{
>  };
>  use alloc::boxed::Box;
>  use core::{
> +    fmt,
>      marker::{PhantomData, Unsize},
>      mem::{ManuallyDrop, MaybeUninit},
>      ops::{Deref, DerefMut},
> @@ -522,3 +523,27 @@ impl<T: ?Sized> DerefMut for UniqueArc<T> {
>          unsafe { &mut self.inner.ptr.as_mut().data }
>      }
>  }
> +
> +impl<T: fmt::Display + ?Sized> fmt::Display for UniqueArc<T> {
> +    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
> +        fmt::Display::fmt(self.deref(), f)
> +    }
> +}
> +
> +impl<T: fmt::Display + ?Sized> fmt::Display for Arc<T> {
> +    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
> +        fmt::Display::fmt(self.deref(), f)
> +    }
> +}
> +
> +impl<T: fmt::Debug + ?Sized> fmt::Debug for UniqueArc<T> {
> +    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
> +        fmt::Debug::fmt(self.deref(), f)
> +    }
> +}
> +
> +impl<T: fmt::Debug + ?Sized> fmt::Debug for Arc<T> {
> +    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
> +        fmt::Debug::fmt(self.deref(), f)
> +    }
> +}
> --
> 2.39.1

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

* Re: [PATCH v2 2/2] sample: rust: print: Add sampe code for Arc printing
  2023-02-07 18:52 ` [PATCH v2 2/2] sample: rust: print: Add sampe code for Arc printing Boqun Feng
  2023-02-08  4:57   ` Gary Guo
  2023-02-08 10:01   ` Andreas Hindborg
@ 2023-02-08 15:19   ` Miguel Ojeda
  2023-02-08 16:33     ` Boqun Feng
  2 siblings, 1 reply; 17+ messages in thread
From: Miguel Ojeda @ 2023-02-08 15:19 UTC (permalink / raw)
  To: Boqun Feng
  Cc: linux-kernel, rust-for-linux, Miguel Ojeda, Alex Gaynor,
	Wedson Almeida Filho, Gary Guo, Björn Roy Baron,
	Vincenzo Palazzo, Will Deacon, Peter Zijlstra, Mark Rutland,
	Greg Kroah-Hartman, Sergio González Collado, Finn Behrens

On Tue, Feb 7, 2023 at 7:52 PM Boqun Feng <boqun.feng@gmail.com> wrote:
>
> +    // Uses `dbg` to print, will move `c`.
> +    dbg!(c);

Perhaps:

    // Uses `dbg` to print, will move `c` (for temporary debugging purposes).
    dbg!(c);

To make it clear it is not meant to be usually committed into the tree.

> +    // Prints debug fmt with pretty-print "#" and number-in-hex "x".
> +    pr_info!("{:#x?}", a);

Apparently, `:#x?` is a bit of an accident: `#` means "alternate"
form, but it turns out it applies to both `x` and `?`, i.e. it is not
that `#` alone implies pretty-printing.

Given the above and that there are improvements under discussion
upstream, perhaps we could avoid giving details for the moment and
just say what it does as a whole, e.g.

    // Pretty-prints the debug formatting with lower-case hexadecimal integers.
    pr_info!("{:#x?}", a);

Some links for those interested:
https://doc.rust-lang.org/std/fmt/index.html#sign0,
https://github.com/rust-lang/rust/issues/75766,
https://github.com/rust-lang/rust/pull/99138#issuecomment-1385331055
and https://github.com/rust-lang/libs-team/issues/165.

Finally, there is a small typo in the commit title. What about:

    rust: samples: print: add sample code for `Arc` printing

I can change these bits on my side if you want & agree with them, to
avoid a v3 just for this.

Thanks for these patches, Boqun!

Cheers,
Miguel

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

* Re: [PATCH v2 2/2] sample: rust: print: Add sampe code for Arc printing
  2023-02-08 15:19   ` Miguel Ojeda
@ 2023-02-08 16:33     ` Boqun Feng
  2023-02-08 16:56       ` Miguel Ojeda
  0 siblings, 1 reply; 17+ messages in thread
From: Boqun Feng @ 2023-02-08 16:33 UTC (permalink / raw)
  To: Miguel Ojeda
  Cc: linux-kernel, rust-for-linux, Miguel Ojeda, Alex Gaynor,
	Wedson Almeida Filho, Gary Guo, Björn Roy Baron,
	Vincenzo Palazzo, Will Deacon, Peter Zijlstra, Mark Rutland,
	Greg Kroah-Hartman, Sergio González Collado, Finn Behrens

On Wed, Feb 08, 2023 at 04:19:04PM +0100, Miguel Ojeda wrote:
> On Tue, Feb 7, 2023 at 7:52 PM Boqun Feng <boqun.feng@gmail.com> wrote:
> >
> > +    // Uses `dbg` to print, will move `c`.
> > +    dbg!(c);
> 
> Perhaps:
> 
>     // Uses `dbg` to print, will move `c` (for temporary debugging purposes).
>     dbg!(c);
> 
> To make it clear it is not meant to be usually committed into the tree.
> 

Thanks!

> > +    // Prints debug fmt with pretty-print "#" and number-in-hex "x".
> > +    pr_info!("{:#x?}", a);
> 
> Apparently, `:#x?` is a bit of an accident: `#` means "alternate"
> form, but it turns out it applies to both `x` and `?`, i.e. it is not
> that `#` alone implies pretty-printing.
> 

Oh, good to know!

> Given the above and that there are improvements under discussion
> upstream, perhaps we could avoid giving details for the moment and
> just say what it does as a whole, e.g.
> 
>     // Pretty-prints the debug formatting with lower-case hexadecimal integers.
>     pr_info!("{:#x?}", a);
> 
> Some links for those interested:
> https://doc.rust-lang.org/std/fmt/index.html#sign0,
> https://github.com/rust-lang/rust/issues/75766,
> https://github.com/rust-lang/rust/pull/99138#issuecomment-1385331055
> and https://github.com/rust-lang/libs-team/issues/165.
> 
> Finally, there is a small typo in the commit title. What about:
> 
>     rust: samples: print: add sample code for `Arc` printing
> 

Hmm.. I'm OK with this change, but it's not a typo ;-)

I deliberately

1)	capitalize the first letter after subsystem tags in the title
	since that's kinda the rule for a few subsystems I usually work
	on, I don't have my own preference, just something I'm used to
	;-)

2)	avoid using "`" in the title to save space because title space
	is precious.

> I can change these bits on my side if you want & agree with them, to
> avoid a v3 just for this.
> 

That'll be great, thanks!

Regards,
Boqun

> Thanks for these patches, Boqun!
> 
> Cheers,
> Miguel

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

* Re: [PATCH v2 2/2] sample: rust: print: Add sampe code for Arc printing
  2023-02-08 16:33     ` Boqun Feng
@ 2023-02-08 16:56       ` Miguel Ojeda
  2023-02-08 16:58         ` Boqun Feng
  0 siblings, 1 reply; 17+ messages in thread
From: Miguel Ojeda @ 2023-02-08 16:56 UTC (permalink / raw)
  To: Boqun Feng
  Cc: linux-kernel, rust-for-linux, Miguel Ojeda, Alex Gaynor,
	Wedson Almeida Filho, Gary Guo, Björn Roy Baron,
	Vincenzo Palazzo, Will Deacon, Peter Zijlstra, Mark Rutland,
	Greg Kroah-Hartman, Sergio González Collado, Finn Behrens

On Wed, Feb 8, 2023 at 5:34 PM Boqun Feng <boqun.feng@gmail.com> wrote:
>
> Hmm.. I'm OK with this change, but it's not a typo ;-)

By typo I meant the "sampe", not the other changes -- sorry, I should
have been more clear.

> 1)      capitalize the first letter after subsystem tags in the title
>         since that's kinda the rule for a few subsystems I usually work
>         on, I don't have my own preference, just something I'm used to
>         ;-)

Yeah, I don't mind one way or the other (in fact, personally I prefer
uppercase slightly because it is a bit easier to "scan" visually to
see where it starts after the prefixes). The lowercase one is just the
one we have used so far for Rust (which I picked looking at what Linus
et al. usually do).

> 2)      avoid using "`" in the title to save space because title space
>         is precious.

I see, makes sense, thanks!

Cheers,
Miguel

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

* Re: [PATCH v2 2/2] sample: rust: print: Add sampe code for Arc printing
  2023-02-08 16:56       ` Miguel Ojeda
@ 2023-02-08 16:58         ` Boqun Feng
  0 siblings, 0 replies; 17+ messages in thread
From: Boqun Feng @ 2023-02-08 16:58 UTC (permalink / raw)
  To: Miguel Ojeda
  Cc: linux-kernel, rust-for-linux, Miguel Ojeda, Alex Gaynor,
	Wedson Almeida Filho, Gary Guo, Björn Roy Baron,
	Vincenzo Palazzo, Will Deacon, Peter Zijlstra, Mark Rutland,
	Greg Kroah-Hartman, Sergio González Collado, Finn Behrens

On Wed, Feb 08, 2023 at 05:56:43PM +0100, Miguel Ojeda wrote:
> On Wed, Feb 8, 2023 at 5:34 PM Boqun Feng <boqun.feng@gmail.com> wrote:
> >
> > Hmm.. I'm OK with this change, but it's not a typo ;-)
> 
> By typo I meant the "sampe", not the other changes -- sorry, I should
> have been more clear.

Ah, good eyes! Sorry I missed that twice: one when submitting and one
you mention it's a typo ;-(


Regards,
Boqun

> 
> > 1)      capitalize the first letter after subsystem tags in the title
> >         since that's kinda the rule for a few subsystems I usually work
> >         on, I don't have my own preference, just something I'm used to
> >         ;-)
> 
> Yeah, I don't mind one way or the other (in fact, personally I prefer
> uppercase slightly because it is a bit easier to "scan" visually to
> see where it starts after the prefixes). The lowercase one is just the
> one we have used so far for Rust (which I picked looking at what Linus
> et al. usually do).
> 
> > 2)      avoid using "`" in the title to save space because title space
> >         is precious.
> 
> I see, makes sense, thanks!
> 
> Cheers,
> Miguel

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

* Re: [PATCH v2 0/2] rust: sync: Arc: Implement Debug and Display
  2023-02-07 18:52 [PATCH v2 0/2] rust: sync: Arc: Implement Debug and Display Boqun Feng
  2023-02-07 18:52 ` [PATCH v2 1/2] rust: sync: impl {Debug,Display} for {Unique,}Arc Boqun Feng
  2023-02-07 18:52 ` [PATCH v2 2/2] sample: rust: print: Add sampe code for Arc printing Boqun Feng
@ 2023-04-10  2:53 ` Miguel Ojeda
  2 siblings, 0 replies; 17+ messages in thread
From: Miguel Ojeda @ 2023-04-10  2:53 UTC (permalink / raw)
  To: Boqun Feng
  Cc: linux-kernel, rust-for-linux, Miguel Ojeda, Alex Gaynor,
	Wedson Almeida Filho, Gary Guo, Björn Roy Baron,
	Vincenzo Palazzo, Will Deacon, Peter Zijlstra, Mark Rutland,
	Greg Kroah-Hartman, Sergio González Collado, Finn Behrens

On Tue, Feb 7, 2023 at 7:52 PM Boqun Feng <boqun.feng@gmail.com> wrote:
>
> I found that our Arc doesn't implement `Debug` or `Display` when I tried
> to play with them, therefore add these implementation.

Applied to `rust-next` (with the few changes mentioned). Thanks!

Cheers,
Miguel

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

end of thread, other threads:[~2023-04-10  2:53 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-02-07 18:52 [PATCH v2 0/2] rust: sync: Arc: Implement Debug and Display Boqun Feng
2023-02-07 18:52 ` [PATCH v2 1/2] rust: sync: impl {Debug,Display} for {Unique,}Arc Boqun Feng
2023-02-07 19:03   ` Carlos Bilbao
2023-02-07 20:27     ` Vincenzo Palazzo
2023-02-07 20:45   ` Vincenzo Palazzo
2023-02-07 20:54     ` Boqun Feng
2023-02-08  4:57   ` Gary Guo
2023-02-08 10:00   ` Andreas Hindborg
2023-02-08 13:43   ` Björn Roy Baron
2023-02-07 18:52 ` [PATCH v2 2/2] sample: rust: print: Add sampe code for Arc printing Boqun Feng
2023-02-08  4:57   ` Gary Guo
2023-02-08 10:01   ` Andreas Hindborg
2023-02-08 15:19   ` Miguel Ojeda
2023-02-08 16:33     ` Boqun Feng
2023-02-08 16:56       ` Miguel Ojeda
2023-02-08 16:58         ` Boqun Feng
2023-04-10  2:53 ` [PATCH v2 0/2] rust: sync: Arc: Implement Debug and Display Miguel Ojeda

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.