• Kai Huang's avatar
    x86/tdx: Extend TDX_MODULE_CALL to support more TDCALL/SEAMCALL leafs · 12f34ed8
    Kai Huang authored
    The TDX guest live migration support (TDX 1.5) adds new TDCALL/SEAMCALL
    leaf functions.  Those new TDCALLs/SEAMCALLs take additional registers
    for input (R10-R13) and output (R12-R13).  TDG.SERVTD.RD is an example.
    
    Also, the current TDX_MODULE_CALL doesn't aim to handle TDH.VP.ENTER
    SEAMCALL, which monitors the TDG.VP.VMCALL in input/output registers
    when it returns in case of VMCALL from TDX guest.
    
    With those new TDCALLs/SEAMCALLs and the TDH.VP.ENTER covered, the
    TDX_MODULE_CALL macro basically needs to handle the same input/output
    registers as the TDX_HYPERCALL does.  And as a result, they also share
    similar logic in the assembly, thus should be unified to use one common
    assembly.
    
    Extend the TDX_MODULE_CALL asm to support the new TDCALLs/SEAMCALLs and
    also the TDH.VP.ENTER SEAMCALL.  Eventually it will be unified with the
    TDX_HYPERCALL.
    
    The new input/output registers fit with the "callee-saved" registers in
    the x86 calling convention.  Add a new "saved" parameter to support
    those new TDCALLs/SEAMCALLs and TDH.VP.ENTER and keep the existing
    TDCALLs/SEAMCALLs minimally impacted.
    
    For TDH.VP.ENTER, after it returns the registers shared by the guest
    contain guest's values.  Explicitly clear them to prevent speculative
    use of guest's values.
    
    Note most TDX live migration related SEAMCALLs may also clobber AVX*
    state ("AVX, AVX2 and AVX512 state: may be reset to the architectural
    INIT state" -- see TDH.EXPORT.MEM for example).  And TDH.VP.ENTER also
    clobbers XMM0-XMM15 when the corresponding bit is set in RCX.  Don't
    handle them in the TDX_MODULE_CALL macro but let the caller save and
    restore when needed.
    
    This is basically based on Peter's code.
    Suggested-by: default avatarPeter Zijlstra <peterz@infradead.org>
    Signed-off-by: default avatarKai Huang <kai.huang@intel.com>
    Signed-off-by: default avatarDave Hansen <dave.hansen@linux.intel.com>
    Reviewed-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lore.kernel.org/all/d4785de7c392f7c5684407f6c24a73b92148ec49.1692096753.git.kai.huang%40intel.com
    12f34ed8
tdxcall.S 5.6 KB