selftests/mm: skip soft-dirty tests when CONFIG_MEM_SOFT_DIRTY is disabled
Subsystems (3)
PATCH v2 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.
---
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 | 19 +++++++++++++++++++ tools/testing/selftests/mm/vm_util.h | 1 + 4 files changed, 26 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 +19 -0
@@ -449,6 +449,25 @@ 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" ); + +if (check_vmflag (addr,"sd" )) + supported = true; + +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
Quoted 10 lines · Lance Yang
From: Lance Yang <[email protected]>
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.Signed-off-by Lance Yang <[email protected]>---
[...]
Quoted 12 lines
tools/testing/selftests/mm/vm_util.c +4
-0@@ -449,6 +449,25 @@ bool check_vmflag_pfnmap(void *addr)return check_vmflag (addr,"pf" ); } +bool softdirty_supported (void ) +{ +char *addr; +bool supported = false;
tools/testing/selftests/mm/vm_util.c bool check_vmflag_pfnmap(void *addr) · line 465
Quoted 10 lines
tools/testing/selftests/mm/vm_util.c +10
-0+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" ); + +if (check_vmflag (addr,"sd" )) + supported = true;
Reading the code again, this could just be
supported = check_vmflag(addr, "sd");
LGTM
Signature · 3 lines
Cheers David / dhildenb
Quoted 9 lines · David Hildenbrand
Quoted 8 lines · Lance Yang
From: Lance Yang <[email protected]>
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.
Oops, I missed "Suggested-by:" here ... will add in v3.
Quoted 29 lines
Quoted 2 lines
Signed-off-by Lance Yang <[email protected]>---
[...]
Quoted 11 lines
tools/testing/selftests/mm/vm_util.c +4
-0@@ -449,6 +449,25 @@ bool check_vmflag_pfnmap(void *addr) return check_vmflag(addr, "pf"); } +bool softdirty_supported (void ) +{ + char *addr; + bool supported = false;tools/testing/selftests/mm/vm_util.c bool check_vmflag_pfnmap(void *addr) · line 464
Quoted 10 lines
tools/testing/selftests/mm/vm_util.c +10
-0+ 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"); + + if (check_vmflag(addr, "sd")) + supported = true;Reading the code again, this could just be
Quoted 1 line
supported =
check_vmflag(addr, "sd");
Nice. Will do ;)
Quoted 5 lines
LGTM
Thanks,
Lance