Messages in this thread | | | Date | Thu, 10 Nov 2022 10:12:23 -0800 | From | Boqun Feng <> | Subject | Re: [PATCH v1 02/28] rust: print: add more `pr_*!` levels |
| |
On Thu, Nov 10, 2022 at 05:41:14PM +0100, Miguel Ojeda wrote: > Currently, only `pr_info!` (for the minimal sample) and > `pr_emerg!` (for the panic handler) are there. > > Add the other levels as new macros, i.e. `pr_alert!`, `pr_crit!`, > `pr_err!`, `pr_warn!`, `pr_notice!` and `pr_debug!`. > > Co-developed-by: Adam Bratschi-Kaye <ark.email@gmail.com> > Signed-off-by: Adam Bratschi-Kaye <ark.email@gmail.com> > Co-developed-by: Wedson Almeida Filho <wedsonaf@gmail.com> > Signed-off-by: Wedson Almeida Filho <wedsonaf@gmail.com> > Co-developed-by: Gary Guo <gary@garyguo.net> > Signed-off-by: Gary Guo <gary@garyguo.net> > Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
Reviewed-by: Boqun Feng <boqun.feng@gmail.com>
Regards, Boqun
> --- > rust/kernel/prelude.rs | 2 +- > rust/kernel/print.rs | 154 +++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 155 insertions(+), 1 deletion(-) > > diff --git a/rust/kernel/prelude.rs b/rust/kernel/prelude.rs > index f8219285d8c0..6a1c6b38327f 100644 > --- a/rust/kernel/prelude.rs > +++ b/rust/kernel/prelude.rs > @@ -17,7 +17,7 @@ pub use alloc::{boxed::Box, vec::Vec}; > > pub use macros::module; > > -pub use super::{pr_emerg, pr_info}; > +pub use super::{pr_alert, pr_crit, pr_debug, pr_emerg, pr_err, pr_info, pr_notice, pr_warn}; > > pub use super::error::{Error, Result}; > > diff --git a/rust/kernel/print.rs b/rust/kernel/print.rs > index 55db5a1ba752..694f51c6da5c 100644 > --- a/rust/kernel/print.rs > +++ b/rust/kernel/print.rs > @@ -74,7 +74,13 @@ pub mod format_strings { > // Furthermore, `static` instead of `const` is used to share the strings > // for all the kernel. > pub static EMERG: [u8; LENGTH] = generate(false, bindings::KERN_EMERG); > + pub static ALERT: [u8; LENGTH] = generate(false, bindings::KERN_ALERT); > + pub static CRIT: [u8; LENGTH] = generate(false, bindings::KERN_CRIT); > + pub static ERR: [u8; LENGTH] = generate(false, bindings::KERN_ERR); > + pub static WARNING: [u8; LENGTH] = generate(false, bindings::KERN_WARNING); > + pub static NOTICE: [u8; LENGTH] = generate(false, bindings::KERN_NOTICE); > pub static INFO: [u8; LENGTH] = generate(false, bindings::KERN_INFO); > + pub static DEBUG: [u8; LENGTH] = generate(false, bindings::KERN_DEBUG); > } > > /// Prints a message via the kernel's [`_printk`]. > @@ -172,6 +178,126 @@ macro_rules! pr_emerg ( > ) > ); > > +/// Prints an alert-level message (level 1). > +/// > +/// Use this level if action must be taken immediately. > +/// > +/// Equivalent to the kernel's [`pr_alert`] macro. > +/// > +/// Mimics the interface of [`std::print!`]. See [`core::fmt`] and > +/// `alloc::format!` for information about the formatting syntax. > +/// > +/// [`pr_alert`]: https://www.kernel.org/doc/html/latest/core-api/printk-basics.html#c.pr_alert > +/// [`std::print!`]: https://doc.rust-lang.org/std/macro.print.html > +/// > +/// # Examples > +/// > +/// ``` > +/// pr_alert!("hello {}\n", "there"); > +/// ``` > +#[macro_export] > +macro_rules! pr_alert ( > + ($($arg:tt)*) => ( > + $crate::print_macro!($crate::print::format_strings::ALERT, $($arg)*) > + ) > +); > + > +/// Prints a critical-level message (level 2). > +/// > +/// Use this level for critical conditions. > +/// > +/// Equivalent to the kernel's [`pr_crit`] macro. > +/// > +/// Mimics the interface of [`std::print!`]. See [`core::fmt`] and > +/// `alloc::format!` for information about the formatting syntax. > +/// > +/// [`pr_crit`]: https://www.kernel.org/doc/html/latest/core-api/printk-basics.html#c.pr_crit > +/// [`std::print!`]: https://doc.rust-lang.org/std/macro.print.html > +/// > +/// # Examples > +/// > +/// ``` > +/// pr_crit!("hello {}\n", "there"); > +/// ``` > +#[macro_export] > +macro_rules! pr_crit ( > + ($($arg:tt)*) => ( > + $crate::print_macro!($crate::print::format_strings::CRIT, $($arg)*) > + ) > +); > + > +/// Prints an error-level message (level 3). > +/// > +/// Use this level for error conditions. > +/// > +/// Equivalent to the kernel's [`pr_err`] macro. > +/// > +/// Mimics the interface of [`std::print!`]. See [`core::fmt`] and > +/// `alloc::format!` for information about the formatting syntax. > +/// > +/// [`pr_err`]: https://www.kernel.org/doc/html/latest/core-api/printk-basics.html#c.pr_err > +/// [`std::print!`]: https://doc.rust-lang.org/std/macro.print.html > +/// > +/// # Examples > +/// > +/// ``` > +/// pr_err!("hello {}\n", "there"); > +/// ``` > +#[macro_export] > +macro_rules! pr_err ( > + ($($arg:tt)*) => ( > + $crate::print_macro!($crate::print::format_strings::ERR, $($arg)*) > + ) > +); > + > +/// Prints a warning-level message (level 4). > +/// > +/// Use this level for warning conditions. > +/// > +/// Equivalent to the kernel's [`pr_warn`] macro. > +/// > +/// Mimics the interface of [`std::print!`]. See [`core::fmt`] and > +/// `alloc::format!` for information about the formatting syntax. > +/// > +/// [`pr_warn`]: https://www.kernel.org/doc/html/latest/core-api/printk-basics.html#c.pr_warn > +/// [`std::print!`]: https://doc.rust-lang.org/std/macro.print.html > +/// > +/// # Examples > +/// > +/// ``` > +/// pr_warn!("hello {}\n", "there"); > +/// ``` > +#[macro_export] > +macro_rules! pr_warn ( > + ($($arg:tt)*) => ( > + $crate::print_macro!($crate::print::format_strings::WARNING, $($arg)*) > + ) > +); > + > +/// Prints a notice-level message (level 5). > +/// > +/// Use this level for normal but significant conditions. > +/// > +/// Equivalent to the kernel's [`pr_notice`] macro. > +/// > +/// Mimics the interface of [`std::print!`]. See [`core::fmt`] and > +/// `alloc::format!` for information about the formatting syntax. > +/// > +/// [`pr_notice`]: https://www.kernel.org/doc/html/latest/core-api/printk-basics.html#c.pr_notice > +/// [`std::print!`]: https://doc.rust-lang.org/std/macro.print.html > +/// > +/// # Examples > +/// > +/// ``` > +/// pr_notice!("hello {}\n", "there"); > +/// ``` > +#[macro_export] > +macro_rules! pr_notice ( > + ($($arg:tt)*) => ( > + $crate::print_macro!($crate::print::format_strings::NOTICE, $($arg)*) > + ) > +); > + > /// Prints an info-level message (level 6). > /// > /// Use this level for informational messages. > @@ -196,3 +322,31 @@ macro_rules! pr_info ( > $crate::print_macro!($crate::print::format_strings::INFO, $($arg)*) > ) > ); > + > +/// Prints a debug-level message (level 7). > +/// > +/// Use this level for debug messages. > +/// > +/// Equivalent to the kernel's [`pr_debug`] macro, except that it doesn't support dynamic debug > +/// yet. > +/// > +/// Mimics the interface of [`std::print!`]. See [`core::fmt`] and > +/// `alloc::format!` for information about the formatting syntax. > +/// > +/// [`pr_debug`]: https://www.kernel.org/doc/html/latest/core-api/printk-basics.html#c.pr_debug > +/// [`std::print!`]: https://doc.rust-lang.org/std/macro.print.html > +/// > +/// # Examples > +/// > +/// ``` > +/// pr_debug!("hello {}\n", "there"); > +/// ``` > +#[macro_export] > +#[doc(alias = "print")] > +macro_rules! pr_debug ( > + ($($arg:tt)*) => ( > + if cfg!(debug_assertions) { > + $crate::print_macro!($crate::print::format_strings::DEBUG, $($arg)*) > + } > + ) > +); > -- > 2.38.1 >
| |