]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
rust: samples: add `rust_print` example
authorMiguel Ojeda <ojeda@kernel.org>
Thu, 10 Nov 2022 16:41:16 +0000 (17:41 +0100)
committerMiguel Ojeda <ojeda@kernel.org>
Thu, 1 Dec 2022 19:13:11 +0000 (20:13 +0100)
Add example to exercise the printing macros (`pr_*!`) introduced
in the previous patches.

Reviewed-by: Finn Behrens <me@kloenk.dev>
Reviewed-by: Wei Liu <wei.liu@kernel.org>
Tested-by: Sergio González Collado <sergio.collado@gmail.com>
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
samples/rust/Kconfig
samples/rust/Makefile
samples/rust/rust_print.rs [new file with mode: 0644]

index 841e0906e9439473b8e365dad917ca89b5e05668..b0f74a81c8f9ad24c9dc1ca057f83531156084aa 100644 (file)
@@ -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
index 1daba5f8658af96027a2500d3355959acf08182a..03086dabbea44f4aa87f4a67ac24b8ea4e5a8f2a 100644 (file)
@@ -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 (file)
index 0000000..09f7377
--- /dev/null
@@ -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");
+    }
+}