]> git.baikalelectronics.ru Git - kernel.git/commitdiff
KVM: selftests: Add kvm_has_cap() to provide syntactic sugar
authorSean Christopherson <seanjc@google.com>
Fri, 27 May 2022 22:13:03 +0000 (15:13 -0700)
committerPaolo Bonzini <pbonzini@redhat.com>
Sat, 11 Jun 2022 15:47:28 +0000 (11:47 -0400)
Add kvm_has_cap() to wrap kvm_check_cap() and return a bool for the use
cases where the caller only wants check if a capability is supported,
i.e. doesn't care about the value beyond whether or not it's non-zero.
The "check" terminology is somewhat ambiguous as the non-boolean return
suggests that '0' might mean "success", i.e. suggests that the ioctl uses
the 0/-errno pattern.  Provide a wrapper instead of trying to find a new
name for the raw helper; the "check" terminology is derived from the name
of the ioctl, so using e.g. "get" isn't a clear win.

Signed-off-by: Sean Christopherson <seanjc@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
19 files changed:
tools/testing/selftests/kvm/aarch64/get-reg-list.c
tools/testing/selftests/kvm/aarch64/vcpu_width_config.c
tools/testing/selftests/kvm/dirty_log_test.c
tools/testing/selftests/kvm/include/kvm_util_base.h
tools/testing/selftests/kvm/kvm_binary_stats_test.c
tools/testing/selftests/kvm/lib/kvm_util.c
tools/testing/selftests/kvm/lib/s390x/diag318_test_handler.c
tools/testing/selftests/kvm/x86_64/debug_regs.c
tools/testing/selftests/kvm/x86_64/emulator_error_test.c
tools/testing/selftests/kvm/x86_64/evmcs_test.c
tools/testing/selftests/kvm/x86_64/hyperv_cpuid.c
tools/testing/selftests/kvm/x86_64/kvm_pv_test.c
tools/testing/selftests/kvm/x86_64/set_boot_cpu_id.c
tools/testing/selftests/kvm/x86_64/sev_migrate_tests.c
tools/testing/selftests/kvm/x86_64/triple_fault_event_test.c
tools/testing/selftests/kvm/x86_64/tsc_scaling_sync.c
tools/testing/selftests/kvm/x86_64/vmx_nested_tsc_scaling_test.c
tools/testing/selftests/kvm/x86_64/vmx_preemption_timer_test.c
tools/testing/selftests/kvm/x86_64/vmx_set_nested_state_test.c

