selftests/mm: skip soft-dirty tests when CONFIG_MEM_SOFT_DIRTY is disabled
Subsystems (3)
PATCH v3 1/1 selftests/mm: skip soft-dirty tests when CONFIG_MEM_SOFT_DIRTY is disabled
From: Lance Yang <[email protected]>
The madv_populate and soft-dirty kselftests currently fail on systems where CONFIG_MEM_SOFT_DIRTY is disabled.
Introduce a new helper softdirty_supported() into vm_util.c/h to ensure tests are properly skipped when the feature is not enabled.
---
v2 -> v3:
- Optimize softdirty_supported() by directly assigning check_vmflag() result (per David)
- Pick AB from David - thanks!
- https://lore.kernel.org/lkml/[email protected]
v1 -> v2:
- Rename softdirty_is_supported() to softdirty_supported() (per David)
- Drop aarch64 specific handling (per David)
- https://lore.kernel.org/lkml/[email protected]
tools/testing/selftests/mm/madv_populate.c | 21 ++------------------- tools/testing/selftests/mm/soft-dirty.c | 5 ++++- tools/testing/selftests/mm/vm_util.c | 17 +++++++++++++++++ tools/testing/selftests/mm/vm_util.h | 1 + 4 files changed, 24 insertions(+), 20 deletions(-)
tools/testing/selftests/mm/madv_populate.c +2 -19
@@ -264,23 +264,6 @@ static void test_softdirty(void)munmap (addr,SIZE ); } -static int system_has_softdirty (void ) -{ -/* -* There is no way to check if the kernel supports soft-dirty, other -* than by writing to a page and seeing if the bit was set. But the -* tests are intended to check that the bit gets set when it should, so -* doing that check would turn a potentially legitimate fail into a -* skip. Fortunately, we know for sure that arm64 does not support -* soft-dirty. So for now, let's just use the arch as a corse guide. -*/ -#if defined(__aarch64__) -return 0 ; -#else -return 1 ; -#endif -} -int main (int argc,char **argv) {int nr_tests =16 ;
@@ -288,7 +271,7 @@ int main(int argc, char **argv) pagesize =getpagesize (); -if (system_has_softdirty ()) +if (softdirty_supported ()) nr_tests +=5 ;ksft_print_header ();
@@ -300,7 +283,7 @@ int main(int argc, char **argv)test_holes ();test_populate_read ();test_populate_write (); -if (system_has_softdirty ()) +if (softdirty_supported ())test_softdirty (); err =ksft_get_fail_cnt ();
tools/testing/selftests/mm/soft-dirty.c +4 -1
@@ -200,8 +200,11 @@ int main(int argc, char **argv)int pagesize;ksft_print_header (); -ksft_set_plan (15 ); +if (!softdirty_supported ()) +ksft_exit_skip ("soft-dirty is not support\n" ); + +ksft_set_plan (15 ); pagemap_fd =open (PAGEMAP_FILE_PATH ,O_RDONLY );if (pagemap_fd <0 )ksft_exit_fail_msg ("Failed to open %s\n" ,PAGEMAP_FILE_PATH );
tools/testing/selftests/mm/vm_util.c +17 -0
@@ -449,6 +449,23 @@ bool check_vmflag_pfnmap(void *addr)return check_vmflag (addr,"pf" ); } +bool softdirty_supported (void ) +{ +char *addr; +bool supported = false; +const size_t pagesize =getpagesize (); + +/* New mappings are expected to be marked with VM_SOFTDIRTY (sd). */ + addr =mmap (0 , pagesize,PROT_READ |PROT_WRITE , +MAP_ANONYMOUS |MAP_PRIVATE ,0 ,0 ); +if (!addr) +ksft_exit_fail_msg ("mmap failed\n" ); + + supported =check_vmflag (addr,"sd" ); +munmap (addr, pagesize); +return supported; +} +/* * Open an fd at /proc/$pid/maps and configure procmap_out ready for * PROCMAP_QUERY query. Returns 0 on success, or an error code otherwise.
tools/testing/selftests/mm/vm_util.h +1 -0
@@ -104,6 +104,7 @@ bool find_vma_procmap(struct procmap_fd *procmap, void *address);int close_procmap (struct procmap_fd *procmap);int write_sysfs (const char *file_path,unsigned long val);int read_sysfs (const char *file_path,unsigned long *val); +bool softdirty_supported (void );static inline int open_self_procmap (struct procmap_fd *procmap_out) {
Signature · 1 line
2.49.0
Andrew Morton
maintainerQuoted 5 lines · On Wed, 17 Sep 2025 21:31:37 +0800 Lance Yang <[email protected]> wrote:
The
madv_populateand soft-dirty kselftests currently fail on systems whereCONFIG_MEM_SOFT_DIRTYis disabled.Introduce a new helper
softdirty_supported()into vm_util.c/h to ensure tests are properly skipped when the feature is not enabled.
It's pretty sad for us to ship kernels which have known selftest flaws like this.
would
be appropriate?
Quoted 8 lines · Andrew Morton
Quoted 5 lines · On Wed, 17 Sep 2025 21:31:37 +0800 Lance Yang <[email protected]> wrote:
The
madv_populateand soft-dirty kselftests currently fail on systems whereCONFIG_MEM_SOFT_DIRTYis disabled.Introduce a new helper
softdirty_supported()into vm_util.c/h to ensure tests are properly skipped when the feature is not enabled.
Quoted 8 lines
It's pretty sad for us to ship kernels which have known selftest flaws like this.
would
Fixes 9f3265db6ae8 ("selftests: vm: add test for Soft-Dirty PTE bit")be appropriate?
Yes. Thanks for providing the Fixes: tag!