All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] lib/crc: Fix crc_kunit dependency and add kunitconfig
@ 2026-03-06  3:35 Eric Biggers
  2026-03-06  3:35 ` [PATCH 1/3] lib/crc: tests: Make crc_kunit test only the enabled CRC variants Eric Biggers
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Eric Biggers @ 2026-03-06  3:35 UTC (permalink / raw)
  To: linux-kernel; +Cc: linux-crypto, Ard Biesheuvel, kunit-dev, Eric Biggers

This series fixes crc_kunit to follow the standard KUnit convention of
depending on the code it tests rather than selecting it, adds a kconfig
option that enables all the CRC variants for KUnit testing, and adds a
kunitconfig file for lib/crc/.

This follows similar changes to lib/crypto/ (except lib/crypto/ doesn't
have an equivalent to CRC_ENABLE_ALL_FOR_KUNIT yet, but we could
consider adding one).

This series applies to v7.0-rc2 and is targeting crc-next.

Eric Biggers (3):
  lib/crc: tests: Make crc_kunit test only the enabled CRC variants
  lib/crc: tests: Add CRC_ENABLE_ALL_FOR_KUNIT
  lib/crc: tests: Add a .kunitconfig file

 lib/crc/.kunitconfig      |  3 +++
 lib/crc/Kconfig           | 17 +++++++++++++----
 lib/crc/tests/crc_kunit.c | 28 ++++++++++++++++++++++------
 3 files changed, 38 insertions(+), 10 deletions(-)
 create mode 100644 lib/crc/.kunitconfig


base-commit: 11439c4635edd669ae435eec308f4ab8a0804808
-- 
2.53.0


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/3] lib/crc: tests: Make crc_kunit test only the enabled CRC variants
  2026-03-06  3:35 [PATCH 0/3] lib/crc: Fix crc_kunit dependency and add kunitconfig Eric Biggers
@ 2026-03-06  3:35 ` Eric Biggers
  2026-03-06  3:35 ` [PATCH 2/3] lib/crc: tests: Add CRC_ENABLE_ALL_FOR_KUNIT Eric Biggers
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Eric Biggers @ 2026-03-06  3:35 UTC (permalink / raw)
  To: linux-kernel
  Cc: linux-crypto, Ard Biesheuvel, kunit-dev, Eric Biggers, stable

Like commit 4478e8eeb871 ("lib/crypto: tests: Depend on library options
rather than selecting them") did with the crypto library tests, make
crc_kunit depend on the code it tests rather than selecting it.  This
follows the standard convention for KUnit and fixes an issue where
enabling KUNIT_ALL_TESTS enabled non-test code.

crc_kunit does differ from the crypto library tests in that it
consolidates the tests for multiple CRC variants, with 5 kconfig
options, into one KUnit suite.  Since depending on *all* of these
kconfig options would greatly restrict the ability to enable crc_kunit,
instead just depend on *any* of these options.  Update crc_kunit
accordingly to test only the reachable code.

Alternatively we could split crc_kunit into 5 test suites.  But keeping
it as one is simpler for now.

Fixes: e47d9b1a76ed ("lib/crc_kunit.c: add KUnit test suite for CRC library functions")
Cc: stable@vger.kernel.org
Signed-off-by: Eric Biggers <ebiggers@kernel.org>
---
 lib/crc/Kconfig           |  7 +------
 lib/crc/tests/crc_kunit.c | 28 ++++++++++++++++++++++------
 2 files changed, 23 insertions(+), 12 deletions(-)

diff --git a/lib/crc/Kconfig b/lib/crc/Kconfig
index 70e7a6016de3..9ddfd1a29757 100644
--- a/lib/crc/Kconfig
+++ b/lib/crc/Kconfig
@@ -97,17 +97,12 @@ config CRC_OPTIMIZATIONS
 	  Keep this enabled unless you're really trying to minimize the size of
 	  the kernel.
 
 config CRC_KUNIT_TEST
 	tristate "KUnit tests for CRC functions" if !KUNIT_ALL_TESTS
-	depends on KUNIT
+	depends on KUNIT && (CRC7 || CRC16 || CRC_T10DIF || CRC32 || CRC64)
 	default KUNIT_ALL_TESTS
-	select CRC7
-	select CRC16
-	select CRC_T10DIF
-	select CRC32
-	select CRC64
 	help
 	  Unit tests for the CRC library functions.
 
 	  This is intended to help people writing architecture-specific
 	  optimized versions.  If unsure, say N.
diff --git a/lib/crc/tests/crc_kunit.c b/lib/crc/tests/crc_kunit.c
index 9a450e25ac81..9428cd913625 100644
--- a/lib/crc/tests/crc_kunit.c
+++ b/lib/crc/tests/crc_kunit.c
@@ -266,12 +266,11 @@ crc_benchmark(struct kunit *test,
 		kunit_info(test, "len=%zu: %llu MB/s\n",
 			   len, div64_u64((u64)len * num_iters * 1000, t));
 	}
 }
 
-/* crc7_be */
-
+#if IS_REACHABLE(CONFIG_CRC7)
 static u64 crc7_be_wrapper(u64 crc, const u8 *p, size_t len)
 {
 	/*
 	 * crc7_be() left-aligns the 7-bit CRC in a u8, whereas the test wants a
 	 * right-aligned CRC (in a u64).  Convert between the conventions.
@@ -292,13 +291,13 @@ static void crc7_be_test(struct kunit *test)
 
 static void crc7_be_benchmark(struct kunit *test)
 {
 	crc_benchmark(test, crc7_be_wrapper);
 }
+#endif /* CONFIG_CRC7 */
 
-/* crc16 */
-
+#if IS_REACHABLE(CONFIG_CRC16)
 static u64 crc16_wrapper(u64 crc, const u8 *p, size_t len)
 {
 	return crc16(crc, p, len);
 }
 
@@ -316,13 +315,13 @@ static void crc16_test(struct kunit *test)
 
 static void crc16_benchmark(struct kunit *test)
 {
 	crc_benchmark(test, crc16_wrapper);
 }
+#endif /* CONFIG_CRC16 */
 
-/* crc_t10dif */
-
+#if IS_REACHABLE(CONFIG_CRC_T10DIF)
 static u64 crc_t10dif_wrapper(u64 crc, const u8 *p, size_t len)
 {
 	return crc_t10dif_update(crc, p, len);
 }
 
@@ -340,10 +339,13 @@ static void crc_t10dif_test(struct kunit *test)
 
 static void crc_t10dif_benchmark(struct kunit *test)
 {
 	crc_benchmark(test, crc_t10dif_wrapper);
 }
+#endif /* CONFIG_CRC_T10DIF */
+
+#if IS_REACHABLE(CONFIG_CRC32)
 
 /* crc32_le */
 
 static u64 crc32_le_wrapper(u64 crc, const u8 *p, size_t len)
 {
@@ -412,10 +414,13 @@ static void crc32c_test(struct kunit *test)
 
 static void crc32c_benchmark(struct kunit *test)
 {
 	crc_benchmark(test, crc32c_wrapper);
 }
+#endif /* CONFIG_CRC32 */
+
+#if IS_REACHABLE(CONFIG_CRC64)
 
 /* crc64_be */
 
 static u64 crc64_be_wrapper(u64 crc, const u8 *p, size_t len)
 {
@@ -461,28 +466,39 @@ static void crc64_nvme_test(struct kunit *test)
 
 static void crc64_nvme_benchmark(struct kunit *test)
 {
 	crc_benchmark(test, crc64_nvme_wrapper);
 }
+#endif /* CONFIG_CRC64 */
 
 static struct kunit_case crc_test_cases[] = {
+#if IS_REACHABLE(CONFIG_CRC7)
 	KUNIT_CASE(crc7_be_test),
 	KUNIT_CASE(crc7_be_benchmark),
+#endif
+#if IS_REACHABLE(CONFIG_CRC16)
 	KUNIT_CASE(crc16_test),
 	KUNIT_CASE(crc16_benchmark),
+#endif
+#if IS_REACHABLE(CONFIG_CRC_T10DIF)
 	KUNIT_CASE(crc_t10dif_test),
 	KUNIT_CASE(crc_t10dif_benchmark),
+#endif
+#if IS_REACHABLE(CONFIG_CRC32)
 	KUNIT_CASE(crc32_le_test),
 	KUNIT_CASE(crc32_le_benchmark),
 	KUNIT_CASE(crc32_be_test),
 	KUNIT_CASE(crc32_be_benchmark),
 	KUNIT_CASE(crc32c_test),
 	KUNIT_CASE(crc32c_benchmark),
+#endif
+#if IS_REACHABLE(CONFIG_CRC64)
 	KUNIT_CASE(crc64_be_test),
 	KUNIT_CASE(crc64_be_benchmark),
 	KUNIT_CASE(crc64_nvme_test),
 	KUNIT_CASE(crc64_nvme_benchmark),
+#endif
 	{},
 };
 
 static struct kunit_suite crc_test_suite = {
 	.name = "crc",
-- 
2.53.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 2/3] lib/crc: tests: Add CRC_ENABLE_ALL_FOR_KUNIT
  2026-03-06  3:35 [PATCH 0/3] lib/crc: Fix crc_kunit dependency and add kunitconfig Eric Biggers
  2026-03-06  3:35 ` [PATCH 1/3] lib/crc: tests: Make crc_kunit test only the enabled CRC variants Eric Biggers
