From: Tianyu Lan <ltykernel@xxxxxxxxx> Sent: Monday, June 26, 2023 8:23 PM > > Add Hyperv-specific handling for faults caused by VMMCALL > instructions. > > Signed-off-by: Tianyu Lan <tiala@xxxxxxxxxxxxx> > --- > arch/x86/kernel/cpu/mshyperv.c | 17 +++++++++++++++++ > 1 file changed, 17 insertions(+) > > diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c > index 8e1d9ed6a1e0..ba9a3a65f664 100644 > --- a/arch/x86/kernel/cpu/mshyperv.c > +++ b/arch/x86/kernel/cpu/mshyperv.c > @@ -32,6 +32,7 @@ > #include <asm/nmi.h> > #include <clocksource/hyperv_timer.h> > #include <asm/numa.h> > +#include <asm/svm.h> > > /* Is Linux running as the root partition? */ > bool hv_root_partition; > @@ -577,6 +578,20 @@ static bool __init ms_hyperv_msi_ext_dest_id(void) > return eax & HYPERV_VS_PROPERTIES_EAX_EXTENDED_IOAPIC_RTE; > } > > +static void hv_sev_es_hcall_prepare(struct ghcb *ghcb, struct pt_regs *regs) > +{ > + /* RAX and CPL are already in the GHCB */ > + ghcb_set_rcx(ghcb, regs->cx); > + ghcb_set_rdx(ghcb, regs->dx); > + ghcb_set_r8(ghcb, regs->r8); > +} > + > +static bool hv_sev_es_hcall_finish(struct ghcb *ghcb, struct pt_regs *regs) > +{ > + /* No checking of the return state needed */ > + return true; > +} > + > const __initconst struct hypervisor_x86 x86_hyper_ms_hyperv = { > .name = "Microsoft Hyper-V", > .detect = ms_hyperv_platform, > @@ -584,4 +599,6 @@ const __initconst struct hypervisor_x86 x86_hyper_ms_hyperv > = { > .init.x2apic_available = ms_hyperv_x2apic_available, > .init.msi_ext_dest_id = ms_hyperv_msi_ext_dest_id, > .init.init_platform = ms_hyperv_init_platform, > + .runtime.sev_es_hcall_prepare = hv_sev_es_hcall_prepare, > + .runtime.sev_es_hcall_finish = hv_sev_es_hcall_finish, > }; > -- > 2.25.1 Reviewed-by: Michael Kelley <mikelley@xxxxxxxxxxxxx>