Re: [PATCH v4 26/30] selftests/liveupdate: Add multi-kexec session lifecycle test
From: Vipin Sharma <hidden>
Date: 2025-10-03 22:51:26
Also in:
linux-doc, linux-fsdevel, linux-mm, lkml
Subsystem:
kernel selftest framework, live update, the rest · Maintainers:
Shuah Khan, Shuah Khan, Pasha Tatashin, Mike Rapoport, Pratyush Yadav, Linus Torvalds
On 2025-09-29 01:03:17, Pasha Tatashin wrote:
quoted hunk ↗ jump to hunk
diff --git a/tools/testing/selftests/liveupdate/.gitignore b/tools/testing/selftests/liveupdate/.gitignore index af6e773cf98f..de7ca45d3892 100644 --- a/tools/testing/selftests/liveupdate/.gitignore +++ b/tools/testing/selftests/liveupdate/.gitignore@@ -1 +1,2 @@ /liveupdate +/luo_multi_kexec
In next patches new tests are not added to gitignore.
quoted hunk ↗ jump to hunk
diff --git a/tools/testing/selftests/liveupdate/Makefile b/tools/testing/selftests/liveupdate/Makefile index 2a573c36016e..1cbc816ed5c5 100644 --- a/tools/testing/selftests/liveupdate/Makefile +++ b/tools/testing/selftests/liveupdate/Makefile@@ -1,7 +1,38 @@ # SPDX-License-Identifier: GPL-2.0-only + +KHDR_INCLUDES ?= -I../../../usr/include
If make is run from the tools/testing/selftests/liveupdate directory, this will not work because it needs one more "..". If this is built using selftest Makefile from root directory make -C tools/testing/selftests TARGETS=liveupdate there will not be build errors because tools/testing/selftests/Makefile defines KHDR_INCLUDES, so above definition will never happen.
CFLAGS += -Wall -O2 -Wno-unused-function CFLAGS += $(KHDR_INCLUDES) +LDFLAGS += -static
Why static? Can't we let user pass extra flags if they prefer static
+ +# --- Test Configuration (Edit this section when adding new tests) --- +LUO_SHARED_SRCS := luo_test_utils.c +LUO_SHARED_HDRS += luo_test_utils.h + +LUO_MANUAL_TESTS += luo_multi_kexec + +TEST_FILES += do_kexec.sh TEST_GEN_PROGS += liveupdate +# --- Automatic Rule Generation (Do not edit below) --- + +TEST_GEN_PROGS_EXTENDED += $(LUO_MANUAL_TESTS) + +# Define the full list of sources for each manual test. +$(foreach test,$(LUO_MANUAL_TESTS), \ + $(eval $(test)_SOURCES := $(test).c $(LUO_SHARED_SRCS))) + +# This loop automatically generates an explicit build rule for each manual test. +# It includes dependencies on the shared headers and makes the output +# executable. +# Note the use of '$$' to escape automatic variables for the 'eval' command. +$(foreach test,$(LUO_MANUAL_TESTS), \ + $(eval $(OUTPUT)/$(test): $($(test)_SOURCES) $(LUO_SHARED_HDRS) \ + $(call msg,LINK,,$$@) ; \ + $(Q)$(LINK.c) $$^ $(LDLIBS) -o $$@ ; \ + $(Q)chmod +x $$@ \ + ) \ +) + include ../lib.mk
make is not building LUO_MANUAL_TESTS, it is only building liveupdate. How to build them? I ended up making bunch of changes in the Makefile to fix these issues. Following is the diff (it is based on last patch of the series). It allows in-tree build, out-of-tree build, and build other tests as well.
diff --git a/tools/testing/selftests/liveupdate/Makefile b/tools/testing/selftests/liveupdate/Makefile
index 25a6dec790bb..fbcacbd1b798 100644
--- a/tools/testing/selftests/liveupdate/Makefile
+++ b/tools/testing/selftests/liveupdate/Makefile@@ -1,10 +1,5 @@ # SPDX-License-Identifier: GPL-2.0-only -KHDR_INCLUDES ?= -I../../../usr/include -CFLAGS += -Wall -O2 -Wno-unused-function -CFLAGS += $(KHDR_INCLUDES) -LDFLAGS += -static - # --- Test Configuration (Edit this section when adding new tests) --- LUO_SHARED_SRCS := luo_test_utils.c LUO_SHARED_HDRS += luo_test_utils.h
@@ -25,6 +20,12 @@ TEST_GEN_PROGS := $(LUO_MAIN_TESTS) liveupdate_SOURCES := liveupdate.c $(LUO_SHARED_SRCS) +include ../lib.mk + +CFLAGS += -Wall -O2 -Wno-unused-function +CFLAGS += $(KHDR_INCLUDES) +LDFLAGS += -static + $(OUTPUT)/liveupdate: $(liveupdate_SOURCES) $(LUO_SHARED_HDRS) $(call msg,LINK,,$@) $(Q)$(LINK.c) $^ $(LDLIBS) -o $@
@@ -33,16 +34,16 @@ $(OUTPUT)/liveupdate: $(liveupdate_SOURCES) $(LUO_SHARED_HDRS) $(foreach test,$(LUO_MANUAL_TESTS), \ $(eval $(test)_SOURCES := $(test).c $(LUO_SHARED_SRCS))) +define BUILD_RULE_TEMPLATE +$(OUTPUT)/$(1): $($(1)_SOURCES) $(LUO_SHARED_HDRS) + $(call msg,LINK,,$$@) + $(Q)$(LINK.c) $$^ $(LDLIBS) -o $$@ + $(Q)chmod +x $$@ +endef # This loop automatically generates an explicit build rule for each manual test. # It includes dependencies on the shared headers and makes the output # executable. # Note the use of '$$' to escape automatic variables for the 'eval' command. $(foreach test,$(LUO_MANUAL_TESTS), \ - $(eval $(OUTPUT)/$(test): $($(test)_SOURCES) $(LUO_SHARED_HDRS) \ - $(call msg,LINK,,$$@) ; \ - $(Q)$(LINK.c) $$^ $(LDLIBS) -o $$@ ; \ - $(Q)chmod +x $$@ \ - ) \ + $(eval $(call BUILD_RULE_TEMPLATE,$(test))) \ ) - -include ../lib.mk