Re: [PATCH] resource, kunit: add dependency on SPARSEMEM

From: Guenter Roeck
Date: Mon Sep 23 2024 - 09:39:55 EST


On 9/23/24 05:58, Geert Uytterhoeven wrote:
Hi Günter,

On Mon, Sep 23, 2024 at 12:50 AM Guenter Roeck <linux@xxxxxxxxxxxx> wrote:
Building allmodconfig images on systems with SPARSEMEM=n results in
the following message.

WARNING: unmet direct dependencies detected for GET_FREE_REGION
Depends on [n]: SPARSEMEM [=n]
Selected by [m]:
- RESOURCE_KUNIT_TEST [=m] && RUNTIME_TESTING_MENU [=y] && KUNIT [=m]

and the build ultimately fails.

Really? What's the build error?

I saw it on hexagon, and I didn't bother writing down the actual build error
message. But it turns out you are correct, the m68k machine does build with
CONFIG_RESOURCE_KUNIT_TEST=y even though SPARSEMEM and with it GET_FREE_REGION
are not set. Never mind, I don't really want or have time to argue. I'll just
disable CONFIG_RESOURCE_KUNIT_TEST when building hexagon images and wherever
else I see the problem.

It does build for me on m68k, after fixing:

--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -101,7 +101,7 @@ extern int mmap_rnd_compat_bits __read_mostly;
# ifdef MAX_PHYSMEM_BITS
# define PHYSMEM_END ((1ULL << MAX_PHYSMEM_BITS) - 1)
# else
-# define PHYSMEM_END (-1ULL)
+# define PHYSMEM_END ((phys_addr_t)-1)
# endif
#endif

GET_FREE_REGION depends on SPARSEMEM, so any configuration selecting it
also depends on SPARSEMEM. Add the missing dependency.

Effectively that means that RESOURCE_KUNIT_TEST is now restricted to
systems with SPARSEMEM=y, but that can not be helped.

Perhaps the individual test(s) that do depend on GET_FREE_REGION should
be protected by #ifdef CONFIG_GET_FREE_REGION instead? However,
I have no idea which parts depend on that, as apparently all tests
succeed on m68k/ARAnyM, with CONFIG_SPARSEMEM=n:

KTAP version 1
1..1
KTAP version 1
# Subtest: resource
# module: resource_kunit
1..3
ok 1 resource_test_union
ok 2 resource_test_intersection
ok 3 resource_test_region_intersects
# resource: pass:3 fail:0 skip:0 total:3
# Totals: pass:3 fail:0 skip:0 total:3
ok 1 resource


Interesting that you get that to boot. The q800 machine crashes for me
when trying to boot it in qemu with the latest upstream kernel, in function
__pte_offset_map_lock(). It bisects to commit 394290cba966 ("mm: turn
USE_SPLIT_PTE_PTLOCKS / USE_SPLIT_PTE_PTLOCKS into Kconfig options").
Reverting that patch fixes the crash for me. I guess you are not seeing that ?

Thanks,
Guenter