Re: [PATCHv2.1 05/29] x86/tdx: Add HLT support for TDX guests

From: Sean Christopherson
Date: Wed Feb 09 2022 - 13:06:02 EST


On Wed, Feb 09, 2022, Kirill A. Shutemov wrote:
> On Mon, Feb 07, 2022 at 10:52:19PM +0000, Sean Christopherson wrote:
> .Lskip_sti:
> tdcall
>
> /*
> * TDVMCALL leaf does not suppose to fail. If it fails something
> * is horribly wrong with TDX module. Stop the world.
> */
> test %rax, %rax
> je .Lsuccess
> ud2

If the ud2 or call to an external "do panic" helper is out-of-line, then the happy
path avoids a taken branch. Not a big deal, but it's also trivial to do.

> .Lsuccess:
> /* TDVMCALL leaf return code is in R10 */
> movq %r10, %rax
>
> /* Copy hypercall result registers to arg struct if needed */
> testq $TDX_HCALL_HAS_OUTPUT, %rsi
> jz .Lout
>
> movq %r10, TDX_HYPERCALL_r10(%rdi)
> movq %r11, TDX_HYPERCALL_r11(%rdi)
> movq %r12, TDX_HYPERCALL_r12(%rdi)
> movq %r13, TDX_HYPERCALL_r13(%rdi)
> movq %r14, TDX_HYPERCALL_r14(%rdi)
> movq %r15, TDX_HYPERCALL_r15(%rdi)
> .Lout:
> /*
> * Zero out registers exposed to the VMM to avoid
> * speculative execution with VMM-controlled values.
> * This needs to include all registers present in
> * TDVMCALL_EXPOSE_REGS_MASK (except R12-R15).
> * R12-R15 context will be restored.

This comment block should use the "full" 80 chars.

> */
> xor %r10d, %r10d
> xor %r11d, %r11d
>
> /* Restore callee-saved GPRs as mandated by the x86_64 ABI */
> pop %r12
> pop %r13
> pop %r14
> pop %r15
>
> FRAME_END
>
> retq
> SYM_FUNC_END(__tdx_hypercall)
> --
> Kirill A. Shutemov