Messages in this thread | | | Date | Thu, 27 Jul 2023 19:50:57 +0300 | From | kirill.shutemov@linux ... | Subject | Re: [PATCH v3 06/12] x86/tdx: Extend TDX_MODULE_CALL to support more TDCALL/SEAMCALL leafs |
| |
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@linux.intel.com>
-- Kiryl Shutsemau / Kirill A. Shutemov
| |