RE: [PATCH 0/1] Add KUnit tests for lib/crc16.c
From: David Laight
Date: Wed Sep 25 2024 - 07:27:51 EST
From: Vinicius Peixoto
> Sent: 23 September 2024 00:27
>
> Hi all,
>
> This patch was developed during a hackathon organized by LKCAMP [1],
> with the objective of writing KUnit tests, both to introduce people to
> the kernel development process and to learn about different subsystems
> (with the positive side effect of improving the kernel test coverage, of
> course).
>
> We noticed there were tests for CRC32 in lib/crc32test.c and thought it
> would be nice to have something similar for CRC16, since it seems to be
> widely used in network drivers (as well as in some ext4 code).
>
> Although this patch turned out quite big, most of the LOCs come from
> tables containing randomly-generated test data that we use to validate
> the kernel's implementation of CRC-16.
>
> We would really appreciate any feedback/suggestions on how to improve
> this. Thanks! :-)
Would is be better to use a trivial PRNG to generate repeatable 'random enough'
data, rather than having a large static array?
As a matter of interest, how in crc16 implemented (I know I could look).
The code version:
uint32_t
crc_step(uint32_t crc, uint32_t byte_val)
{
uint32_t t = crc ^ (byte_val & 0xff);
t = (t ^ t << 4) & 0xff;
return crc >> 8 ^ t << 8 ^ t << 3 ^ t >> 4;
}
may well be faster than a lookup table version.
Especially on modern multi-issue cpu and/or for small buffers where the lookup
table won't necessarily be resident in the D-cache.
It is slightly slower than the table lookup on the simple Nios-II cpu.
But we use a custom instruction to do it in one clock.
David
>
> Vinicius Peixoto (1):
> lib/crc16_kunit.c: add KUnit tests for crc16
>
> lib/Kconfig.debug | 8 +
> lib/Makefile | 1 +
> lib/crc16_kunit.c | 715 ++++++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 724 insertions(+)
> create mode 100644 lib/crc16_kunit.c
>
> --
> 2.43.0
>
-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)