There are 6 individual Rust KUnit tests. All the tests are compiled
unconditionally now, which adds ~200 kB to the kernel image for me
on x86_64. As Rust matures, this bloating will inevitably grow.

Add Kconfig.test which includes a RUST_KUNIT_TESTS menu, and all
individual tests under it.

As usual, new tests are all enabled if KUNIT_ALL_TESTS=y.

Suggested-by: Alice Ryhl <[email protected]>
Signed-off-by: Yury Norov <[email protected]>
---
This doesn't create a new entry in MAINTAINERS for the Kconfig.test,
so the new file just follows the implicit rule for the rust/ directory.
Please let me know if the explicit entry is needed.

 init/Kconfig                         |  2 +
 rust/kernel/Kconfig.test             | 76 ++++++++++++++++++++++++++++
 rust/kernel/alloc/allocator.rs       |  1 +
 rust/kernel/alloc/kvec.rs            |  1 +
 rust/kernel/bitmap.rs                |  1 +
 rust/kernel/kunit.rs                 |  1 +
 rust/kernel/str.rs                   |  1 +
 rust/kernel/sync/atomic/predefine.rs |  1 +
 8 files changed, 84 insertions(+)
 create mode 100644 rust/kernel/Kconfig.test

diff --git a/init/Kconfig b/init/Kconfig
index 43875ef36752..4af544514e6c 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -2208,6 +2208,8 @@ config RUST
 
          If unsure, say N.
 
+source "rust/kernel/Kconfig.test"
+
 config RUSTC_VERSION_TEXT
        string
        depends on RUST
diff --git a/rust/kernel/Kconfig.test b/rust/kernel/Kconfig.test
new file mode 100644
index 000000000000..a05243696a01
--- /dev/null
+++ b/rust/kernel/Kconfig.test
@@ -0,0 +1,76 @@
+# SPDX-License-Identifier: GPL-2.0-only
+menuconfig RUST_KUNIT_TESTS
+       bool "Rust KUnit tests"
+       depends on KUNIT && RUST
+       default KUNIT_ALL_TESTS
+       help
+         This menu collects all options for Rust Kunit tests.
+         See Documentation/rust/testing.rst for how to protect
+         unit tests with these options.
+
+         Say Y here to enable Rust KUnit tests.
+
+         If unsure, say N.
+
+if RUST_KUNIT_TESTS
+config RUST_ALLOCATOR_KUNIT_TEST
+       bool "KUnit tests for Rust allocator API" if !KUNIT_ALL_TESTS
+       default KUNIT_ALL_TESTS
+       help
+         This option enables KUnit tests for the Rust allocator API.
+         These are only for development and testing, not for regular
+         kernel use cases.
+
+         If unsure, say N.
+
+config RUST_KVEC_KUNIT_TEST
+       bool "KUnit tests for Rust KVEC API" if !KUNIT_ALL_TESTS
+       default KUNIT_ALL_TESTS
+       help
+         This option enables KUnit tests for the Rust KVEC API.
+         These are only for development and testing, not for
+         regular kernel use cases.
+
+         If unsure, say N.
+
+config RUST_BITMAP_KUNIT_TEST
+       bool "KUnit tests for Rust bitmap API" if !KUNIT_ALL_TESTS
+       default KUNIT_ALL_TESTS
+       help
+         This option enables KUnit tests for the Rust bitmap API.
+         These are only for development and testing, not for regular
+         kernel use cases.
+
+         If unsure, say N.
+
+config RUST_KUNIT_SELFTEST
+       bool "KUnit selftests for Rust" if !KUNIT_ALL_TESTS
+       default KUNIT_ALL_TESTS
+       help
+         This option enables KUnit selftests. These are only
+         for development and testing, not for regular kernel
+         use cases.
+
+         If unsure, say N.
+
+config RUST_STR_KUNIT_TEST
+       bool "KUnit tests for Rust strings APIs" if !KUNIT_ALL_TESTS
+       default KUNIT_ALL_TESTS
+       help
+         This option enables KUnit tests for the Rust strings API.
+         These are only for development and testing, not for regular
+         kernel use cases.
+
+         If unsure, say N.
+
+config RUST_ATOMICS_KUNIT_TEST
+       bool "KUnit tests for Rust atomics APIs" if !KUNIT_ALL_TESTS
+       default KUNIT_ALL_TESTS
+       help
+         This option enables KUnit tests for the Rust atomics API.
+         These are only for development and testing, not for regular
+         kernel use cases.
+
+         If unsure, say N.
+
+endif
diff --git a/rust/kernel/alloc/allocator.rs b/rust/kernel/alloc/allocator.rs
index 63bfb91b3671..0d3434bca867 100644
--- a/rust/kernel/alloc/allocator.rs
+++ b/rust/kernel/alloc/allocator.rs
@@ -251,6 +251,7 @@ unsafe fn realloc(
     }
 }
 
