mirror of
https://github.com/torvalds/linux.git
synced 2026-05-22 06:01:53 +02:00
KVM: selftests: Move the function doing Hyper-V hypercall to a common header
All Hyper-V specific tests issuing hypercalls need this. Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com> Reviewed-by: Sean Christopherson <seanjc@google.com> Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Message-Id: <20221101145426.251680-33-vkuznets@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
c05a0a71c5
commit
caf4110fba
|
|
@ -185,6 +185,25 @@
|
|||
/* hypercall options */
|
||||
#define HV_HYPERCALL_FAST_BIT BIT(16)
|
||||
|
||||
static inline uint8_t hyperv_hypercall(u64 control, vm_vaddr_t input_address,
|
||||
vm_vaddr_t output_address,
|
||||
uint64_t *hv_status)
|
||||
{
|
||||
uint64_t error_code;
|
||||
uint8_t vector;
|
||||
|
||||
/* Note both the hypercall and the "asm safe" clobber r9-r11. */
|
||||
asm volatile("mov %[output_address], %%r8\n\t"
|
||||
KVM_ASM_SAFE("vmcall")
|
||||
: "=a" (*hv_status),
|
||||
"+c" (control), "+d" (input_address),
|
||||
KVM_ASM_SAFE_OUTPUTS(vector, error_code)
|
||||
: [output_address] "r"(output_address),
|
||||
"a" (-EFAULT)
|
||||
: "cc", "memory", "r8", KVM_ASM_SAFE_CLOBBERS);
|
||||
return vector;
|
||||
}
|
||||
|
||||
/* Proper HV_X64_MSR_GUEST_OS_ID value */
|
||||
#define HYPERV_LINUX_OS_ID ((u64)0x8100 << 48)
|
||||
|
||||
|
|
|
|||
|
|
@ -13,24 +13,6 @@
|
|||
#include "processor.h"
|
||||
#include "hyperv.h"
|
||||
|
||||
static inline uint8_t hypercall(u64 control, vm_vaddr_t input_address,
|
||||
vm_vaddr_t output_address, uint64_t *hv_status)
|
||||
{
|
||||
uint64_t error_code;
|
||||
uint8_t vector;
|
||||
|
||||
/* Note both the hypercall and the "asm safe" clobber r9-r11. */
|
||||
asm volatile("mov %[output_address], %%r8\n\t"
|
||||
KVM_ASM_SAFE("vmcall")
|
||||
: "=a" (*hv_status),
|
||||
"+c" (control), "+d" (input_address),
|
||||
KVM_ASM_SAFE_OUTPUTS(vector, error_code)
|
||||
: [output_address] "r"(output_address),
|
||||
"a" (-EFAULT)
|
||||
: "cc", "memory", "r8", KVM_ASM_SAFE_CLOBBERS);
|
||||
return vector;
|
||||
}
|
||||
|
||||
struct msr_data {
|
||||
uint32_t idx;
|
||||
bool available;
|
||||
|
|
@ -80,7 +62,7 @@ static void guest_hcall(vm_vaddr_t pgs_gpa, struct hcall_data *hcall)
|
|||
input = output = 0;
|
||||
}
|
||||
|
||||
vector = hypercall(hcall->control, input, output, &res);
|
||||
vector = hyperv_hypercall(hcall->control, input, output, &res);
|
||||
if (hcall->ud_expected) {
|
||||
GUEST_ASSERT_2(vector == UD_VECTOR, hcall->control, vector);
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user