Skip to contentSkip to conversation

selftests/mm: use pattern matching in .gitignore

PATCH In review [email protected] 3 participants 7 messages Aug 3 – Aug 4

Subsystems (4)
lore
Share & tools
lore
#0 lore raw

v4 cover selftests/mm: use pattern matching in .gitignore

From: Pratyush Mallick <[email protected]>

The current selftests/mm/.gitignore hardcodes each generated test binary by name, which requires manual updates every time a new test is added.

This series switches to a pattern-matching approach (similar to KVM selftests), ignoring everything by default and allowing specific source extensions. To accommodate this without tracking generated headers, local_config.h is renamed to local_config.h_gen.

Changelog since v3 [3]:
- Reordered the patches so that local_config.h is renamed before updating .gitignore, preventing local_config.h from temporarily showing up as an untracked file in git status (SeongJae Park).

Changelog since v2 [2]:
- Split the changes into two separate patches (header rename and .gitignore update).
- Added Suggested-by for David Hildenbrand for the header rename approach.
- Dropped David's and Yosry's Reviewed-by tags.
- Kept Lorenzo Stoakes's Reviewed-by and added Mike Rapoport's Acked-by.

Changelog since v1 (RFC) [1]:
- Renamed local_config.h to local_config.h_gen to avoid conflict with !*.h.
- Updated Makefile, check_config.sh, and affected .c files for the rename.
- Removed *.mod.c as it was unnecessary.

Links:
[1] RFC: https://lore.kernel.org/linux-mm/afnMAaz1jY94db2n@lucifer/
[2] v2: https://lore.kernel.org/linux-mm/[email protected]/
[3] v3: https://lore.kernel.org/linux-mm/[email protected]/

Pratyush Mallick (2):
selftests/mm: rename local_config.h to local_config.h_gen selftests/mm: use pattern matching in .gitignore

 tools/testing/selftests/mm/.gitignore      | 71 +++-------------------
 tools/testing/selftests/mm/Makefile        |  6 +-
 tools/testing/selftests/mm/check_config.sh |  2 +-
 tools/testing/selftests/mm/cow.c           |  2 +-
 tools/testing/selftests/mm/gup_longterm.c  |  2 +-
 5 files changed, 15 insertions(+), 68 deletions(-)
Signature · 1 line
2.55.0.571.g244d577d93-goog
#1 lore raw

PATCH v4 1/2 selftests/mm: rename local_config.h to local_config.h_gen

From: Pratyush Mallick <[email protected]>

Because local_config.h is a generated build artifact, un-ignoring all .h files in .gitignore causes it to incorrectly show up as an untracked file in git status.

Rename it to local_config.h_gen so it no longer matches the !*.h inclusion rule, preparing for a subsequent patch that switches .gitignore to a pattern-matching approach.

Update Makefile, check_config.sh, and affected test sources (cow.c, gup_longterm.c) accordingly.

---
 tools/testing/selftests/mm/Makefile        | 6 +++---
 tools/testing/selftests/mm/check_config.sh | 2 +-
 tools/testing/selftests/mm/cow.c           | 2 +-
 tools/testing/selftests/mm/gup_longterm.c  | 2 +-
 4 files changed, 6 insertions(+), 6 deletions(-)
tools/testing/selftests/mm/Makefile +3 -3
index 7a5de4e9bf52..32f4b016b74f 100644
@@ -5,7 +5,7 @@
 # script so kunit knows to run it, and add it to the list below.
 # If you do not YOUR TESTS WILL NOT RUN IN THE CI.
 
-LOCAL_HDRS += $(selfdir)/mm/local_config.h $(top_srcdir)/mm/gup_test.h
+LOCAL_HDRS += $(selfdir)/mm/local_config.h_gen $(top_srcdir)/mm/gup_test.h
 LOCAL_HDRS += $(selfdir)/mm/mseal_helpers.h
 
 include local_config.mk
