Messages in this thread | | | Date | Wed, 23 Nov 2022 08:03:33 -0800 | Subject | Re: [PATCH 1/6] x86/tdx: Support hypercalls for TDX guests on Hyper-V | From | Dave Hansen <> |
| |
On 11/22/22 17:37, Dexuan Cui wrote: >> From: Dave Hansen <dave.hansen@intel.com> >> Sent: Monday, November 21, 2022 12:39 PM >> [...] >> On 11/21/22 11:51, Dexuan Cui wrote: >>> __tdx_hypercall() doesn't work for a TDX guest running on Hyper-V, >>> because Hyper-V uses a different calling convention, so add the >>> new function __tdx_ms_hv_hypercall(). >> >> Other than R10 being variable here and fixed for __tdx_hypercall(), this >> looks *EXACTLY* the same as __tdx_hypercall(), or at least a strict >> subset of what __tdx_hypercall() can do. >> >> Did I miss something? > > The existing asm code for __tdx_hypercall() passes through R10~R15 > (see TDVMCALL_EXPOSE_REGS_MASK) to the (KVM) hypervisor. > > Unluckily, for Hyper-V, we need to pass through RDX, R8, R10 and R11 > to Hyper-V, so I don't think I can use the existing __tdx_hypercall() ?
What's to prevent you from adding RDX and R8? You could make TDVMCALL_EXPOSE_REGS_MASK a macro argument.
Look at 'has_erro_code', for instance in "idtentry_body" arch/x86/entry/entry_64.S.
>> Another way of saying this: It seems like you could do this with a new >> version of _tdx_hypercall() (and all in C) instead of a new >> __tdx_hypercall(). > > I don't think the current TDVMCALL_EXPOSE_REGS_MASK allows me > to pass through RDX and R8 to Hyper-V.
Right. So pass it in.
> PS, the comment before __tdx_hypercall() contains this line: > > "* RBX, RBP, RDI, RSI - Used to pass VMCALL sub function specific > arguments." > > But it looks like currently RBX an RBP are not used at all in > arch/x86/coco/tdx/tdcall.S ?
Yeah, it looks like they are a part of the hypercall ABI but no existing hypercall is using them. Patches to fix it accepted. :)
| |