I sent an email to linux-kbuild to ask Masahiro about it. I believe that we should continue the discussion there. https://lore.kernel.org/linux-kbuild/951fc31ee754ba86acaa9556e1d28c13075c66a2.camel@xxxxxxxx/T/#u Thanks, Marcos On Mon, 2024-02-05 at 15:05 -0300, Marcos Paulo de Souza wrote: > On Wed, 2024-01-31 at 15:40 -0300, Marcos Paulo de Souza wrote: > > CC'ing Miroslav, as he was also involved in the patchset and can > > have > > some ideas about how to fix this issue. > > Finally CCing Miroslav... > > > > > On Wed, 2024-01-31 at 15:39 -0300, Marcos Paulo de Souza wrote: > > > On Wed, 2024-01-31 at 16:34 +0100, Petr Mladek wrote: > > > > On Tue 2024-01-30 11:39:56, Marcos Paulo de Souza wrote: > > > > > On Tue, 2024-01-30 at 07:08 +0800, kernel test robot wrote: > > > > > > tree: > > > > > > https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git > > > > > > m > > > > > > aster > > > > > > head: 596764183be8ebb13352b281a442a1f1151c9b06 > > > > > > commit: c4bbe83d27c2446a033cc0381c3fb6be5e8c41c7 > > > > > > [1016/2825] > > > > > > livepatch: Move tests from lib/livepatch to > > > > > > selftests/livepatch > > > > > > compiler: gcc-12 (Debian 12.2.0-14) 12.2.0 > > > > > > reproduce (this is a W=1 build): > > > > > > ( > > > > > > https://download.01.org/0day-ci/archive/20240130/202401300736.GkSZ > > > > > > oS > > > > > > rA-lkp@xxxxxxxxx/reproduce) > > > > > > > > > > > When looking at the lib.mk, I just followed the other > > > > > variables > > > > > and > > > > > did > > > > > the same: > > > > > > > > > > TEST_GEN_MODS_DIR := $(patsubst > > > > > %,$(OUTPUT)/%,$(TEST_GEN_MODS_DIR)) > > > > > > > > > > But later on, I jump into $(TEST_GEN_MODS_DIR), which is > > > > > invalid > > > > > because of the O= that is used a prefix for the path: > > > > > /tmp/kselftest/kselftest/livepatch/test_modules. My first > > > > > idea > > > > > was > > > > > to > > > > > just remove the patsubst and take TEST_GEN_MODS_DIR, which > > > > > should > > > > > be > > > > > livepatch/test_modules in this case, but it then returns > > > > > another > > > > > problem: > > > > > > > > > > > > > > > make: Entering directory > > > > > '/home/mpdesouza/git/linux/tools/testing/selftests' > > > > > make[1]: Entering directory > > > > > '/home/mpdesouza/git/linux/tools/testing/selftests/livepatch' > > > > > make -C test_modules > > > > > make[2]: Entering directory > > > > > '/home/mpdesouza/git/linux/tools/testing/selftests/livepatch/ > > > > > te > > > > > st > > > > > _m > > > > > odul > > > > > > > > > > es' > > > > > make -C /lib/modules/6.5.9-1-default/build modules > > > > > KBUILD_EXTMOD=/home/mpdesouza/git/linux/tools/testing/selftes > > > > > ts > > > > > /l > > > > > iv > > > > > epat > > > > > > > > > > ch/test_modules > > > > > > > > Nit: There are sometimes strange empty lines between split long > > > > lines. It looks like somehow messed cut&paste. > > > > > > Sorry about it. I'll double check the output next time I copy > > > from > > > my > > > terminal. > > > > > > > > > > > > make[3]: Entering directory '/usr/src/linux-6.5.9-1- > > > > > obj/x86_64/default' > > > > > make[4]: Entering directory '/tmp/kselftest' > > > > > /usr/src/linux-6.5.9-1/Makefile:754: > > > > > include/config/auto.conf: > > > > > No > > > > > such > > > > > file or directory > > > > > > > > I see the same. It looks to me like a bug in kernel-devel > > > > package. > > > > > > > > /usr/src/linux-6.5.9-1/Makefile is from the kernel-devel > > > > package > > > > for the running kernel. It should try to include auto.conf used > > > > for building the running kernel: > > > > > > > > 1. auto.conf should be packaged in kernel-devel. > > > > > > > > 2. The Makefile from the kernel-devel packages should be able > > > > to find/use auto.conf from the kernel-devel package. > > > > > > > > IMHO, this actually helped to find a bug that > > > > make -C tools/testing/selftests/livepatch used auto.conf from > > > > the git tree while the modules are built against headers > > > > for the running kernel. > > > > > > > > That said, I wonder why this problem does not happen when > > > > building > > > > external modules (KMPs). I would expect that they are using > > > > the same Makefile from the kernel-devel package. > > > > > > > > Maybe the external modules somehow manage to clear "need- > > > > config" > > > > used by /usr/src/linux-6.5.9-1/Makefile. Maybe we do not need > > > > to include it either. > > > > > > > > > make[4]: *** [/usr/src/linux-6.5.9-1/Makefile:234: __sub- > > > > > make] > > > > > Error 2 > > > > > make[4]: Leaving directory '/tmp/kselftest' > > > > > make[3]: *** [../../../linux-6.5.9-1/Makefile:234: __sub- > > > > > make] > > > > > Error 2 > > > > > make[3]: Leaving directory '/usr/src/linux-6.5.9-1- > > > > > obj/x86_64/default' > > > > > make[2]: *** [Makefile:16: modules] Error 2 > > > > > make[2]: Leaving directory > > > > > '/home/mpdesouza/git/linux/tools/testing/selftests/livepatch/ > > > > > te > > > > > st > > > > > _m > > > > > odul > > > > > > > > > > es' > > > > > make[1]: *** [../lib.mk:92: gen_mods_dir] Error 2 > > > > > make[1]: Leaving directory > > > > > '/home/mpdesouza/git/linux/tools/testing/selftests/livepatch' > > > > > make: *** [Makefile:180: all] Error 2 > > > > > make: Leaving directory > > > > > '/home/mpdesouza/git/linux/tools/testing/selftests' > > > > > > Well, this maybe be indeed a bug in kernel-devel. I added some > > > debug > > > messages to make (-dd), and I believe that I understood what's > > > going > > > wrong. > > > > > > First of all, if we compile an out-of-tree module, like this: > > > > > > make -C tools/testing/selftests/livepatch/test_modules > > > > > > it goes to /usr/src/linux-6.5.9-1-obj/x86_64/default, and > > > everything > > > works. I printed the abs_objtree and it's in fact where it > > > should. > > > > > > On like 234 of the toplevel Makefile, ion the __sub-make target, > > > it > > > executed the make passed -C to $(abs_objtree), and -f to > > > $(abs_srctree). abs_objtree points to /usr/src/linux-6.5.9-1- > > > obj/x86_64/default while abs_srctree points to /usr/src/linux- > > > 6.5.9- > > > 1. > > > Everything works. > > > > > > But things change whenever we use the O= argument. Its value is > > > passed > > > to abs_objtree, making the __sub-make to execute is a peculiar > > > way: > > > while abs_objtree is /tmp/kselftest, abs_srctree continues to be > > > /usr/src/linux-6.5.9-1. That's why the include fails in this > > > case: > > > > > > ifdef need- > > > config > > > include > > > include/config/auto.conf > > > endif > > > > > > As we are calling the include from /tmp/kselftest, and Makefile > > > include > > > rules try to searching for the file in the directory of it's > > > execution[1], it fails. IIUC, all include paths on the toplevel > > > makefile should have $(abs_srctree) as prefix, so it could work. > > > But > > > as > > > Petr said, we don't have the include/config directory packaged in > > > kernel-devel. > > > > > > I would like to note that this is a problem with out-of-tree > > > module > > > building, and not only kselftest related. If we pass O= when > > > building > > > a > > > module, this will happen. > > > > > > For testing purposes, I added the include/{generated,config} > > > directories into my /usr/src/linux/include, and added abs_srctree > > > to > > > the include mentioned above, and now it's failing with: > > > > > > # CC [M] > > > /home/mpdesouza/git/linux/tools/testing/selftests/livepatch/test_ > > > mo > > > du > > > le > > > s/test_klp_atomic_replace.o > > > gcc -Wp,- > > > MMD,/home/mpdesouza/git/linux/tools/testing/selftests/livepatch/t > > > es > > > t_ > > > mo > > > dules/.test_klp_atomic_replace.o.d -nostdinc -I/usr/src/linux- > > > 6.5.9- > > > 1/arch/x86/include -I./arch/x86/include/generated - > > > I/usr/src/linux- > > > 6.5.9-1/include -I./include -I/usr/src/linux-6.5.9- > > > 1/arch/x86/include/uapi -I./arch/x86/include/generated/uapi - > > > I/usr/src/linux-6.5.9-1/include/uapi -I./include/generated/uapi - > > > include /usr/src/linux-6.5.9-1/include/linux/compiler-version.h - > > > include /usr/src/linux-6.5.9-1/include/linux/kconfig.h -include > > > /usr/src/linux-6.5.9-1/include/linux/compiler_types.h - > > > D__KERNEL__ > > > - > > > Werror -fmacro-prefix-map=/usr/src/linux-6.5.9-1/= -std=gnu11 - > > > fshort- > > > wchar -funsigned-char -fno-common -fno-PIE -fno-strict-aliasing - > > > Wall > > > - > > > Wundef -Werror=implicit-function-declaration -Werror=implicit-int > > > - > > > Werror=return-type -Werror=strict-prototypes -Wno-format-security > > > - > > > Wno- > > > trigraphs -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -fcf- > > > protection=branch -fno-jump-tables -m64 -falign-jumps=1 -falign- > > > loops=1 > > > -mno-80387 -mno-fp-ret-in-387 -mpreferred-stack-boundary=3 - > > > mskip- > > > rax- > > > setup -mtune=generic -mno-red-zone -mcmodel=kernel -Wno-sign- > > > compare > > > - > > > fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern - > > > mindirect-branch-register -mindirect-branch-cs-prefix -mfunction- > > > return=thunk-extern -fno-jump-tables -fpatchable-function- > > > entry=16,16 > > > - > > > fno-delete-null-pointer-checks -Wno-frame-address -Wno-format- > > > truncation -Wno-format-overflow -Wno-address-of-packed-member -O2 > > > - > > > fno- > > > allow-store-data-races -Wframe-larger-than=2048 -fstack- > > > protector- > > > strong -Wno-main -Wno-unused-but-set-variable -Wno-unused-const- > > > variable -Wno-dangling-pointer -ftrivial-auto-var-init=zero -fno- > > > stack- > > > clash-protection -pg -mrecord-mcount -mfentry -DCC_USING_FENTRY - > > > falign-functions=16 -Wvla -Wno-pointer-sign -Wcast-function-type > > > - > > > fstrict-flex-arrays=3 -Wno-stringop-truncation -Wno-stringop- > > > overflow > > > - > > > Wno-restrict -Wno-maybe-uninitialized -Wno-array-bounds -Wno- > > > alloc- > > > size-larger-than -Wimplicit-fallthrough=5 -fno-strict-overflow - > > > fno- > > > stack-check -fconserve-stack -Werror=date-time - > > > Werror=incompatible- > > > pointer-types -Werror=designated-init -Wno-packed-not-aligned -g > > > - > > > DMODULE -DKBUILD_BASENAME='"test_klp_atomic_replace"' - > > > DKBUILD_MODNAME='"test_klp_atomic_replace"' - > > > D__KBUILD_MODNAME=kmod_test_klp_atomic_replace -c -o > > > /home/mpdesouza/git/linux/tools/testing/selftests/livepatch/test_ > > > mo > > > du > > > le > > > s/test_klp_atomic_replace.o > > > /home/mpdesouza/git/linux/tools/testing/selftests/livepatch/test_ > > > mo > > > du > > > le > > > s/test_klp_atomic_replace.c > > > In file included from /usr/src/linux-6.5.9- > > > 1/include/linux/build_bug.h:5, > > > from /usr/src/linux-6.5.9- > > > 1/include/linux/container_of.h:5, > > > from /usr/src/linux-6.5.9- > > > 1/include/linux/list.h:5, > > > from /usr/src/linux-6.5.9- > > > 1/include/linux/module.h:12, > > > from > > > /home/mpdesouza/git/linux/tools/testing/selftests/livepatch/test_ > > > mo > > > du > > > le > > > s/test_klp_atomic_replace.c:6: > > > /usr/src/linux-6.5.9-1/include/linux/compiler.h:246:10: fatal > > > error: > > > asm/rwonce.h: No such file or directory > > > 246 | #include <asm/rwonce.h> > > > | ^~~~~~~~~~~~~~ > > > compilation terminated. > > > > > > Which seems to be missing the asm-generic targets (?). I'm not > > > sure > > > what to think now, if this is indeed a bug or if we should adjust > > > other > > > configurations. As you can see, my lack of Kbuild/Makefile > > > knowledge > > > is > > > big, but I'm doing my best to understand what's wrong and how I > > > could > > > fix it :) > > > > > > What do you think about it? Thanks in advance! > > > > > > (I'm not sure if the output is messed up again...) > > > > > > [1]: > > > https://www.gnu.org/software/make/manual/html_node/Include.html > > > > > > > > > > > Best Regards, > > > > Petr > > > > > >