@@ -259,10 +259,10 @@ $(OUTPUT)/migration: LDLIBS += -lnuma
 
 $(OUTPUT)/rmap: LDLIBS += -lnuma
 
-local_config.mk local_config.h: check_config.sh
+local_config.mk local_config.h_gen: check_config.sh
 	CC="$(CC)" CFLAGS="$(CFLAGS)" ./check_config.sh
 
-EXTRA_CLEAN += local_config.mk local_config.h
+EXTRA_CLEAN += local_config.mk local_config.h_gen
 
 ifeq ($(IOURING_EXTRA_LIBS),)
 all: warn_missing_liburing
tools/testing/selftests/mm/check_config.sh +1 -1
index b84c82bbf875..b46bf2d2e7f8 100755
@@ -4,7 +4,7 @@
 # Probe for libraries and create header files to record the results. Both C
 # header files and Makefile include fragments are created.
 
-OUTPUT_H_FILE=local_config.h
+OUTPUT_H_FILE=local_config.h_gen
 OUTPUT_MKFILE=local_config.mk
 
 tmpname=$(mktemp)
tools/testing/selftests/mm/cow.c +1 -1
index d9c69c04b67d..87710c5a2d3c 100644
@@ -21,7 +21,7 @@
 #include <sys/wait.h>
 #include <linux/memfd.h>
 
-#include "local_config.h"
+#include "local_config.h_gen"
 #ifdef LOCAL_CONFIG_HAVE_LIBURING
 #include <liburing.h>
 #endif /* LOCAL_CONFIG_HAVE_LIBURING */
tools/testing/selftests/mm/gup_longterm.c +1 -1
index f61150d28eb2..00ea0dd2f655 100644
@@ -21,7 +21,7 @@
 #include <linux/magic.h>
 #include <linux/memfd.h>
 
-#include "local_config.h"
+#include "local_config.h_gen"
 #ifdef LOCAL_CONFIG_HAVE_LIBURING
 #include <liburing.h>
 #endif /* LOCAL_CONFIG_HAVE_LIBURING */
Signature · 1 line
2.55.0.571.g244d577d93-goog
Reviewed-by on v4 1/2
#2 lore raw

Re: [PATCH v4 1/2] selftests/mm: rename local_config.h to local_config.h_gen

Hell Pratyush,

My recipients checker found you are using the old email address of Liam, so added Liam's updated email to the recipients list.

Quoted 6 lines · On Mon, 3 Aug 2026 22:17:31 +0000 [email protected] wrote:

From: Pratyush Mallick <[email protected]>

Because local_config.h is a generated build artifact, un-ignoring all .h files in .gitignore causes it to incorrectly show up as an untracked file in git status.

Quoted 6 lines

Rename it to local_config.h_gen so it no longer matches the !*.h inclusion rule, preparing for a subsequent patch that switches .gitignore to a pattern-matching approach.

Update Makefile, check_config.sh, and affected test sources (cow.c, gup_longterm.c) accordingly.

Looks good to me. Thank you for accepting my humble suggestion or reordering.

I found this patch cannot cleanly 'git am'-ed on mm-new, mm-unstable and even mm-stable. Maybe rebasing will be nice?

Quoted 5 lines

Thanks,
SJ

[...]

#3 lore raw

Re: [PATCH v4 1/2] selftests/mm: rename local_config.h to local_config.h_gen

On Mon, 03 Aug 2026 16:57:51 -0700 SJ Park <[email protected]> wrote:

[...]

Quoted 2 lines

I found this patch cannot cleanly 'git am'-ed on mm-new, mm-unstable and even mm-stable. Maybe rebasing will be nice?

Never mind, I just found Andrew already added this to mm-new.

[1] https://lore.kernel.org/[email protected]

Thanks,
SJ

[...]

#4 lore raw

PATCH v4 2/2 selftests/mm: use pattern matching in .gitignore

In reply to [email protected]

From: Pratyush Mallick <[email protected]>

The current .gitignore hardcodes each generated test binary by name, requiring updates every time a new test is added.

