Re: [PATCH v3 06/12] x86/tdx: Extend TDX_MODULE_CALL to support more TDCALL/SEAMCALL leafs

From: kirill . shutemov
Date: Thu Jul 27 2023 - 12:51:10 EST


On Wed, Jul 26, 2023 at 11:25:08PM +1200, Kai Huang wrote:
> @@ -64,6 +103,37 @@
> .endif
>
> .if \ret
> +.if \saved
> + /*
> + * Restore the structure from stack to save the output registers
> + *
> + * In case of VP.ENTER returns due to TDVMCALL, all registers are
> + * valid thus no register can be used as spare to restore the
> + * structure from the stack (see "TDH.VP.ENTER Output Operands
> + * Definition on TDCALL(TDG.VP.VMCALL) Following a TD Entry").
> + * For this case, need to make one register as spare by saving it
> + * to the stack and then manually load the structure pointer to
> + * the spare register.
> + *
> + * Note for other TDCALLs/SEAMCALLs there are spare registers
> + * thus no need for such hack but just use this for all.
> + */
> + pushq %rax /* save the TDCALL/SEAMCALL return code */
> + movq 8(%rsp), %rax /* restore the structure pointer */
> + movq %rsi, TDX_MODULE_rsi(%rax) /* save %rsi */
> + movq %rax, %rsi /* use %rsi as structure pointer */

This looks redundant. You get struct in RSI with popq two lines below.

And please use upper case for registers: RSI instead of %rsi.

> + popq %rax /* restore the return code */
> + popq %rsi /* pop the structure pointer */
> +
> + /* Copy additional output regs to the structure */
> + movq %r12, TDX_MODULE_r12(%rsi)
> + movq %r13, TDX_MODULE_r13(%rsi)
> + movq %r14, TDX_MODULE_r14(%rsi)
> + movq %r15, TDX_MODULE_r15(%rsi)
> + movq %rbx, TDX_MODULE_rbx(%rsi)
> + movq %rdi, TDX_MODULE_rdi(%rsi)
> +.endif /* \saved */
> +
> /* Copy output registers to the structure */
> movq %rcx, TDX_MODULE_rcx(%rsi)
> movq %rdx, TDX_MODULE_rdx(%rsi)

Otherwise, looks sane:

Reviewed-by: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx>

--
Kiryl Shutsemau / Kirill A. Shutemov