Message ID | 20240112-send-lp-kselftests-v6-1-79f3e9a46717@suse.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | livepatch: Move modules to selftests and add a new test | expand |
On 1/12/24 10:43, Marcos Paulo de Souza wrote: > Add TEST_GEN_MODS_DIR variable for kselftests. It can point to > a directory containing kernel modules that will be used by > selftest scripts. > > The modules are built as external modules for the running kernel. > As a result they are always binary compatible and the same tests > can be used for older or newer kernels. > > The build requires "kernel-devel" package to be installed. > For example, in the upstream sources, the rpm devel package > is produced by "make rpm-pkg" > > The modules can be built independently by > > make -C tools/testing/selftests/livepatch/ > > or they will be automatically built before running the tests via > > make -C tools/testing/selftests/livepatch/ run_tests > > Note that they are _not_ built when running the standalone > tests by calling, for example, ./test-state.sh. > > Along with TEST_GEN_MODS_DIR, it was necessary to create a new install > rule. INSTALL_MODS_RULE is needed because INSTALL_SINGLE_RULE would > copy the entire TEST_GEN_MODS_DIR directory to the destination, even > the files created by Kbuild to compile the modules. The new install > rule copies only the .ko files, as we would expect the gen_tar to work. > > Reviewed-by: Joe Lawrence <joe.lawrence@redhat.com> > Reviewed-by: Petr Mladek <pmladek@suse.com> > Signed-off-by: Marcos Paulo de Souza <mpdesouza@suse.com> > --- > Documentation/dev-tools/kselftest.rst | 4 ++++ > tools/testing/selftests/lib.mk | 26 +++++++++++++++++++++----- Hi Marcos, I would like the doc patch and lib.mk patch separate. If lib.mk needs changes we don't have to touch the doc patch. thanks, -- Shuah
On Mon, 2024-01-22 at 10:15 -0700, Shuah Khan wrote: > On 1/12/24 10:43, Marcos Paulo de Souza wrote: > > Add TEST_GEN_MODS_DIR variable for kselftests. It can point to > > a directory containing kernel modules that will be used by > > selftest scripts. > > > > The modules are built as external modules for the running kernel. > > As a result they are always binary compatible and the same tests > > can be used for older or newer kernels. > > > > The build requires "kernel-devel" package to be installed. > > For example, in the upstream sources, the rpm devel package > > is produced by "make rpm-pkg" > > > > The modules can be built independently by > > > > make -C tools/testing/selftests/livepatch/ > > > > or they will be automatically built before running the tests via > > > > make -C tools/testing/selftests/livepatch/ run_tests > > > > Note that they are _not_ built when running the standalone > > tests by calling, for example, ./test-state.sh. > > > > Along with TEST_GEN_MODS_DIR, it was necessary to create a new > > install > > rule. INSTALL_MODS_RULE is needed because INSTALL_SINGLE_RULE would > > copy the entire TEST_GEN_MODS_DIR directory to the destination, > > even > > the files created by Kbuild to compile the modules. The new install > > rule copies only the .ko files, as we would expect the gen_tar to > > work. > > > > Reviewed-by: Joe Lawrence <joe.lawrence@redhat.com> > > Reviewed-by: Petr Mladek <pmladek@suse.com> > > Signed-off-by: Marcos Paulo de Souza <mpdesouza@suse.com> > > --- > > Documentation/dev-tools/kselftest.rst | 4 ++++ > > tools/testing/selftests/lib.mk | 26 +++++++++++++++++++++- > > ---- > > > Hi Marcos, > > I would like the doc patch and lib.mk patch separate. If lib.mk needs > changes > we don't have to touch the doc patch. Hi Shuah, on patch 2/3 you also said that you would like to have the documentation changes split in the future, and that you picked the changes into a testing branch. Does it also applies to this patch? Do I need to resend the three patches and separate the documentation part into a new one, or can I apply this rationale to future changes to lib.mk? Sorry, I'm confused. Thanks in advance, Marcos > > thanks, > -- Shuah
On 1/22/24 10:37, Marcos Paulo de Souza wrote: > On Mon, 2024-01-22 at 10:15 -0700, Shuah Khan wrote: >> On 1/12/24 10:43, Marcos Paulo de Souza wrote: >>> Add TEST_GEN_MODS_DIR variable for kselftests. It can point to >>> a directory containing kernel modules that will be used by >>> selftest scripts. >>> >>> The modules are built as external modules for the running kernel. >>> As a result they are always binary compatible and the same tests >>> can be used for older or newer kernels. >>> >>> The build requires "kernel-devel" package to be installed. >>> For example, in the upstream sources, the rpm devel package >>> is produced by "make rpm-pkg" >>> >>> The modules can be built independently by >>> >>> make -C tools/testing/selftests/livepatch/ >>> >>> or they will be automatically built before running the tests via >>> >>> make -C tools/testing/selftests/livepatch/ run_tests >>> >>> Note that they are _not_ built when running the standalone >>> tests by calling, for example, ./test-state.sh. >>> >>> Along with TEST_GEN_MODS_DIR, it was necessary to create a new >>> install >>> rule. INSTALL_MODS_RULE is needed because INSTALL_SINGLE_RULE would >>> copy the entire TEST_GEN_MODS_DIR directory to the destination, >>> even >>> the files created by Kbuild to compile the modules. The new install >>> rule copies only the .ko files, as we would expect the gen_tar to >>> work. >>> >>> Reviewed-by: Joe Lawrence <joe.lawrence@redhat.com> >>> Reviewed-by: Petr Mladek <pmladek@suse.com> >>> Signed-off-by: Marcos Paulo de Souza <mpdesouza@suse.com> >>> --- >>> Documentation/dev-tools/kselftest.rst | 4 ++++ >>> tools/testing/selftests/lib.mk | 26 +++++++++++++++++++++- >>> ---- >> >> >> Hi Marcos, >> >> I would like the doc patch and lib.mk patch separate. If lib.mk needs >> changes >> we don't have to touch the doc patch. > > Hi Shuah, > on patch 2/3 you also said that you would like to have the > documentation changes split in the future, and that you picked the > changes into a testing branch. Does it also applies to this patch? > No need to do anything now. I just applied the series to linux-kselftest next thanks, -- Shuah
diff --git a/Documentation/dev-tools/kselftest.rst b/Documentation/dev-tools/kselftest.rst index ab376b316c36..7f3582a67318 100644 --- a/Documentation/dev-tools/kselftest.rst +++ b/Documentation/dev-tools/kselftest.rst @@ -245,6 +245,10 @@ Contributing new tests (details) TEST_PROGS, TEST_GEN_PROGS mean it is the executable tested by default. + TEST_GEN_MODS_DIR should be used by tests that require modules to be built + before the test starts. The variable will contain the name of the directory + containing the modules. + TEST_CUSTOM_PROGS should be used by tests that require custom build rules and prevent common build rule use. diff --git a/tools/testing/selftests/lib.mk b/tools/testing/selftests/lib.mk index aa646e0661f3..0d8b7db92715 100644 --- a/tools/testing/selftests/lib.mk +++ b/tools/testing/selftests/lib.mk @@ -54,11 +54,15 @@ endif # TEST_PROGS are for test shell scripts. # TEST_CUSTOM_PROGS and TEST_PROGS will be run by common run_tests # and install targets. Common clean doesn't touch them. +# TEST_GEN_MODS_DIR is used to specify a directory with modules to be built +# before the test executes. These modules are cleaned on the clean target as well. TEST_GEN_PROGS := $(patsubst %,$(OUTPUT)/%,$(TEST_GEN_PROGS)) TEST_GEN_PROGS_EXTENDED := $(patsubst %,$(OUTPUT)/%,$(TEST_GEN_PROGS_EXTENDED)) TEST_GEN_FILES := $(patsubst %,$(OUTPUT)/%,$(TEST_GEN_FILES)) +TEST_GEN_MODS_DIR := $(patsubst %,$(OUTPUT)/%,$(TEST_GEN_MODS_DIR)) -all: $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES) +all: $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES) \ + $(if $(TEST_GEN_MODS_DIR),gen_mods_dir) define RUN_TESTS BASE_DIR="$(selfdir)"; \ @@ -71,8 +75,8 @@ endef run_tests: all ifdef building_out_of_srctree - @if [ "X$(TEST_PROGS)$(TEST_PROGS_EXTENDED)$(TEST_FILES)" != "X" ]; then \ - rsync -aq --copy-unsafe-links $(TEST_PROGS) $(TEST_PROGS_EXTENDED) $(TEST_FILES) $(OUTPUT); \ + @if [ "X$(TEST_PROGS)$(TEST_PROGS_EXTENDED)$(TEST_FILES)$(TEST_GEN_MODS_DIR)" != "X" ]; then \ + rsync -aq --copy-unsafe-links $(TEST_PROGS) $(TEST_PROGS_EXTENDED) $(TEST_FILES) $(TEST_GEN_MODS_DIR) $(OUTPUT); \ fi @if [ "X$(TEST_PROGS)" != "X" ]; then \ $(call RUN_TESTS, $(TEST_GEN_PROGS) $(TEST_CUSTOM_PROGS) \ @@ -84,11 +88,22 @@ else @$(call RUN_TESTS, $(TEST_GEN_PROGS) $(TEST_CUSTOM_PROGS) $(TEST_PROGS)) endif +gen_mods_dir: + $(Q)$(MAKE) -C $(TEST_GEN_MODS_DIR) + +clean_mods_dir: + $(Q)$(MAKE) -C $(TEST_GEN_MODS_DIR) clean + define INSTALL_SINGLE_RULE $(if $(INSTALL_LIST),@mkdir -p $(INSTALL_PATH)) $(if $(INSTALL_LIST),rsync -a --copy-unsafe-links $(INSTALL_LIST) $(INSTALL_PATH)/) endef +define INSTALL_MODS_RULE + $(if $(INSTALL_LIST),@mkdir -p $(INSTALL_PATH)/$(INSTALL_LIST)) + $(if $(INSTALL_LIST),rsync -a --copy-unsafe-links $(INSTALL_LIST)/*.ko $(INSTALL_PATH)/$(INSTALL_LIST)) +endef + define INSTALL_RULE $(eval INSTALL_LIST = $(TEST_PROGS)) $(INSTALL_SINGLE_RULE) $(eval INSTALL_LIST = $(TEST_PROGS_EXTENDED)) $(INSTALL_SINGLE_RULE) @@ -97,6 +112,7 @@ define INSTALL_RULE $(eval INSTALL_LIST = $(TEST_CUSTOM_PROGS)) $(INSTALL_SINGLE_RULE) $(eval INSTALL_LIST = $(TEST_GEN_PROGS_EXTENDED)) $(INSTALL_SINGLE_RULE) $(eval INSTALL_LIST = $(TEST_GEN_FILES)) $(INSTALL_SINGLE_RULE) + $(eval INSTALL_LIST = $(notdir $(TEST_GEN_MODS_DIR))) $(INSTALL_MODS_RULE) $(eval INSTALL_LIST = $(wildcard config settings)) $(INSTALL_SINGLE_RULE) endef @@ -122,7 +138,7 @@ define CLEAN $(RM) -r $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES) $(EXTRA_CLEAN) endef -clean: +clean: $(if $(TEST_GEN_MODS_DIR),clean_mods_dir) $(CLEAN) # Enables to extend CFLAGS and LDFLAGS from command line, e.g. @@ -153,4 +169,4 @@ $(OUTPUT)/%:%.S $(LINK.S) $^ $(LDLIBS) -o $@ endif -.PHONY: run_tests all clean install emit_tests +.PHONY: run_tests all clean install emit_tests gen_mods_dir clean_mods_dir