Messages in this thread | | | From | Kai Huang <> | Subject | [PATCH v3 00/12] Unify TDCALL/SEAMCALL and TDVMCALL assembly | Date | Wed, 26 Jul 2023 23:25:02 +1200 |
| |
Hi Peter, Kirill, all,
This series unifies the assembly code for TDCALL/SEAMCALL and TDVMCALL. Now all of them use one singe TDX_MODULE_CALL asm macro. More information please see cover letter of v2 (see link below).
This version mainly addressed Peter's comment to add patch to adjust 'struct tdx_module_args' to match KVM's "vcpu::regs".
Tested by booting TDX guest, initializing TDX module, and running TDX guest successfully, all with this series applied.
------- Histroy --------
v2 -> v3:
- New patch (patch 12) to adjust 'struct tdx_module_args' layout to match KVM's "vcpu::regs[]" for VP.ENTER. (Peter) - Added __seamcall_saved_ret() wrapper to support VP.ENTER (merged to patch 10). - Fixed a 'noinstr' check build regression found by LKP (patch 7). - Rebased to latest Linus's tree (6.5-rc3 + 2 commits).
v2: https://lore.kernel.org/lkml/a23ce8fd289141cea3a1b4f3dace221dca847238.camel@intel.com/T/
v1 -> v2: - Rebased to 6.5-rc2. - Fixed comments from Peter and others. - Split patch "x86/tdx: Unify TDX_HYPERCALL and TDX_MODULE_CALL assembly" into three smaller patches for better review. - A new patch to skip saving output registers when SEAMCALL fails due to VMFailInvalid. - Removed patch "x86/tdx: Use cmovc to save a label in TDX_MODULE_CALL asm" - Merged patch "x86/tdx: Move FRAME_BEGIN/END to TDX_MODULE_CALL asm macro" to the new patch mentioned above.
v1: https://lore.kernel.org/lkml/b95c4169-88c8-219e-87b7-6c4e058c246a@suse.com/T/
Kai Huang (12): x86/tdx: Zero out the missing RSI in TDX_HYPERCALL macro x86/tdx: Skip saving output regs when SEAMCALL fails with VMFailInvalid x86/tdx: Make macros of TDCALLs consistent with the spec x86/tdx: Rename __tdx_module_call() to __tdcall() x86/tdx: Pass TDCALL/SEAMCALL input/output registers via a structure x86/tdx: Extend TDX_MODULE_CALL to support more TDCALL/SEAMCALL leafs x86/tdx: Make TDX_HYPERCALL asm similar to TDX_MODULE_CALL x86/tdx: Reimplement __tdx_hypercall() using TDX_MODULE_CALL asm x86/tdx: Remove 'struct tdx_hypercall_args' x86/virt/tdx: Wire up basic SEAMCALL functions x86/virt/tdx: Allow SEAMCALL to handle #UD and #GP x86/virt/tdx: Adjust 'struct tdx_module_args' to use x86 "register index" layout
arch/x86/Kconfig | 12 ++ arch/x86/Makefile | 2 + arch/x86/boot/compressed/tdx.c | 6 +- arch/x86/coco/tdx/tdcall.S | 231 ++++-------------------------- arch/x86/coco/tdx/tdx-shared.c | 28 +++- arch/x86/coco/tdx/tdx.c | 69 +++++---- arch/x86/include/asm/shared/tdx.h | 92 +++++++----- arch/x86/include/asm/tdx.h | 11 ++ arch/x86/kernel/asm-offsets.c | 33 ++--- arch/x86/virt/Makefile | 2 + arch/x86/virt/vmx/Makefile | 2 + arch/x86/virt/vmx/tdx/Makefile | 2 + arch/x86/virt/vmx/tdx/seamcall.S | 61 ++++++++ arch/x86/virt/vmx/tdx/tdxcall.S | 227 ++++++++++++++++++++++------- 14 files changed, 433 insertions(+), 345 deletions(-) create mode 100644 arch/x86/virt/Makefile create mode 100644 arch/x86/virt/vmx/Makefile create mode 100644 arch/x86/virt/vmx/tdx/Makefile create mode 100644 arch/x86/virt/vmx/tdx/seamcall.S
base-commit: 18b44bc5a67275641fb26f2c54ba7eef80ac5950 -- 2.41.0
| |