On Thu, 30 Jan 2025 at 04:54, Eric Biggers <ebiggers@xxxxxxxxxx> wrote: > > From: Eric Biggers <ebiggers@xxxxxxxxxx> > > Wire up crc64_nvme() to the new CRC unit test and benchmark. > > This replaces and improves on the test coverage that was lost by > removing this CRC variant from the crypto API. > > Signed-off-by: Eric Biggers <ebiggers@xxxxxxxxxx> > --- > lib/crc_kunit.c | 30 +++++++++++++++++++++++++++++- > 1 file changed, 29 insertions(+), 1 deletion(-) > Reviewed-by: Ard Biesheuvel <ardb@xxxxxxxxxx> > diff --git a/lib/crc_kunit.c b/lib/crc_kunit.c > index 6a61d4b5fd45..1e82fcf9489e 100644 > --- a/lib/crc_kunit.c > +++ b/lib/crc_kunit.c > @@ -30,11 +30,12 @@ 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. > + * can fit any CRC up to CRC-64. 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; > @@ -405,10 +406,35 @@ static void crc64_be_test(struct kunit *test) > static void crc64_be_benchmark(struct kunit *test) > { > crc_benchmark(test, crc64_be_wrapper); > } > > +/* crc64_nvme */ > + > +static u64 crc64_nvme_wrapper(u64 crc, const u8 *p, size_t len) > +{ > + /* The inversions that crc64_nvme() does have to be undone here. */ > + return ~crc64_nvme(~crc, p, len); > +} > + > +static const struct crc_variant crc_variant_crc64_nvme = { > + .bits = 64, > + .le = true, > + .poly = 0x9a6c9329ac4bc9b5, > + .func = crc64_nvme_wrapper, > +}; > + > +static void crc64_nvme_test(struct kunit *test) > +{ > + crc_test(test, &crc_variant_crc64_nvme); > +} > + > +static void crc64_nvme_benchmark(struct kunit *test) > +{ > + crc_benchmark(test, crc64_nvme_wrapper); > +} > + > static struct kunit_case crc_test_cases[] = { > KUNIT_CASE(crc16_test), > KUNIT_CASE(crc16_benchmark), > KUNIT_CASE(crc_t10dif_test), > KUNIT_CASE(crc_t10dif_benchmark), > @@ -418,10 +444,12 @@ static struct kunit_case crc_test_cases[] = { > KUNIT_CASE(crc32_be_benchmark), > KUNIT_CASE(crc32c_test), > KUNIT_CASE(crc32c_benchmark), > KUNIT_CASE(crc64_be_test), > KUNIT_CASE(crc64_be_benchmark), > + KUNIT_CASE(crc64_nvme_test), > + KUNIT_CASE(crc64_nvme_benchmark), > {}, > }; > > static struct kunit_suite crc_test_suite = { > .name = "crc", > -- > 2.48.1 >