Change 'jnc .Lno_vmfailinvalid' to 'cmovc %rdi, %rax' to save the .Lno_vmfailinvalid label in the TDX_MODULE_CALL asm macro. Note %rdi, which is used as the first argument, has been saved to %rax as TDCALL leaf ID thus is free to hold the error code for cmovc. This is basically based on Peter's code. Cc: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx> Cc: Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx> Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx> Suggested-by: Peter Zijlstra <peterz@xxxxxxxxxxxxx> Signed-off-by: Kai Huang <kai.huang@xxxxxxxxx> --- arch/x86/virt/vmx/tdx/tdxcall.S | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/arch/x86/virt/vmx/tdx/tdxcall.S b/arch/x86/virt/vmx/tdx/tdxcall.S index 49a54356ae99..3524915d8bd9 100644 --- a/arch/x86/virt/vmx/tdx/tdxcall.S +++ b/arch/x86/virt/vmx/tdx/tdxcall.S @@ -57,10 +57,8 @@ * This value will never be used as actual SEAMCALL error code as * it is from the Reserved status code class. */ - jnc .Lno_vmfailinvalid - mov $TDX_SEAMCALL_VMFAILINVALID, %rax -.Lno_vmfailinvalid: - + mov $TDX_SEAMCALL_VMFAILINVALID, %rdi + cmovc %rdi, %rax .else tdcall .endif -- 2.41.0