Messages in this thread | | | From | "Michael Kelley (LINUX)" <> | Subject | RE: [PATCH V2 9/9] x86/hyperv: Add hyperv-specific handling for VMMCALL under SEV-ES | Date | Tue, 4 Jul 2023 14:25:08 +0000 |
| |
From: Tianyu Lan <ltykernel@gmail.com> Sent: Monday, June 26, 2023 8:23 PM > > Add Hyperv-specific handling for faults caused by VMMCALL > instructions. > > Signed-off-by: Tianyu Lan <tiala@microsoft.com> > --- > 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@microsoft.com>
| |