Enable test_uffdio_minor for test_type == TEST_SHMEM, and modify the
test slightly to pass in / check for the right feature flags.

Signed-off-by: Axel Rasmussen <axelrasmus...@google.com>
---
 tools/testing/selftests/vm/userfaultfd.c | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/tools/testing/selftests/vm/userfaultfd.c 
b/tools/testing/selftests/vm/userfaultfd.c
index 5183ddb3080d..f31e9a4edc55 100644
--- a/tools/testing/selftests/vm/userfaultfd.c
+++ b/tools/testing/selftests/vm/userfaultfd.c
@@ -1410,7 +1410,7 @@ static int userfaultfd_minor_test(void)
        void *expected_page;
        char c;
        struct uffd_stats stats = { 0 };
-       uint64_t features = UFFD_FEATURE_MINOR_HUGETLBFS;
+       uint64_t req_features, features_out;
 
        if (!test_uffdio_minor)
                return 0;
@@ -1418,10 +1418,18 @@ static int userfaultfd_minor_test(void)
        printf("testing minor faults: ");
        fflush(stdout);
 
-       if (uffd_test_ctx_clear() || uffd_test_ctx_init_ext(&features))
+       if (test_type == TEST_HUGETLB)
+               req_features = UFFD_FEATURE_MINOR_HUGETLBFS;
+       else if (test_type == TEST_SHMEM)
+               req_features = UFFD_FEATURE_MINOR_SHMEM;
+       else
+               return 1;
+
+       features_out = req_features;
+       if (uffd_test_ctx_clear() || uffd_test_ctx_init_ext(&features_out))
                return 1;
-       /* If kernel reports the feature isn't supported, skip the test. */
-       if (!(features & UFFD_FEATURE_MINOR_HUGETLBFS)) {
+       /* If kernel reports required features aren't supported, skip test. */
+       if ((features_out & req_features) != req_features) {
                printf("skipping test due to lack of feature support\n");
                fflush(stdout);
                return 0;
@@ -1431,7 +1439,7 @@ static int userfaultfd_minor_test(void)
        uffdio_register.range.len = nr_pages * page_size;
        uffdio_register.mode = UFFDIO_REGISTER_MODE_MINOR;
        if (ioctl(uffd, UFFDIO_REGISTER, &uffdio_register)) {
-               fprintf(stderr, "register failure\n");
+               perror("register failure");
                exit(1);
        }
 
@@ -1695,6 +1703,7 @@ static void set_test_type(const char *type)
                map_shared = true;
                test_type = TEST_SHMEM;
                uffd_test_ops = &shmem_uffd_test_ops;
+               test_uffdio_minor = true;
        } else {
                fprintf(stderr, "Unknown test type: %s\n", type); exit(1);
        }
-- 
2.30.0.617.g56c4b15f3c-goog

Reply via email to