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