[RFC PATCH 65/73] x86/kvm: Patch KVM hypercall as PVM hypercall

From: Lai Jiangshan
Date: Mon Feb 26 2024 - 10:20:00 EST


From: Lai Jiangshan <jiangshan.ljs@xxxxxxxxxxxx>

Modify the KVM_HYPERCALL macro to enable patching the KVM hypercall as a
PVM hypercall. Note that this modification will increase the size by two
bytes for each KVM hypercall instruction.

Signed-off-by: Lai Jiangshan <jiangshan.ljs@xxxxxxxxxxxx>
Signed-off-by: Hou Wenlong <houwenlong.hwl@xxxxxxxxxxxx>
---
arch/x86/include/asm/kvm_para.h | 7 +++++++
1 file changed, 7 insertions(+)

diff --git a/arch/x86/include/asm/kvm_para.h b/arch/x86/include/asm/kvm_para.h
index 57bc74e112f2..1a322b684146 100644
--- a/arch/x86/include/asm/kvm_para.h
+++ b/arch/x86/include/asm/kvm_para.h
@@ -2,6 +2,7 @@
#ifndef _ASM_X86_KVM_PARA_H
#define _ASM_X86_KVM_PARA_H

+#include <asm/pvm_para.h>
#include <asm/processor.h>
#include <asm/alternative.h>
#include <linux/interrupt.h>
@@ -18,8 +19,14 @@ static inline bool kvm_check_and_clear_guest_paused(void)
}
#endif /* CONFIG_KVM_GUEST */

+#ifdef CONFIG_PVM_GUEST
+#define KVM_HYPERCALL \
+ ALTERNATIVE_2("vmcall", "vmmcall", X86_FEATURE_VMMCALL, \
+ "call pvm_hypercall", X86_FEATURE_KVM_PVM_GUEST)
+#else
#define KVM_HYPERCALL \
ALTERNATIVE("vmcall", "vmmcall", X86_FEATURE_VMMCALL)
+#endif /* CONFIG_PVM_GUEST */

/* For KVM hypercalls, a three-byte sequence of either the vmcall or the vmmcall
* instruction. The hypervisor may replace it with something else but only the
--
2.19.1.6.gb485710b