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);
                }
        }