Re: [PATCH v4 00/12] Unify TDCALL/SEAMCALL and TDVMCALL assembly

Paolo Bonzini
2023-09-11T21:58:34Z

On 8/15/23 13:01, Kai Huang wrote:
> Hi Peter, Kirill,
>
> 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).
>
> Tested by booting TDX guest, initializing TDX module, and running TDX
> guest successfully, all with this series applied.

Not sure it if's new in this version but I'm seeing

WARNING: modpost: EXPORT symbol "__seamcall_ret" [vmlinux] version ...
Is "__seamcall_ret" prototyped in <asm/asm-prototypes.h>?
WARNING: modpost: EXPORT symbol "__seamcall" [vmlinux] version ...
Is "__seamcall" prototyped in <asm/asm-prototypes.h>?
WARNING: modpost: EXPORT symbol "__seamcall_saved_ret" [vmlinux] version ...
Is "__seamcall_saved_ret" prototyped in <asm/asm-prototypes.h>?

which is fixed by

diff --git a/arch/x86/include/asm/asm-prototypes.h b/arch/x86/include/asm/asm-prototypes.h
index 8f80de627c60..eff5252e9c86 100644
--- a/arch/x86/include/asm/asm-prototypes.h
+++ b/arch/x86/include/asm/asm-prototypes.h
@@ -6,6 +6,7 @@
#include <asm/page.h>
#include <asm/checksum.h>
#include <asm/mce.h>
+#include <asm/tdx.h>

#include <asm-generic/asm-prototypes.h>

Paolo

> ------- Histroy --------
>
> v3 -> v4:
>
> - Addressed Kirill's minor comments
> - Collected Reviewed-by tags from Kirill/Sathy.
> - Collected Isaku's Tested-by tag.
> - Removed unneeded header file inclusion in tdcall.S in the relevant
> two patches.
> - Rebased to latest tip/x86/tdx (v6.5-rc5).
>
> v3: https://lore.kernel.org/lkml/20230806114131.2ilofgmxhdaa2u6b@box.shutemov.name/T/
>
> 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: Make TDX_MODULE_CALL handle SEAMCALL #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 | 234 ++++--------------------------
> arch/x86/coco/tdx/tdx-shared.c | 28 +++-
> arch/x86/coco/tdx/tdx.c | 71 +++++----
> 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 | 230 ++++++++++++++++++++++-------
> 14 files changed, 435 insertions(+), 351 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: 52a93d39b17dc7eb98b6aa3edb93943248e03b2f