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