mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-05 10:04:12 +08:00
KVM: selftests: Move the guts of kvm_hypercall() to a separate macro
Extract the guts of kvm_hypercall() to a macro so that Xen hypercalls, which have a different register ABI, can reuse the VMCALL vs. VMMCALL logic. No functional change intended. Signed-off-by: Sean Christopherson <seanjc@google.com> Message-Id: <20230204024151.1373296-2-seanjc@google.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
c281794eaa
commit
4009e0bb7b
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user