lib/crc_kunit.c: add test and benchmark for crc7_be()
Subsystems (2)
PATCH 1/1 lib/crc_kunit.c: add test and benchmark for crc7_be()
From: Eric Biggers <[email protected]>
Wire up crc7_be() to crc_kunit. Previously it had no test.
Signed-off-by Eric Biggers <[email protected]>
--- lib/Kconfig.debug | 1 + lib/crc_kunit.c | 35 +++++++++++++++++++++++++++++++++-- 2 files changed, 34 insertions(+), 2 deletions(-)
lib/Kconfig.debug +1 -0
@@ -2850,10 +2850,11 @@ config HW_BREAKPOINT_KUNIT_TEST config CRC_KUNIT_TEST tristate "KUnit tests for CRC functions" if !KUNIT_ALL_TESTS depends on KUNIT default KUNIT_ALL_TESTS + select CRC7 select CRC16 select CRC_T10DIF select CRC32 select CRC64 help
lib/crc_kunit.c +33 -2
@@ -5,10 +5,11 @@* Copyright 2024 Google LLC * * Author: Eric Biggers <[email protected]> */ #include <kunit/test.h> +#include <linux/crc7.h> #include <linux/crc16.h> #include <linux/crc-t10dif.h> #include <linux/crc32.h> #include <linux/crc32c.h> #include <linux/crc64.h>
@@ -30,12 +31,13 @@ static size_t test_buflen;* polynomial coefficients in each byte), false if it's a "big endian" CRC * (natural mapping between bits and polynomial coefficients in each byte) * @poly: The generator polynomial with the highest-order term omitted. * Bit-reversed if @le is true. * @func: The function to compute a CRC. The type signature uses u64 so that it -* can fit any CRC up to CRC-64. The function is expected to *not* -* invert the CRC at the beginning and end. +* can fit any CRC up to CRC-64. The CRC is passed in, and is expected +* to be returned in, the least significant bits of the u64. The +* function is expected to *not* invert the CRC at the beginning and end. * @combine_func: Optional function to combine two CRCs. */ struct crc_variant {int bits;bool le;
@@ -250,10 +252,37 @@ 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 */ + +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. +*/ +return crc7_be (crc <<1 , p, len) >>1 ; +} + +static const struct crc_variant crc_variant_crc7_be = { + .bits =7 , + .poly =0x9 , + .func = crc7_be_wrapper, +}; + +static void crc7_be_test (struct kunit *test) +{ +crc_test (test, &crc_variant_crc7_be); +} + +static void crc7_be_benchmark (struct kunit *test) +{ +crc_benchmark (test, crc7_be_wrapper); +} +/* crc16 */ static u64 crc16_wrapper (u64 crc,const u8 *p,size_t len) {return crc16 (crc, p, len);
@@ -432,10 +461,12 @@ static void crc64_nvme_benchmark(struct kunit *test) {crc_benchmark (test, crc64_nvme_wrapper); }static struct kunit_case crc_test_cases[] = { +KUNIT_CASE (crc7_be_test), +KUNIT_CASE (crc7_be_benchmark),KUNIT_CASE (crc16_test),KUNIT_CASE (crc16_benchmark),KUNIT_CASE (crc_t10dif_test),KUNIT_CASE (crc_t10dif_benchmark),KUNIT_CASE (crc32_le_test),
base-commit: 13f3d13d88b5dcba104a204fcbee61c75f8407d0
Signature · 1 line
2.48.1
Quoted 9 lines · Eric Biggers
From: Eric Biggers <[email protected]>
Wire up
crc7_be()tocrc_kunit. Previously it had no test.Signed-off-by Eric Biggers <[email protected]>--- lib/Kconfig.debug | 1 + lib/crc_kunit.c | 35 +++++++++++++++++++++++++++++++++-- 2 files changed, 34 insertions(+), 2 deletions(-)
Applied to
https://web.git.kernel.org/pub/scm/linux/kernel/git/ebiggers/linux.git/log/?h=crc-next
- Eric