On Fri Dec 1, 2023 at 4:32 PM UTC, Sean Christopherson wrote: > On Fri, Dec 01, 2023, Nicolas Saenz Julienne wrote: > > > To support this I think that we can add a userspace msr filter on the HV_X64_MSR_HYPERCALL, > > > although I am not 100% sure if a userspace msr filter overrides the in-kernel msr handling. > > > > I thought about it at the time. It's not that simple though, we should > > still let KVM set the hypercall bytecode, and other quirks like the Xen > > one. > > Yeah, that Xen quirk is quite the killer. > > Can you provide pseudo-assembly for what the final page is supposed to look like? > I'm struggling mightily to understand what this is actually trying to do. I'll make it as simple as possible (diregard 32bit support and that xen exists): vmcall <- Offset 0, regular Hyper-V hypercalls enter here ret mov rax,rcx <- VTL call hypercall enters here mov rcx,0x11 vmcall ret mov rax,rcx <- VTL return hypercall enters here mov rcx,0x12 vmcall ret rcx needs to be saved as it contains a "VTL call control input to the hypervisor" (TLFS 15.6.1). I don't remember seeing it being used in practice. Then, KVM expects the hypercall code in rcx, hence the 0x11/0x12 mov. Nicolas