Re: [RFC] mm: Add KUNIT test for ptval_bytes_to_hex_str()

From: Anshuman Khandual

Date: Thu Oct 01 2026 - 04:57:31 EST


On Thu, Oct 01, 2026 at 09:45:01AM +0200, David Hildenbrand (Arm) wrote:
> On 9/29/26 14:05, Anshuman Khandual wrote:
> > Add KUnit tests for ptval_bytes_to_hex_str() to verify conversion of 32-bit
> > 64-bit, and 128-bit (when supported) page table entry values into printable
> > hexadecimal strings.
> >
> > Add a new PTVAL_HEX_STR_KUNIT_TEST option to enable the tests.
> >
> > Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
> > Cc: David Hildenbrand <david@xxxxxxxxxx>
> > Cc: Lorenzo Stoakes <ljs@xxxxxxxxxx>
> > Cc: linux-kernel@xxxxxxxxxxxxxxx
> > Cc: linux-mm@xxxxxxxxx
> > Signed-off-by: Anshuman Khandual <anshuman.khandual@xxxxxxx>
> > ---
> > This patch applies on v7.3-rc5 after the following series
> >
> > https://lore.kernel.org/linux-mm/20260831054331.625505-1-anshuman.khandual@xxxxxxx/
> >
> > mm/Kconfig | 11 +++
> > mm/Makefile | 1 +
> > mm/tests/ptval_hex_string_kunit.c | 111 ++++++++++++++++++++++++++++++
> > 3 files changed, 123 insertions(+)
> > create mode 100644 mm/tests/ptval_hex_string_kunit.c
> >
> > diff --git a/mm/Kconfig b/mm/Kconfig
> > index 604c58199acbf..f68bf26b98c83 100644
> > --- a/mm/Kconfig
> > +++ b/mm/Kconfig
> > @@ -1511,6 +1511,17 @@ config LAZY_MMU_MODE_KUNIT_TEST
> >
> > If unsure, say N.
> >
> > +config PTVAL_HEX_STR_KUNIT_TEST
> > + bool "KUnit tests for pgtable entry string conversion" if !KUNIT_ALL_TESTS
> > + depends on KUNIT
> > + default KUNIT_ALL_TESTS
> > + help
> > + Enable this option to check that ptval_bytes_to_hex_str() is able
> > + convert given pgtable entry value in bytes into hex strings which
> > + could be printed.
> > +
> > + If unsure, say N.
>
> That's a bit fine grained :)
>
> Could we somehow pack this under another existing / more generic test? We don't
> want one new test for every new function :)

Probably right. We don't need one test for each new function.

>
> An alternative would be to use mm/debug_vm_pgtable.c to just run 3 tests at
> runtime as well.

Yes - that could work as well given its printing pgtable entries but
those tests would not be KUNIT based any more I guess. Although just
like the existing VM_WARN_ON() check, new tests should be sufficient.

>
> > +
> > source "mm/damon/Kconfig"
> >
> > endmenu
> > diff --git a/mm/Makefile b/mm/Makefile
> > index e7245cb88c665..d08b8bd01917b 100644
> > --- a/mm/Makefile
> > +++ b/mm/Makefile
> > @@ -147,4 +147,5 @@ obj-$(CONFIG_SHRINKER_DEBUG) += shrinker_debug.o
> > obj-$(CONFIG_EXECMEM) += execmem.o
> > obj-$(CONFIG_TMPFS_QUOTA) += shmem_quota.o
> > obj-$(CONFIG_LAZY_MMU_MODE_KUNIT_TEST) += tests/lazy_mmu_mode_kunit.o
> > +obj-$(CONFIG_PTVAL_HEX_STR_KUNIT_TEST) += tests/ptval_hex_string_kunit.o
> > obj-$(CONFIG_MEM_ALLOC_PROFILING) += alloc_tag.o
> > diff --git a/mm/tests/ptval_hex_string_kunit.c b/mm/tests/ptval_hex_string_kunit.c
> > new file mode 100644
> > index 0000000000000..45c203cfb49ae
> > --- /dev/null
> > +++ b/mm/tests/ptval_hex_string_kunit.c
> > @@ -0,0 +1,111 @@
> > +// SPDX-License-Identifier: GPL-2.0
> > +
> > +#include <kunit/test.h>
> > +#include <linux/pgtable.h>
> > +
> > +struct ptval_str {
> > + u64 val;
> > + const char *str;
> > +};
> > +
> > +static struct ptval_str ptval_u32_tests[] = {
> > + { .val = 0x1234abcd, .str = "1234abcd"},
>
> Isn't a single test like this enough. Why would we need the other ones?
>
> So I think this could all get condensed quite a bit (including the test
> functions, a single one should be sufficient if we really only end up with 3 tests).

If we continue with KUNIT framework, probably all three tests are still
required to distingish them but in mm/debug_vm_pgatble.c based approach
a single test can combine all these tests via VM_WARN_ON().

>
> --
> Cheers,
>
> David