[v1,04/28] rust: samples: add `rust_print` example
Commit Message
Add example to exercise the printing macros (`pr_*!`) introduced
in the previous patches.
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
---
samples/rust/Kconfig | 10 +++++++
samples/rust/Makefile | 1 +
samples/rust/rust_print.rs | 54 ++++++++++++++++++++++++++++++++++++++
3 files changed, 65 insertions(+)
create mode 100644 samples/rust/rust_print.rs
Comments
On 10 Nov 2022, at 17:41, Miguel Ojeda wrote:
> Add example to exercise the printing macros (`pr_*!`) introduced
> in the previous patches.
>
> Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
Reviewed-by: Finn Behrens <me@kloenk.dev>
> ---
> samples/rust/Kconfig | 10 +++++++
> samples/rust/Makefile | 1 +
> samples/rust/rust_print.rs | 54 ++++++++++++++++++++++++++++++++++++++
> 3 files changed, 65 insertions(+)
> create mode 100644 samples/rust/rust_print.rs
>
> diff --git a/samples/rust/Kconfig b/samples/rust/Kconfig
> index 841e0906e943..b0f74a81c8f9 100644
> --- a/samples/rust/Kconfig
> +++ b/samples/rust/Kconfig
> @@ -20,6 +20,16 @@ config SAMPLE_RUST_MINIMAL
>
> If unsure, say N.
>
> +config SAMPLE_RUST_PRINT
> + tristate "Printing macros"
> + help
> + This option builds the Rust printing macros sample.
> +
> + To compile this as a module, choose M here:
> + the module will be called rust_print.
> +
> + If unsure, say N.
> +
> config SAMPLE_RUST_HOSTPROGS
> bool "Host programs"
> help
> diff --git a/samples/rust/Makefile b/samples/rust/Makefile
> index 1daba5f8658a..03086dabbea4 100644
> --- a/samples/rust/Makefile
> +++ b/samples/rust/Makefile
> @@ -1,5 +1,6 @@
> # SPDX-License-Identifier: GPL-2.0
>
> obj-$(CONFIG_SAMPLE_RUST_MINIMAL) += rust_minimal.o
> +obj-$(CONFIG_SAMPLE_RUST_PRINT) += rust_print.o
>
> subdir-$(CONFIG_SAMPLE_RUST_HOSTPROGS) += hostprogs
> diff --git a/samples/rust/rust_print.rs b/samples/rust/rust_print.rs
> new file mode 100644
> index 000000000000..09f737790f3f
> --- /dev/null
> +++ b/samples/rust/rust_print.rs
> @@ -0,0 +1,54 @@
> +// SPDX-License-Identifier: GPL-2.0
> +
> +//! Rust printing macros sample.
> +
> +use kernel::pr_cont;
> +use kernel::prelude::*;
> +
> +module! {
> + type: RustPrint,
> + name: b"rust_print",
> + author: b"Rust for Linux Contributors",
> + description: b"Rust printing macros sample",
> + license: b"GPL",
> +}
> +
> +struct RustPrint;
> +
> +impl kernel::Module for RustPrint {
> + fn init(_module: &'static ThisModule) -> Result<Self> {
> + pr_info!("Rust printing macros sample (init)\n");
> +
> + pr_emerg!("Emergency message (level 0) without args\n");
> + pr_alert!("Alert message (level 1) without args\n");
> + pr_crit!("Critical message (level 2) without args\n");
> + pr_err!("Error message (level 3) without args\n");
> + pr_warn!("Warning message (level 4) without args\n");
> + pr_notice!("Notice message (level 5) without args\n");
> + pr_info!("Info message (level 6) without args\n");
> +
> + pr_info!("A line that");
> + pr_cont!(" is continued");
> + pr_cont!(" without args\n");
> +
> + pr_emerg!("{} message (level {}) with args\n", "Emergency", 0);
> + pr_alert!("{} message (level {}) with args\n", "Alert", 1);
> + pr_crit!("{} message (level {}) with args\n", "Critical", 2);
> + pr_err!("{} message (level {}) with args\n", "Error", 3);
> + pr_warn!("{} message (level {}) with args\n", "Warning", 4);
> + pr_notice!("{} message (level {}) with args\n", "Notice", 5);
> + pr_info!("{} message (level {}) with args\n", "Info", 6);
> +
> + pr_info!("A {} that", "line");
> + pr_cont!(" is {}", "continued");
> + pr_cont!(" with {}\n", "args");
Could be nice, to also have an int or similar as arg, but as internal the same macro is used as above, not really of interest.
Regards,
Finn
> +
> + Ok(RustPrint)
> + }
> +}
> +
> +impl Drop for RustPrint {
> + fn drop(&mut self) {
> + pr_info!("Rust printing macros sample (exit)\n");
> + }
> +}
> --
> 2.38.1
On Fri, Nov 11, 2022 at 10:40 AM Finn Behrens <me@kloenk.dev> wrote:
>
> Could be nice, to also have an int or similar as arg, but as internal the same macro is used as above, not really of interest.
Yeah, there are some integers above, but we can add more examples
later on, e.g. with custom kernel types too.
Thanks for the reviews in several patches, by the way!
Cheers,
Miguel
On Thu, Nov 10, 2022 at 05:41:16PM +0100, Miguel Ojeda wrote:
> Add example to exercise the printing macros (`pr_*!`) introduced
> in the previous patches.
>
> Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
Reviewed-by: Wei Liu <wei.liu@kernel.org>
On Thu, 10 Nov 2022 at 17:43, Miguel Ojeda <ojeda@kernel.org> wrote:
>
> Add example to exercise the printing macros (`pr_*!`) introduced
> in the previous patches.
>
> Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
> ---
> samples/rust/Kconfig | 10 +++++++
> samples/rust/Makefile | 1 +
> samples/rust/rust_print.rs | 54 ++++++++++++++++++++++++++++++++++++++
> 3 files changed, 65 insertions(+)
> create mode 100644 samples/rust/rust_print.rs
>
> diff --git a/samples/rust/Kconfig b/samples/rust/Kconfig
> index 841e0906e943..b0f74a81c8f9 100644
> --- a/samples/rust/Kconfig
> +++ b/samples/rust/Kconfig
> @@ -20,6 +20,16 @@ config SAMPLE_RUST_MINIMAL
>
> If unsure, say N.
>
> +config SAMPLE_RUST_PRINT
> + tristate "Printing macros"
> + help
> + This option builds the Rust printing macros sample.
> +
> + To compile this as a module, choose M here:
> + the module will be called rust_print.
> +
> + If unsure, say N.
> +
> config SAMPLE_RUST_HOSTPROGS
> bool "Host programs"
> help
> diff --git a/samples/rust/Makefile b/samples/rust/Makefile
> index 1daba5f8658a..03086dabbea4 100644
> --- a/samples/rust/Makefile
> +++ b/samples/rust/Makefile
> @@ -1,5 +1,6 @@
> # SPDX-License-Identifier: GPL-2.0
>
> obj-$(CONFIG_SAMPLE_RUST_MINIMAL) += rust_minimal.o
> +obj-$(CONFIG_SAMPLE_RUST_PRINT) += rust_print.o
>
> subdir-$(CONFIG_SAMPLE_RUST_HOSTPROGS) += hostprogs
> diff --git a/samples/rust/rust_print.rs b/samples/rust/rust_print.rs
> new file mode 100644
> index 000000000000..09f737790f3f
> --- /dev/null
> +++ b/samples/rust/rust_print.rs
> @@ -0,0 +1,54 @@
> +// SPDX-License-Identifier: GPL-2.0
> +
> +//! Rust printing macros sample.
> +
> +use kernel::pr_cont;
> +use kernel::prelude::*;
> +
> +module! {
> + type: RustPrint,
> + name: b"rust_print",
> + author: b"Rust for Linux Contributors",
> + description: b"Rust printing macros sample",
> + license: b"GPL",
> +}
> +
> +struct RustPrint;
> +
> +impl kernel::Module for RustPrint {
> + fn init(_module: &'static ThisModule) -> Result<Self> {
> + pr_info!("Rust printing macros sample (init)\n");
> +
> + pr_emerg!("Emergency message (level 0) without args\n");
> + pr_alert!("Alert message (level 1) without args\n");
> + pr_crit!("Critical message (level 2) without args\n");
> + pr_err!("Error message (level 3) without args\n");
> + pr_warn!("Warning message (level 4) without args\n");
> + pr_notice!("Notice message (level 5) without args\n");
> + pr_info!("Info message (level 6) without args\n");
> +
> + pr_info!("A line that");
> + pr_cont!(" is continued");
> + pr_cont!(" without args\n");
> +
> + pr_emerg!("{} message (level {}) with args\n", "Emergency", 0);
> + pr_alert!("{} message (level {}) with args\n", "Alert", 1);
> + pr_crit!("{} message (level {}) with args\n", "Critical", 2);
> + pr_err!("{} message (level {}) with args\n", "Error", 3);
> + pr_warn!("{} message (level {}) with args\n", "Warning", 4);
> + pr_notice!("{} message (level {}) with args\n", "Notice", 5);
> + pr_info!("{} message (level {}) with args\n", "Info", 6);
> +
> + pr_info!("A {} that", "line");
> + pr_cont!(" is {}", "continued");
> + pr_cont!(" with {}\n", "args");
> +
> + Ok(RustPrint)
> + }
> +}
> +
> +impl Drop for RustPrint {
> + fn drop(&mut self) {
> + pr_info!("Rust printing macros sample (exit)\n");
> + }
> +}
> --
> 2.38.1
>
Tested-by: Sergio González Collado <sergio.collado@gmail.com>
@@ -20,6 +20,16 @@ config SAMPLE_RUST_MINIMAL
If unsure, say N.
+config SAMPLE_RUST_PRINT
+ tristate "Printing macros"
+ help
+ This option builds the Rust printing macros sample.
+
+ To compile this as a module, choose M here:
+ the module will be called rust_print.
+
+ If unsure, say N.
+
config SAMPLE_RUST_HOSTPROGS
bool "Host programs"
help
@@ -1,5 +1,6 @@
# SPDX-License-Identifier: GPL-2.0
obj-$(CONFIG_SAMPLE_RUST_MINIMAL) += rust_minimal.o
+obj-$(CONFIG_SAMPLE_RUST_PRINT) += rust_print.o
subdir-$(CONFIG_SAMPLE_RUST_HOSTPROGS) += hostprogs
new file mode 100644
@@ -0,0 +1,54 @@
+// SPDX-License-Identifier: GPL-2.0
+
+//! Rust printing macros sample.
+
+use kernel::pr_cont;
+use kernel::prelude::*;
+
+module! {
+ type: RustPrint,
+ name: b"rust_print",
+ author: b"Rust for Linux Contributors",
+ description: b"Rust printing macros sample",
+ license: b"GPL",
+}
+
+struct RustPrint;
+
+impl kernel::Module for RustPrint {
+ fn init(_module: &'static ThisModule) -> Result<Self> {
+ pr_info!("Rust printing macros sample (init)\n");
+
+ pr_emerg!("Emergency message (level 0) without args\n");
+ pr_alert!("Alert message (level 1) without args\n");
+ pr_crit!("Critical message (level 2) without args\n");
+ pr_err!("Error message (level 3) without args\n");
+ pr_warn!("Warning message (level 4) without args\n");
+ pr_notice!("Notice message (level 5) without args\n");
+ pr_info!("Info message (level 6) without args\n");
+
+ pr_info!("A line that");
+ pr_cont!(" is continued");
+ pr_cont!(" without args\n");
+
+ pr_emerg!("{} message (level {}) with args\n", "Emergency", 0);
+ pr_alert!("{} message (level {}) with args\n", "Alert", 1);
+ pr_crit!("{} message (level {}) with args\n", "Critical", 2);
+ pr_err!("{} message (level {}) with args\n", "Error", 3);
+ pr_warn!("{} message (level {}) with args\n", "Warning", 4);
+ pr_notice!("{} message (level {}) with args\n", "Notice", 5);
+ pr_info!("{} message (level {}) with args\n", "Info", 6);
+
+ pr_info!("A {} that", "line");
+ pr_cont!(" is {}", "continued");
+ pr_cont!(" with {}\n", "args");
+
+ Ok(RustPrint)
+ }
+}
+
+impl Drop for RustPrint {
+ fn drop(&mut self) {
+ pr_info!("Rust printing macros sample (exit)\n");
+ }
+}