Re: [PATCH v6 1/2] selftests: vm: bring common functions to a new file

From: Nico Pache
Date: Fri Sep 23 2022 - 18:35:56 EST


On Wed, Sep 21, 2022 at 5:06 AM Muhammad Usama Anjum
<usama.anjum@xxxxxxxxxxxxx> wrote:
>
> On 9/9/22 8:06 AM, Nico Pache wrote:
> >
> >
> > On 4/20/22 04:40, Muhammad Usama Anjum wrote:
> >> Bring common functions to a new file while keeping code as much same as
> >> possible. These functions can be used in the new tests. This helps in
> >> avoiding code duplication.
> >
> > This commit breaks a pattern in the way tests are run in the current scheme.
> > Before this commit the only executable (or TEST_PROGS) that was executed was
> > run_vmselftests.sh. Now both madv_populate and split_huge_page_test are being
> > run as well.
> >>
> >> Signed-off-by: Muhammad Usama Anjum <usama.anjum@xxxxxxxxxxxxx>
> >> ---
> >> Changes in V6:
> >> - Correct header files inclusion
> >>
> >> Changes in V5:
> >> Keep moved code as same as possible
> >> - Updated macros names
> >> - Removed macro used to show bit number of dirty bit, added a comment
> >> instead
> >> - Corrected indentation
> >> ---
> >> tools/testing/selftests/vm/Makefile | 7 +-
> >> tools/testing/selftests/vm/madv_populate.c | 34 +-----
> >> .../selftests/vm/split_huge_page_test.c | 79 +------------
> >> tools/testing/selftests/vm/vm_util.c | 108 ++++++++++++++++++
> >> tools/testing/selftests/vm/vm_util.h | 9 ++
> >> 5 files changed, 124 insertions(+), 113 deletions(-)
> >> create mode 100644 tools/testing/selftests/vm/vm_util.c
> >> create mode 100644 tools/testing/selftests/vm/vm_util.h
> >>
> >> diff --git a/tools/testing/selftests/vm/Makefile b/tools/testing/selftests/vm/Makefile
> >> index 5e43f072f5b76..4e68edb26d6b6 100644
> >> --- a/tools/testing/selftests/vm/Makefile
> >> +++ b/tools/testing/selftests/vm/Makefile
> >> @@ -34,7 +34,7 @@ TEST_GEN_FILES += hugepage-mremap
> >> TEST_GEN_FILES += hugepage-shm
> >> TEST_GEN_FILES += hugepage-vmemmap
> >> TEST_GEN_FILES += khugepaged
> >> -TEST_GEN_FILES += madv_populate
> >> +TEST_GEN_PROGS = madv_populate
> > madv_populate is already being run in run_vmselftests.sh
> >> TEST_GEN_FILES += map_fixed_noreplace
> >> TEST_GEN_FILES += map_hugetlb
> >> TEST_GEN_FILES += map_populate
> >> @@ -47,7 +47,7 @@ TEST_GEN_FILES += on-fault-limit
> >> TEST_GEN_FILES += thuge-gen
> >> TEST_GEN_FILES += transhuge-stress
> >> TEST_GEN_FILES += userfaultfd
> >> -TEST_GEN_FILES += split_huge_page_test
> >> +TEST_GEN_PROGS += split_huge_page_test
> >> TEST_GEN_FILES += ksm_tests
> >>
> >> ifeq ($(MACHINE),x86_64)
> >> @@ -91,6 +91,9 @@ TEST_FILES := test_vmalloc.sh
> >> KSFT_KHDR_INSTALL := 1
> >> include ../lib.mk
> >>
> >> +$(OUTPUT)/madv_populate: vm_util.c
> >> +$(OUTPUT)/split_huge_page_test: vm_util.c
> > Not sure what this does but if we add a run entry for split_huge_page_test in
> > run_vmselftests.sh we wont really need this patch.
> >
> > I'm not sure the reduction in code size is worth the change in run behavior.
> >
> > Unless I'm missing something I suggest we revert this patch and add a run entry
> > for split_huge_page_test in run_vmselftests.sh. I can do this if no one objects.
> The run behavior isn't being changed here. Only the build behavior is
> being changed as we want to keep the common code in one file. You can
> add the run entry as required. I don't know why do you think the
> Makefile has changed the run behavior.

Before your commit running
`make TARGETS=vm; make TARGETS=vm run_tests`
had the following run behavior:
- The only thing executed via the run_tests wrapper is run_vmtests.sh
- TAP output is 1/1:
TAP version 13
1..1
# selftests: vm: run_vmtests.sh
# arm64 ia64 mips64 parisc64 ppc64 ppc64le riscv64 s390x sh64
sparc64 x86_64
# -----------------------
# running ./hugepage-mmap
# -----------------------
....

After your commit:
- Multiple executables (madv_populate, soft-dirty,
split_huge_page_test, run_vmtests.sh) are defined and ran:
# selftests: vm: madv_populate
not ok 1 selftests: vm: madv_populate # exit=1
# selftests: vm: soft-dirty
ok 2 selftests: vm: soft-dirty
# selftests: vm: split_huge_page_test
ok 3 selftests: vm: split_huge_page_test
# selftests: vm: run_vmtests.sh
ok 4 selftests: vm: run_vmtests.sh # SKIP

I'm not saying utilizing the TEST_GEN_PROG variable is incorrect, I'm
just pointing out that we have a sudden change in run behavior via the
run_test wrapper. I personally think the TEST_GEN_PROG output is
cleaner, but having two different ways of outputting results may be
harder/confusing to parser. Additionally there is still the issue that
madv_populate is being run twice for no reason.

Cheers,
-- Nico

>
> >
> > Cheers,
> > -- Nico
> >
>
> --
> Muhammad Usama Anjum
>