x86/virt/tdx: Wire up basic SEAMCALL functions
authorKai Huang <kai.huang@intel.com>
Tue, 15 Aug 2023 11:02:04 +0000 (23:02 +1200)
committerDave Hansen <dave.hansen@linux.intel.com>
Tue, 12 Sep 2023 23:30:27 +0000 (16:30 -0700)
commitc33621b4c5ad5b6b8b245754013cc506f9ded2b8
treefc8ebbc1b03ce255c0f53dbb3f55cb9ceb87af73
parent8a8544bde858e5d62d79df6baaa387e0b6587dc7
x86/virt/tdx: Wire up basic SEAMCALL functions

Intel Trust Domain Extensions (TDX) protects guest VMs from malicious
host and certain physical attacks.  A CPU-attested software module
called 'the TDX module' runs inside a new isolated memory range as a
trusted hypervisor to manage and run protected VMs.

TDX introduces a new CPU mode: Secure Arbitration Mode (SEAM).  This
mode runs only the TDX module itself or other code to load the TDX
module.

The host kernel communicates with SEAM software via a new SEAMCALL
instruction.  This is conceptually similar to a guest->host hypercall,
except it is made from the host to SEAM software instead.  The TDX
module establishes a new SEAMCALL ABI which allows the host to
initialize the module and to manage VMs.

The SEAMCALL ABI is very similar to the TDCALL ABI and leverages much
TDCALL infrastructure.  Wire up basic functions to make SEAMCALLs for
the basic support of running TDX guests: __seamcall(), __seamcall_ret(),
and __seamcall_saved_ret() for TDH.VP.ENTER.  All SEAMCALLs involved in
the basic TDX support don't use "callee-saved" registers as input and
output, except the TDH.VP.ENTER.

To start to support TDX, create a new arch/x86/virt/vmx/tdx/tdx.c for
TDX host kernel support.  Add a new Kconfig option CONFIG_INTEL_TDX_HOST
to opt-in TDX host kernel support (to distinguish with TDX guest kernel
support).  So far only KVM uses TDX.  Make the new config option depend
on KVM_INTEL.

Signed-off-by: Kai Huang <kai.huang@intel.com>
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
Reviewed-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Tested-by: Isaku Yamahata <isaku.yamahata@intel.com>
Link: https://lore.kernel.org/all/4db7c3fc085e6af12acc2932294254ddb3d320b3.1692096753.git.kai.huang%40intel.com
arch/x86/Kconfig
arch/x86/Makefile
arch/x86/include/asm/tdx.h
arch/x86/virt/Makefile [new file with mode: 0644]
arch/x86/virt/vmx/Makefile [new file with mode: 0644]
arch/x86/virt/vmx/tdx/Makefile [new file with mode: 0644]
arch/x86/virt/vmx/tdx/seamcall.S [new file with mode: 0644]