@ 2026-03-06  3:35 ` Eric Biggers
  2026-03-06  3:35 ` [PATCH 3/3] lib/crc: tests: Add a .kunitconfig file Eric Biggers
  2026-03-14  0:03 ` [PATCH 0/3] lib/crc: Fix crc_kunit dependency and add kunitconfig Eric Biggers
  3 siblings, 0 replies; 5+ messages in thread
From: Eric Biggers @ 2026-03-06  3:35 UTC (permalink / raw)
  To: linux-kernel; +Cc: linux-crypto, Ard Biesheuvel, kunit-dev, Eric Biggers

Now that crc_kunit uses the standard "depends on" pattern, enabling the
full set of CRC tests is a bit difficult, mainly due to CRC7 being
rarely used.  Add a kconfig option to make it easier.  It is visible
only when KUNIT, so hopefully the extra prompt won't be too annoying.

Signed-off-by: Eric Biggers <ebiggers@kernel.org>
---
 lib/crc/Kconfig | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/lib/crc/Kconfig b/lib/crc/Kconfig
index 9ddfd1a29757..cca228879bb5 100644
--- a/lib/crc/Kconfig
+++ b/lib/crc/Kconfig
@@ -105,10 +105,24 @@ config CRC_KUNIT_TEST
 	  Unit tests for the CRC library functions.
 
 	  This is intended to help people writing architecture-specific
 	  optimized versions.  If unsure, say N.
 
+config CRC_ENABLE_ALL_FOR_KUNIT
+	tristate "Enable all CRC functions for KUnit test"
+	depends on KUNIT
+	select CRC7
+	select CRC16
+	select CRC_T10DIF
+	select CRC32
+	select CRC64
+	help
+	  Enable all CRC functions that have test code in CRC_KUNIT_TEST.
+
+	  Enable this only if you'd like the CRC KUnit test suite to test all
+	  the CRC variants, even ones that wouldn't otherwise need to be built.
+
 config CRC_BENCHMARK
 	bool "Benchmark for the CRC functions"
 	depends on CRC_KUNIT_TEST
 	help
 	  Include benchmarks in the KUnit test suite for the CRC functions.
-- 
2.53.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 3/3] lib/crc: tests: Add a .kunitconfig file
  2026-03-06  3:35 [PATCH 0/3] lib/crc: Fix crc_kunit dependency and add kunitconfig Eric Biggers
  2026-03-06  3:35 ` [PATCH 1/3] lib/crc: tests: Make crc_kunit test only the enabled CRC variants Eric Biggers
  2026-03-06  3:35 ` [PATCH 2/3] lib/crc: tests: Add CRC_ENABLE_ALL_FOR_KUNIT Eric Biggers
@ 2026-03-06  3:35 ` Eric Biggers
  2026-03-14  0:03 ` [PATCH 0/3] lib/crc: Fix crc_kunit dependency and add kunitconfig Eric Biggers
  3 siblings, 0 replies; 5+ messages in thread
From: Eric Biggers @ 2026-03-06  3:35 UTC (permalink / raw)
  To: linux-kernel; +Cc: linux-crypto, Ard Biesheuvel, kunit-dev, Eric Biggers

Add a .kunitconfig file to the lib/crc/ directory so that the CRC
library tests can be run more easily using kunit.py.  Example with UML:

    tools/testing/kunit/kunit.py run --kunitconfig=lib/crc

Example with QEMU:

    tools/testing/kunit/kunit.py run --kunitconfig=lib/crc --arch=arm64 --make_options LLVM=1

Signed-off-by: Eric Biggers <ebiggers@kernel.org>
---
 lib/crc/.kunitconfig | 3 +++
 1 file changed, 3 insertions(+)
 create mode 100644 lib/crc/.kunitconfig

diff --git a/lib/crc/.kunitconfig b/lib/crc/.kunitconfig
new file mode 100644
index 000000000000..0a3671ba573f
--- /dev/null
+++ b/lib/crc/.kunitconfig
@@ -0,0 +1,3 @@
+CONFIG_KUNIT=y
+CONFIG_CRC_ENABLE_ALL_FOR_KUNIT=y
+CONFIG_CRC_KUNIT_TEST=y
-- 
2.53.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH 0/3] lib/crc: Fix crc_kunit dependency and add kunitconfig
  2026-03-06  3:35 [PATCH 0/3] lib/crc: Fix crc_kunit dependency and add kunitconfig Eric Biggers
                   ` (2 preceding siblings ...)
  2026-03-06  3:35 ` [PATCH 3/3] lib/crc: tests: Add a .kunitconfig file Eric Biggers
@ 2026-03-14  0:03 ` Eric Biggers
  3 siblings, 0 replies; 5+ messages in thread