+#[cfg(CONFIG_RUST_ALLOCATOR_KUNIT_TEST)]
 #[macros::kunit_tests(rust_allocator)]
 mod tests {
     use super::*;
diff --git a/rust/kernel/alloc/kvec.rs b/rust/kernel/alloc/kvec.rs
index ac8d6f763ae8..563c760c8105 100644
--- a/rust/kernel/alloc/kvec.rs
+++ b/rust/kernel/alloc/kvec.rs
@@ -1351,6 +1351,7 @@ fn drop(&mut self) {
     }
 }
 
+#[cfg(CONFIG_RUST_KVEC_KUNIT_TEST)]
 #[macros::kunit_tests(rust_kvec)]
 mod tests {
     use super::*;
diff --git a/rust/kernel/bitmap.rs b/rust/kernel/bitmap.rs
index 894043c9e460..b27e0ec80d64 100644
--- a/rust/kernel/bitmap.rs
+++ b/rust/kernel/bitmap.rs
@@ -499,6 +499,7 @@ pub fn next_zero_bit(&self, start: usize) -> Option<usize> {
     }
 }
 
+#[cfg(CONFIG_RUST_BITMAP_KUNIT_TEST)]
 #[macros::kunit_tests(rust_kernel_bitmap)]
 mod tests {
     use super::*;
diff --git a/rust/kernel/kunit.rs b/rust/kernel/kunit.rs
index a1edf7491579..cdee5f27bd7f 100644
--- a/rust/kernel/kunit.rs
+++ b/rust/kernel/kunit.rs
@@ -329,6 +329,7 @@ pub fn in_kunit_test() -> bool {
     !unsafe { bindings::kunit_get_current_test() }.is_null()
 }
 
+#[cfg(CONFIG_RUST_KUNIT_SELFTEST)]
 #[kunit_tests(rust_kernel_kunit)]
 mod tests {
     use super::*;
diff --git a/rust/kernel/str.rs b/rust/kernel/str.rs
index 8311d91549e1..a435674f05ea 100644
--- a/rust/kernel/str.rs
+++ b/rust/kernel/str.rs
@@ -415,6 +415,7 @@ macro_rules! c_str {
     }};
 }
 
+#[cfg(CONFIG_RUST_STR_KUNIT_TEST)]
 #[kunit_tests(rust_kernel_str)]
 mod tests {
     use super::*;
diff --git a/rust/kernel/sync/atomic/predefine.rs 
b/rust/kernel/sync/atomic/predefine.rs
index 84fcd7cfcb73..7468153429e1 100644
--- a/rust/kernel/sync/atomic/predefine.rs
+++ b/rust/kernel/sync/atomic/predefine.rs
@@ -154,6 +154,7 @@ fn rhs_into_delta(rhs: usize) -> isize_atomic_repr {
     }
 }
 
+#[cfg(CONFIG_RUST_ATOMICS_KUNIT_TEST)]
 #[macros::kunit_tests(rust_atomics)]
 mod tests {
     use super::super::*;
-- 
2.51.0


Reply via email to