Switch to the pattern-matching approach similar to KVM:selftests. Ignore everything by default and then allow source extensions (.c, .h, .sh) and tracked non-source files.

Note that local_config.h was renamed to local_config.h_gen in a previous patch so that un-ignoring *.h files does not cause generated build artifacts to become untracked.

---
 tools/testing/selftests/mm/.gitignore | 71 ++++-----------------------
 1 file changed, 9 insertions(+), 62 deletions(-)
tools/testing/selftests/mm/.gitignore +9 -62
index 83ad9454dd9d..fcd892ed21e3 100644
@@ -1,63 +1,10 @@
 # SPDX-License-Identifier: GPL-2.0-only
-cow
-hugepage-mmap
-hugepage-mremap
-hugepage-shm
-hugepage-vmemmap
-hugetlb-madvise
-hugetlb-read-hwpoison
-hugetlb-soft-offline
-khugepaged
-map_hugetlb
-map_populate
-thuge-gen
-compaction_test
-memory-failure
-migration
-mlock2-tests
-mrelease_test
-mremap_dontunmap
-mremap_test
-on-fault-limit
-transhuge-stress
-pagemap_ioctl
-pfnmap
-process_madv
-*.tmp*
-protection_keys
-protection_keys_32
-protection_keys_64
-madv_populate
-uffd-stress
-uffd-unit-tests
-uffd-wp-mremap
-mlock-intersect-test
-mlock-random-test
-virtual_address_range
-gup_test
-va_128TBswitch
-map_fixed_noreplace
-write_to_hugetlbfs
-hmm-tests
-memfd_secret
-soft-dirty
-split_huge_page_test
-ksm_tests
-local_config.h
-local_config.mk
-ksm_functional_tests
-mdwe_test
-gup_longterm
-mkdirty
-va_high_addr_switch
-hugetlb_fault_after_madv
-hugetlb_madv_vs_map
-mseal_test
-droppable
-hugetlb_dio
-pkey_sighandler_tests_32
-pkey_sighandler_tests_64
-guard-regions
-merge
-prctl_thp_disable
-rmap
+*
+!/**/
+!*.c
+!*.h
+!*.sh
+!.gitignore
+!Makefile
+!config
+!settings
Signature · 1 line
2.55.0.571.g244d577d93-goog
Reviewed-by on v4 2/2
#5 lore raw

Cc-ed Liam's up-to-date email address.

Quoted 5 lines · On Mon, 3 Aug 2026 22:17:32 +0000 [email protected] wrote:

From: Pratyush Mallick <[email protected]>

The current .gitignore hardcodes each generated test binary by name, requiring updates every time a new test is added.

Quoted 7 lines

Switch to the pattern-matching approach similar to KVM:selftests. Ignore everything by default and then allow source extensions (.c, .h, .sh) and tracked non-source files.

Note that local_config.h was renamed to local_config.h_gen in a previous patch so that un-ignoring *.h files does not cause generated build artifacts to become untracked.

Looks nice and smart to me!

Quoted 5 lines
Quoted 3 lines
---
 tools/testing/selftests/mm/.gitignore | 71 ++++-----------------------
 1 file changed, 9 insertions(+), 62 deletions(-)

What a lovely diffstat. :)

Thanks,
SJ

[...]

maintainer Acked-by on v4 2/2
#6 lore raw
In reply to [email protected]
Quoted 13 lines · On 8/4/26 00:17, [email protected] wrote:

From: Pratyush Mallick <[email protected]>

The current .gitignore hardcodes each generated test binary by name, requiring updates every time a new test is added.

Switch to the pattern-matching approach similar to KVM:selftests. Ignore everything by default and then allow source extensions (.c, .h, .sh) and tracked non-source files.

Note that local_config.h was renamed to local_config.h_gen in a previous patch so that un-ignoring *.h files does not cause generated build artifacts to become untracked.

Quoted 5 lines

---

Signature · 3 lines
Cheers,

David