KVM: s390: selftest: memop: Move testlist into main
authorJanis Schoetterl-Glausch <scgl@linux.ibm.com>
Mon, 6 Feb 2023 16:45:51 +0000 (17:45 +0100)
committerJanosch Frank <frankja@linux.ibm.com>
Tue, 7 Feb 2023 17:05:59 +0000 (18:05 +0100)
This allows checking if the necessary requirements for a test case are
met via an arbitrary expression. In particular, it is easy to check if
certain bits are set in the memop extension capability.

Signed-off-by: Janis Schoetterl-Glausch <scgl@linux.ibm.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Janosch Frank <frankja@linux.ibm.com>
Link: https://lore.kernel.org/r/20230206164602.138068-4-scgl@linux.ibm.com
Message-Id: <20230206164602.138068-4-scgl@linux.ibm.com>
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
tools/testing/selftests/kvm/s390x/memop.c

index df1c726..bbc191a 100644 (file)
@@ -690,85 +690,86 @@ static void test_errors(void)
        kvm_vm_free(t.kvm_vm);
 }
 
-struct testdef {
-       const char *name;
-       void (*test)(void);
-       int extension;
-} testlist[] = {
-       {
-               .name = "simple copy",
-               .test = test_copy,
-       },
-       {
-               .name = "generic error checks",
-               .test = test_errors,
-       },
-       {
-               .name = "copy with storage keys",
-               .test = test_copy_key,
-               .extension = 1,
-       },
-       {
-               .name = "copy with key storage protection override",
-               .test = test_copy_key_storage_prot_override,
-               .extension = 1,
-       },
-       {
-               .name = "copy with key fetch protection",
-               .test = test_copy_key_fetch_prot,
-               .extension = 1,
-       },
-       {
-               .name = "copy with key fetch protection override",
-               .test = test_copy_key_fetch_prot_override,
-               .extension = 1,
-       },
-       {
-               .name = "error checks with key",
-               .test = test_errors_key,
-               .extension = 1,
-       },
-       {
-               .name = "termination",
-               .test = test_termination,
-               .extension = 1,
-       },
-       {
-               .name = "error checks with key storage protection override",
-               .test = test_errors_key_storage_prot_override,
-               .extension = 1,
-       },
-       {
-               .name = "error checks without key fetch prot override",
-               .test = test_errors_key_fetch_prot_override_not_enabled,
-               .extension = 1,
-       },
-       {
-               .name = "error checks with key fetch prot override",
-               .test = test_errors_key_fetch_prot_override_enabled,
-               .extension = 1,
-       },
-};
 
 int main(int argc, char *argv[])
 {
        int extension_cap, idx;
 
        TEST_REQUIRE(kvm_has_cap(KVM_CAP_S390_MEM_OP));
+       extension_cap = kvm_check_cap(KVM_CAP_S390_MEM_OP_EXTENSION);
 
-       ksft_print_header();
+       struct testdef {
+               const char *name;
+               void (*test)(void);
+               bool requirements_met;
+       } testlist[] = {
+               {
+                       .name = "simple copy",
+                       .test = test_copy,
+                       .requirements_met = true,
+               },
+               {
+                       .name = "generic error checks",
+                       .test = test_errors,
+                       .requirements_met = true,
+               },
+               {
+                       .name = "copy with storage keys",
+                       .test = test_copy_key,
+                       .requirements_met = extension_cap > 0,
+               },
+               {
+                       .name = "copy with key storage protection override",
+                       .test = test_copy_key_storage_prot_override,
+                       .requirements_met = extension_cap > 0,
+               },
+               {
+                       .name = "copy with key fetch protection",
+                       .test = test_copy_key_fetch_prot,
+                       .requirements_met = extension_cap > 0,
+               },
+               {
+                       .name = "copy with key fetch protection override",
+                       .test = test_copy_key_fetch_prot_override,
+                       .requirements_met = extension_cap > 0,
+               },
+               {
+                       .name = "error checks with key",
+                       .test = test_errors_key,
+                       .requirements_met = extension_cap > 0,
+               },
+               {
+                       .name = "termination",
+                       .test = test_termination,
+                       .requirements_met = extension_cap > 0,
+               },
+               {
+                       .name = "error checks with key storage protection override",
+                       .test = test_errors_key_storage_prot_override,
+                       .requirements_met = extension_cap > 0,
+               },
+               {
+                       .name = "error checks without key fetch prot override",
+                       .test = test_errors_key_fetch_prot_override_not_enabled,
+                       .requirements_met = extension_cap > 0,
+               },
+               {
+                       .name = "error checks with key fetch prot override",
+                       .test = test_errors_key_fetch_prot_override_enabled,
+                       .requirements_met = extension_cap > 0,
+               },
+       };
 
+       ksft_print_header();
        ksft_set_plan(ARRAY_SIZE(testlist));
 
-       extension_cap = kvm_check_cap(KVM_CAP_S390_MEM_OP_EXTENSION);
        for (idx = 0; idx < ARRAY_SIZE(testlist); idx++) {
-               if (extension_cap >= testlist[idx].extension) {
+               if (testlist[idx].requirements_met) {
                        testlist[idx].test();
                        ksft_test_result_pass("%s\n", testlist[idx].name);
                } else {
-                       ksft_test_result_skip("%s - extension level %d not supported\n",
-                                             testlist[idx].name,
-                                             testlist[idx].extension);
+                       ksft_test_result_skip("%s - requirements not met (kernel has extension cap %#x)\n",
+                                             testlist[idx].name, extension_cap);
                }
        }