From: Eric Biggers @ 2026-03-14  0:03 UTC (permalink / raw)
  To: linux-kernel; +Cc: linux-crypto, Ard Biesheuvel, kunit-dev

On Thu, Mar 05, 2026 at 07:35:54PM -0800, Eric Biggers wrote:
> This series fixes crc_kunit to follow the standard KUnit convention of
> depending on the code it tests rather than selecting it, adds a kconfig
> option that enables all the CRC variants for KUnit testing, and adds a
> kunitconfig file for lib/crc/.
> 
> This follows similar changes to lib/crypto/ (except lib/crypto/ doesn't
> have an equivalent to CRC_ENABLE_ALL_FOR_KUNIT yet, but we could
> consider adding one).
> 
> This series applies to v7.0-rc2 and is targeting crc-next.
> 
> Eric Biggers (3):
>   lib/crc: tests: Make crc_kunit test only the enabled CRC variants
>   lib/crc: tests: Add CRC_ENABLE_ALL_FOR_KUNIT
>   lib/crc: tests: Add a .kunitconfig file
> 
>  lib/crc/.kunitconfig      |  3 +++
>  lib/crc/Kconfig           | 17 +++++++++++++----
>  lib/crc/tests/crc_kunit.c | 28 ++++++++++++++++++++++------
>  3 files changed, 38 insertions(+), 10 deletions(-)
>  create mode 100644 lib/crc/.kunitconfig

Applied to https://git.kernel.org/pub/scm/linux/kernel/git/ebiggers/linux.git/log/?h=crc-next

- Eric

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2026-03-14  0:03 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-06  3:35 [PATCH 0/3] lib/crc: Fix crc_kunit dependency and add kunitconfig Eric Biggers
2026-03-06  3:35 ` [PATCH 1/3] lib/crc: tests: Make crc_kunit test only the enabled CRC variants Eric Biggers
2026-03-06  3:35 ` [PATCH 2/3] lib/crc: tests: Add CRC_ENABLE_ALL_FOR_KUNIT Eric Biggers
2026-03-06  3:35 ` [PATCH 3/3] lib/crc: tests: Add a .kunitconfig file Eric Biggers
2026-03-14  0:03 ` [PATCH 0/3] lib/crc: Fix crc_kunit dependency and add kunitconfig Eric Biggers

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.