KVM: selftests: Move the guts of kvm_hypercall() to a separate macro
[linux-block.git] / tools / testing / selftests / kvm / lib / x86_64 / processor.c
index ae1e573d94ce71d6832d15c3eeb191d938f693e6..ff901cb47ffcab3fe7e1d2c3eacfd94cc789e325 100644 (file)
@@ -1139,21 +1139,26 @@ const struct kvm_cpuid_entry2 *get_cpuid_entry(const struct kvm_cpuid2 *cpuid,
        return NULL;
 }
 
+#define X86_HYPERCALL(inputs...)                                       \
+({                                                                     \
+       uint64_t r;                                                     \
+                                                                       \
+       asm volatile("test %[use_vmmcall], %[use_vmmcall]\n\t"          \
+                    "jnz 1f\n\t"                                       \
+                    "vmcall\n\t"                                       \
+                    "jmp 2f\n\t"                                       \
+                    "1: vmmcall\n\t"                                   \
+                    "2:"                                               \
+                    : "=a"(r)                                          \
+                    : [use_vmmcall] "r" (host_cpu_is_amd), inputs);    \
+                                                                       \
+       r;                                                              \
+})
+
 uint64_t kvm_hypercall(uint64_t nr, uint64_t a0, uint64_t a1, uint64_t a2,
                       uint64_t a3)
 {
-       uint64_t r;
-
-       asm volatile("test %[use_vmmcall], %[use_vmmcall]\n\t"
-                    "jnz 1f\n\t"
-                    "vmcall\n\t"
-                    "jmp 2f\n\t"
-                    "1: vmmcall\n\t"
-                    "2:"
-                    : "=a"(r)
-                    : "a"(nr), "b"(a0), "c"(a1), "d"(a2), "S"(a3),
-                      [use_vmmcall] "r" (host_cpu_is_amd));
-       return r;
+       return X86_HYPERCALL("a"(nr), "b"(a0), "c"(a1), "d"(a2), "S"(a3));
 }
 
 const struct kvm_cpuid2 *kvm_get_supported_hv_cpuid(void)