Instead of relying on KVM to patch VMCALL into VMMCALL on non-Intel systems, use the native instruction directly. Signed-off-by: Mathias Krause --- x86/apic.c | 5 ++++- x86/vmexit.c | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/x86/apic.c b/x86/apic.c index b45fc9c1b72f..0a52e9a45f1c 100644 --- a/x86/apic.c +++ b/x86/apic.c @@ -641,7 +641,10 @@ static void test_pv_ipi(void) if (!test_device_enabled()) return; - asm volatile("vmcall" : "=a"(ret) :"a"(KVM_HC_SEND_IPI), "b"(a0), "c"(a1), "d"(a2), "S"(a3)); + if (is_intel()) + asm volatile("vmcall" : "=a"(ret) :"a"(KVM_HC_SEND_IPI), "b"(a0), "c"(a1), "d"(a2), "S"(a3)); + else + asm volatile("vmmcall" : "=a"(ret) :"a"(KVM_HC_SEND_IPI), "b"(a0), "c"(a1), "d"(a2), "S"(a3)); report(!ret, "PV IPIs testing"); } diff --git a/x86/vmexit.c b/x86/vmexit.c index 48a38f60f6d6..56c37f6215ca 100644 --- a/x86/vmexit.c +++ b/x86/vmexit.c @@ -33,7 +33,10 @@ static void vmcall(void) { unsigned long a = 0, b, c, d; - asm volatile ("vmcall" : "+a"(a), "=b"(b), "=c"(c), "=d"(d)); + if (is_intel()) + asm volatile ("vmcall" : "+a"(a), "=b"(b), "=c"(c), "=d"(d)); + else + asm volatile ("vmmcall" : "+a"(a), "=b"(b), "=c"(c), "=d"(d)); } #define MSR_EFER 0xc0000080 -- 2.30.2