tools/testing/selftests/mm/pfnmap.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-)
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 random 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'
Signed-off-by: Sudarsan Mahendran <sudarsanm@google.com>
---
tools/testing/selftests/mm/pfnmap.c | 24 ++++++++++++++++++------
1 file changed, 18 insertions(+), 6 deletions(-)
diff --git a/tools/testing/selftests/mm/pfnmap.c b/tools/testing/selftests/mm/pfnmap.c
index 866ac023baf5..2d4e8b165f91 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)
{
@@ -117,19 +119,19 @@ FIXTURE_SETUP(pfnmap)
if (find_ram_target(&self->phys_addr, self->pagesize))
SKIP(return, "Cannot find ram target in '/proc/iomem'\n");
- self->dev_mem_fd = open("/dev/mem", O_RDONLY);
+ self->dev_mem_fd = open(file, O_RDONLY);
if (self->dev_mem_fd < 0)
- SKIP(return, "Cannot open '/dev/mem'\n");
+ SKIP(return, "Cannot open '%s'\n", file);
self->size1 = self->pagesize * 2;
self->addr1 = mmap(NULL, self->size1, PROT_READ, MAP_SHARED,
self->dev_mem_fd, self->phys_addr);
if (self->addr1 == MAP_FAILED)
- SKIP(return, "Cannot mmap '/dev/mem'\n");
+ SKIP(return, "Cannot mmap '%s'\n", file);
/* ... and want to be able to read from them. */
if (test_read_access(self->addr1, self->size1, self->pagesize))
- SKIP(return, "Cannot read-access mmap'ed '/dev/mem'\n");
+ SKIP(return, "Cannot read-access mmap'ed '%s'\n", file);
self->size2 = 0;
self->addr2 = MAP_FAILED;
@@ -246,4 +248,14 @@ TEST_F(pfnmap, fork)
ASSERT_EQ(ret, 0);
}
-TEST_HARNESS_MAIN
+int main(int argc, char **argv)
+{
+ for (int i = 1; i < argc; i++) {
+ if (strcmp(argv[i], "--") == 0) {
+ if (i + 1 < argc && strlen(argv[i + 1]) > 0)
+ file = argv[i + 1];
+ return test_harness_run(i, argv);
+ }
+ }
+ return test_harness_run(argc, argv);
+}
--
2.50.1.565.gc32cd1483b-goog
On 31.07.25 22:10, 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 random 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'
Now, if you really just pass a random *actual file* that exists, the
test case will not actually test what we want.
Unless you have a way to verify that you actually get a PFNMAP mapping,
this extension is questionable. It will make the test report possibly
wrong results when wrong files are provided.
I think we can test whether we get a PFNMAP mapping by looking at the
flags in smaps output ("pf" in flags), so I would expect such a test to
be done in pfnmap, and the test should FAIL if the file would not create
a PFNMAP.
But more importantly, we rely on "/proc/iomem" to find a RAM target in
/dev/mem. That doesn't make any sense with what you are doing here.
If we are not provided /dev/mem, you should probably try mapping offset
0 of the file.
--
Cheers,
David / dhildenb
Thanks for the review!
I've sent a follow up v2 patch.
On Fri, Aug 1, 2025 at 12:15 AM David Hildenbrand <david@redhat.com> wrote:
>
> On 31.07.25 22:10, 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 random 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'
>
> Now, if you really just pass a random *actual file* that exists, the
> test case will not actually test what we want.
>
> Unless you have a way to verify that you actually get a PFNMAP mapping,
> this extension is questionable. It will make the test report possibly
> wrong results when wrong files are provided.
>
> I think we can test whether we get a PFNMAP mapping by looking at the
> flags in smaps output ("pf" in flags), so I would expect such a test to
> be done in pfnmap, and the test should FAIL if the file would not create
> a PFNMAP.
>
>
> But more importantly, we rely on "/proc/iomem" to find a RAM target in
> /dev/mem. That doesn't make any sense with what you are doing here.
>
> If we are not provided /dev/mem, you should probably try mapping offset
> 0 of the file.
>
> --
> Cheers,
>
> David / dhildenb
>
© 2016 - 2026 Red Hat, Inc.