On 02.08.25 01:45, Sudarsan Mahendran wrote:
Enable these tests to be run on other pfnmap'ed memory like NVIDIA's EGM.
Add '--' as a separator to pass in file path. This allows passing of cmd line arguments to kselftest_harness. Use '/dev/mem' as default filename.
Existing test passes: pfnmap TAP version 13 1..6 # Starting 6 tests from 1 test cases. # PASSED: 6 / 6 tests passed. # Totals: pass:6 fail:0 xfail:0 xpass:0 skip:0 error:0
Pass params to kselftest_harness: pfnmap -r pfnmap:mremap_fixed TAP version 13 1..1 # Starting 1 tests from 1 test cases. # RUN pfnmap.mremap_fixed ... # OK pfnmap.mremap_fixed ok 1 pfnmap.mremap_fixed # PASSED: 1 / 1 tests passed. # Totals: pass:1 fail:0 xfail:0 xpass:0 skip:0 error:0
Pass non-existent file name as input: pfnmap -- /dev/blah TAP version 13 1..6 # Starting 6 tests from 1 test cases. # RUN pfnmap.madvise_disallowed ... # SKIP Cannot open '/dev/blah'
Pass non pfnmap'ed file as input: pfnmap -r pfnmap.madvise_disallowed -- randfile TAP version 13 1..1 # Starting 1 tests from 1 test cases. # RUN pfnmap.madvise_disallowed ... # SKIP Invalid file: 'randfile'. Not pfnmap'ed
Signed-off-by: Sudarsan Mahendran sudarsanm@google.com
v1 -> v2:
- Add verify_pfnmap func to sanity check the input param
- mmap with zero offset if filename != '/dev/mem'
tools/testing/selftests/mm/pfnmap.c | 62 ++++++++++++++++++++++++----- 1 file changed, 53 insertions(+), 9 deletions(-)
diff --git a/tools/testing/selftests/mm/pfnmap.c b/tools/testing/selftests/mm/pfnmap.c index 866ac023baf5..e078b961c333 100644 --- a/tools/testing/selftests/mm/pfnmap.c +++ b/tools/testing/selftests/mm/pfnmap.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-only /*
- Basic VM_PFNMAP tests relying on mmap() of '/dev/mem'
- Basic VM_PFNMAP tests relying on mmap() of input file provided.
- Use '/dev/mem' as default.
- Copyright 2025, Red Hat, Inc.
@@ -25,6 +26,7 @@ #include "vm_util.h" static sigjmp_buf sigjmp_buf_env; +static char *file = "/dev/mem"; static void signal_handler(int sig) { @@ -98,6 +100,30 @@ static int find_ram_target(off_t *phys_addr, return -ENOENT; } +static int verify_pfnmap(void)
You really want to pass in the address, and verify that that very mapping is a PFNMAP. (not something unrelated, like the vdso or something odd like that)
We have a helper in vm_util.c that might be useful: __get_smap_entry()
We also have a check_vmflag_io() in there. So likely you want to add a helper check_vmflag_pfnmap().
Nothing else jumped at me, except that phys_addr might be better called something like "offset" now.