@@ -909,28 +909,65 @@ uffd_test_case_t uffd_tests[] = {
909
909
},
910
910
};
911
911
912
+ static void usage (const char * prog )
913
+ {
914
+ printf ("usage: %s [-f TESTNAME]\n" , prog );
915
+ puts ("" );
916
+ puts (" -f: test name to filter (e.g., event)" );
917
+ puts (" -h: show the help msg" );
918
+ puts (" -l: list tests only" );
919
+ puts ("" );
920
+ exit (KSFT_FAIL );
921
+ }
922
+
912
923
int main (int argc , char * argv [])
913
924
{
914
925
int n_tests = sizeof (uffd_tests ) / sizeof (uffd_test_case_t );
915
926
int n_mems = sizeof (mem_types ) / sizeof (mem_type_t );
927
+ const char * test_filter = NULL ;
928
+ bool list_only = false;
916
929
uffd_test_case_t * test ;
917
930
mem_type_t * mem_type ;
918
931
uffd_test_args_t args ;
919
932
char test_name [128 ];
920
933
const char * errmsg ;
921
- int has_uffd ;
934
+ int has_uffd , opt ;
922
935
int i , j ;
923
936
924
- has_uffd = test_uffd_api (false);
925
- has_uffd |= test_uffd_api (true);
937
+ while ((opt = getopt (argc , argv , "f:hl" )) != -1 ) {
938
+ switch (opt ) {
939
+ case 'f' :
940
+ test_filter = optarg ;
941
+ break ;
942
+ case 'l' :
943
+ list_only = true;
944
+ break ;
945
+ case 'h' :
946
+ default :
947
+ /* Unknown */
948
+ usage (argv [0 ]);
949
+ break ;
950
+ }
951
+ }
952
+
953
+ if (!test_filter && !list_only ) {
954
+ has_uffd = test_uffd_api (false);
955
+ has_uffd |= test_uffd_api (true);
926
956
927
- if (!has_uffd ) {
928
- printf ("Userfaultfd not supported or unprivileged, skip all tests\n" );
929
- exit (KSFT_SKIP );
957
+ if (!has_uffd ) {
958
+ printf ("Userfaultfd not supported or unprivileged, skip all tests\n" );
959
+ exit (KSFT_SKIP );
960
+ }
930
961
}
931
962
932
963
for (i = 0 ; i < n_tests ; i ++ ) {
933
964
test = & uffd_tests [i ];
965
+ if (test_filter && !strstr (test -> name , test_filter ))
966
+ continue ;
967
+ if (list_only ) {
968
+ printf ("%s\n" , test -> name );
969
+ continue ;
970
+ }
934
971
for (j = 0 ; j < n_mems ; j ++ ) {
935
972
mem_type = & mem_types [j ];
936
973
if (!(test -> mem_targets & mem_type -> mem_flag ))
@@ -952,7 +989,8 @@ int main(int argc, char *argv[])
952
989
}
953
990
}
954
991
955
- uffd_test_report ();
992
+ if (!list_only )
993
+ uffd_test_report ();
956
994
957
995
return ksft_get_fail_cnt () ? KSFT_FAIL : KSFT_PASS ;
958
996
}
0 commit comments