index f0f83ffda3447d713b05004e014b215596c6c78a..8bc10b9acbbc896646052713bacb556a62fb1a96 100644 (file)
@@ -395,7 +395,7 @@ static void check_supported(struct vcpu_config *c)
        struct reg_sublist *s;
 
        for_each_sublist(c, s) {
-               if (s->capability && !kvm_check_cap(s->capability)) {
+               if (s->capability && !kvm_has_cap(s->capability)) {
                        fprintf(stderr, "%s: %s not available, skipping tests\n", config_name(c), s->name);
                        exit(KSFT_SKIP);
                }
index dd5a1c4b49e0813b63c9bfa2d59aadea042da079..fff02c442610e9e24d335a0a20cfb46c1aeddc43 100644 (file)
@@ -82,7 +82,7 @@ int main(void)
        struct kvm_vm *vm;
        int ret;
 
-       if (!kvm_check_cap(KVM_CAP_ARM_EL1_32BIT)) {
+       if (!kvm_has_cap(KVM_CAP_ARM_EL1_32BIT)) {
                print_skip("KVM_CAP_ARM_EL1_32BIT is not supported");
                exit(KSFT_SKIP);
        }
index 8542f713a1017aaac4900e33f406097ef56de99b..9c883c94d478f33f4f21d4938aeac97dcfea69b9 100644 (file)
@@ -210,7 +210,7 @@ static void sem_wait_until(sem_t *sem)
 
 static bool clear_log_supported(void)
 {
-       return kvm_check_cap(KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2);
+       return kvm_has_cap(KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2);
 }
 
 static void clear_log_create_vm_done(struct kvm_vm *vm)
@@ -264,7 +264,7 @@ static void default_after_vcpu_run(struct kvm_vcpu *vcpu, int ret, int err)
 
 static bool dirty_ring_supported(void)
 {
-       return kvm_check_cap(KVM_CAP_DIRTY_LOG_RING);
+       return kvm_has_cap(KVM_CAP_DIRTY_LOG_RING);
 }
 
 static void dirty_ring_create_vm_done(struct kvm_vm *vm)
index 72cc0ecda067bf9fb05b649d55089fb5812ad4e7..04ddab322b6bebd5668e226ba20c8ff628853920 100644 (file)
@@ -169,6 +169,11 @@ int open_path_or_exit(const char *path, int flags);
 int open_kvm_dev_path_or_exit(void);
 unsigned int kvm_check_cap(long cap);
 
+static inline bool kvm_has_cap(long cap)
+{
+       return kvm_check_cap(cap);
+}
+
 #define __KVM_SYSCALL_ERROR(_name, _ret) \
        "%s failed, rc: %i errno: %i (%s)", (_name), (_ret), errno, strerror(errno)
 
index 982bf3f7d9c54d3f89825242ac561917cad44608..8754b78ae78587bd3feed1248b8c8338ee96edad 100644 (file)
@@ -213,7 +213,7 @@ int main(int argc, char *argv[])
        }
 
        /* Check the extension for binary stats */
-       if (!kvm_check_cap(KVM_CAP_BINARY_STATS_FD)) {
+       if (!kvm_has_cap(KVM_CAP_BINARY_STATS_FD)) {
                print_skip("Binary form statistics interface is not supported");
                exit(KSFT_SKIP);
        }
index 4cf0e6bf33bb0ed18cbefb66c060809fc5fa342e..f93b0d9334e5bbe9562f91ffac144660203285eb 100644 (file)
@@ -80,7 +80,7 @@ unsigned int kvm_check_cap(long cap)
 
        close(kvm_fd);
 
-       return ret;
+       return (unsigned int)ret;
 }
 
 void vm_enable_dirty_ring(struct kvm_vm *vm, uint32_t ring_size)
@@ -93,7 +93,7 @@ static void vm_open(struct kvm_vm *vm)
 {
        vm->kvm_fd = _open_kvm_dev_path_or_exit(O_RDWR);
 
-       if (!kvm_check_cap(KVM_CAP_IMMEDIATE_EXIT)) {
+       if (!kvm_has_cap(KVM_CAP_IMMEDIATE_EXIT)) {
                print_skip("immediate_exit not available");
                exit(KSFT_SKIP);
        }
index 05283f8c994894ba97998980c28fa10b99940497..cdb7daeed5fd956a1076c39d35bad166d09ac788 100644 (file)
@@ -61,7 +61,7 @@ uint64_t get_diag318_info(void)
         * If KVM does not support diag318, then return 0 to
         * ensure tests do not break.
         */
-       if (!kvm_check_cap(KVM_CAP_S390_DIAG318)) {
+       if (!kvm_has_cap(KVM_CAP_S390_DIAG318)) {
                if (!printed_skip) {
                        fprintf(stdout, "KVM_CAP_S390_DIAG318 not supported. "
                                "Skipping diag318 test.\n");
index c16799b616e0184f3ef0ccc45cadc0423ad10b8b..bba811edef96f9d74c8539a4f0a3cb2c9a154d3a 100644 (file)
@@ -95,7 +95,7 @@ int main(void)
                1,              /* cli */
        };
 
-       if (!kvm_check_cap(KVM_CAP_SET_GUEST_DEBUG)) {
+       if (!kvm_has_cap(KVM_CAP_SET_GUEST_DEBUG)) {
                print_skip("KVM_CAP_SET_GUEST_DEBUG not supported");
                return 0;
        }
index fb2a2390b4af6430582fb72080c0b75d254e1584..119bcb1158d5910b2b4ac9aaf134e44f747bce33 100644 (file)
@@ -162,7 +162,7 @@ int main(int argc, char *argv[])
        /* Tell stdout not to buffer its content */
        setbuf(stdout, NULL);
 
-       if (!kvm_check_cap(KVM_CAP_SMALLER_MAXPHYADDR)) {
+       if (!kvm_has_cap(KVM_CAP_SMALLER_MAXPHYADDR)) {
                printf("module parameter 'allow_smaller_maxphyaddr' is not set.  Skipping test.\n");
                return 0;
        }
index 6c4e728d2d853f7b0bbcdd8de19926a157263849..a6da1ccbee4e3e244949f5aa4db60fcd25df8f14 100644 (file)
@@ -209,8 +209,8 @@ int main(int argc, char *argv[])
        vm = vm_create_with_one_vcpu(&vcpu, guest_code);
 
        if (!nested_vmx_supported() ||
-           !kvm_check_cap(KVM_CAP_NESTED_STATE) ||
-           !kvm_check_cap(KVM_CAP_HYPERV_ENLIGHTENED_VMCS)) {
+           !kvm_has_cap(KVM_CAP_NESTED_STATE) ||
+           !kvm_has_cap(KVM_CAP_HYPERV_ENLIGHTENED_VMCS)) {
                print_skip("Enlightened VMCS is unsupported");
                exit(KSFT_SKIP);
        }
index 6df5a6356181516b14094476474133c9892a8978..e2fac752d354508a18cd87824c81108fef7b7c08 100644 (file)
@@ -137,7 +137,7 @@ int main(int argc, char *argv[])
        /* Tell stdout not to buffer its content */
        setbuf(stdout, NULL);
 
-       if (!kvm_check_cap(KVM_CAP_HYPERV_CPUID)) {
+       if (!kvm_has_cap(KVM_CAP_HYPERV_CPUID)) {
                print_skip("KVM_CAP_HYPERV_CPUID not supported");
                exit(KSFT_SKIP);
        }
@@ -152,7 +152,7 @@ int main(int argc, char *argv[])
        free(hv_cpuid_entries);
 
        if (!nested_vmx_supported() ||
-           !kvm_check_cap(KVM_CAP_HYPERV_ENLIGHTENED_VMCS)) {
+           !kvm_has_cap(KVM_CAP_HYPERV_ENLIGHTENED_VMCS)) {
                print_skip("Enlightened VMCS is unsupported");
                goto do_sys;
        }
@@ -163,7 +163,7 @@ int main(int argc, char *argv[])
 
 do_sys:
        /* Test system ioctl version */
-       if (!kvm_check_cap(KVM_CAP_SYS_HYPERV_CPUID)) {
+       if (!kvm_has_cap(KVM_CAP_SYS_HYPERV_CPUID)) {
                print_skip("KVM_CAP_SYS_HYPERV_CPUID not supported");
                goto out;
        }
index f497d6ecec256911bcf0db936ebba9629e5fda0d..24dad3a472065d9266b11d2b74a34a13d9ceea60 100644 (file)
@@ -204,7 +204,7 @@ int main(void)
        struct kvm_vcpu *vcpu;
        struct kvm_vm *vm;
 
-       if (!kvm_check_cap(KVM_CAP_ENFORCE_PV_FEATURE_CPUID)) {
+       if (!kvm_has_cap(KVM_CAP_ENFORCE_PV_FEATURE_CPUID)) {
                print_skip("KVM_CAP_ENFORCE_PV_FEATURE_CPUID not supported");
                exit(KSFT_SKIP);
        }
index 8bcaf4421dc58671982ae68e6af722c8b0f6ade0..abf740f08d683b1e55f1a8b3ea7d34421824cfa6 100644 (file)
@@ -123,7 +123,7 @@ static void check_set_bsp_busy(void)
 
 int main(int argc, char *argv[])
 {
-       if (!kvm_check_cap(KVM_CAP_SET_BOOT_CPU_ID)) {
+       if (!kvm_has_cap(KVM_CAP_SET_BOOT_CPU_ID)) {
                print_skip("set_boot_cpu_id not available");
                return 0;
        }
index ec418b823273e1607d08406dfe79309b84388695..ffd8613987ae01bfceb89dadd01396cd6eee943b 100644 (file)
@@ -400,8 +400,8 @@ int main(int argc, char *argv[])
 {
        struct kvm_cpuid_entry2 *cpuid;
 
-       if (!kvm_check_cap(KVM_CAP_VM_MOVE_ENC_CONTEXT_FROM) &&
-           !kvm_check_cap(KVM_CAP_VM_COPY_ENC_CONTEXT_FROM)) {
+       if (!kvm_has_cap(KVM_CAP_VM_MOVE_ENC_CONTEXT_FROM) &&
+           !kvm_has_cap(KVM_CAP_VM_COPY_ENC_CONTEXT_FROM)) {
                print_skip("Capabilities not available");
                exit(KSFT_SKIP);
        }
index 01d491f849c2d5b6762e4d222adf6a2bf13fc233..078bd7a0bbb1f4eed4eacb39616fb1e513cfdfd9 100644 (file)
@@ -51,7 +51,7 @@ int main(void)
                exit(KSFT_SKIP);
        }
 
-       if (!kvm_check_cap(KVM_CAP_X86_TRIPLE_FAULT_EVENT)) {
+       if (!kvm_has_cap(KVM_CAP_X86_TRIPLE_FAULT_EVENT)) {
                print_skip("KVM_CAP_X86_TRIPLE_FAULT_EVENT not supported");
                exit(KSFT_SKIP);
        }
index 4a962952212e3e8f3747feda0dd88b8232ff653d..fcc713ff75ff3f8d065234ec107b26ee71704a30 100644 (file)
@@ -93,7 +93,7 @@ static void *run_vcpu(void *_cpu_nr)
 
 int main(int argc, char *argv[])
 {
-        if (!kvm_check_cap(KVM_CAP_VM_TSC_CONTROL)) {
+       if (!kvm_has_cap(KVM_CAP_VM_TSC_CONTROL)) {
                print_skip("KVM_CAP_VM_TSC_CONTROL not available");
                exit(KSFT_SKIP);
        }
index 647a4320d3bcf3f5476d81fea47a7f0f05ed2684..190af812467743ab837ba415b1d338b74e2df7a5 100644 (file)
@@ -118,7 +118,7 @@ static void l1_guest_code(struct vmx_pages *vmx_pages)
 
 static void tsc_scaling_check_supported(void)
 {
-       if (!kvm_check_cap(KVM_CAP_TSC_CONTROL)) {
+       if (!kvm_has_cap(KVM_CAP_TSC_CONTROL)) {
                print_skip("TSC scaling not supported by the HW");
                exit(KSFT_SKIP);
        }
index b775a11ec08b3c7c5cd27a69c1d97f9c8e99ee86..7438258511da2a293dd27e687ce2c05b0bb29c58 100644 (file)
@@ -169,7 +169,7 @@ int main(int argc, char *argv[])
         */
        nested_vmx_check_supported();
 
-       if (!kvm_check_cap(KVM_CAP_NESTED_STATE)) {
+       if (!kvm_has_cap(KVM_CAP_NESTED_STATE)) {
                print_skip("KVM_CAP_NESTED_STATE not supported");
                exit(KSFT_SKIP);
        }
index ba783ceb007f73fc791a6246f44cbb4a8b7f035f..21f280a7c5e17fe891e095a0878077eb2f4069a2 100644 (file)
@@ -267,7 +267,7 @@ int main(int argc, char *argv[])
 
        have_evmcs = kvm_check_cap(KVM_CAP_HYPERV_ENLIGHTENED_VMCS);
 
-       if (!kvm_check_cap(KVM_CAP_NESTED_STATE)) {
+       if (!kvm_has_cap(KVM_CAP_NESTED_STATE)) {
                print_skip("KVM_CAP_NESTED_STATE not available");
                exit(KSFT_SKIP);
        }