On Wed, Jul 22, 2026 at 11:13:25PM +0000, Lisa Wang wrote:
> From: Erdem Aktas <[email protected]>
> 
> Implement the tdx_mmio_write() to allow TDX VMs to request MMIO
> emulation.
> 
> Follow the Intel Guest-Hypervisor Communication Interface (GHCI) spec
> to the minimum extent that a spec-abiding TDX module will pass the
> request to KVM. Skip implementing the #VE handler as described in the
> GHCI spec to reduce selftests dependency.
> 
> To perform emulated I/O, VMs use the TDG.VP.VMCALL instruction to
> request MMIO.
> 

[ ... ]

> diff --git a/tools/testing/selftests/kvm/include/x86/tdx/tdx.h 
> b/tools/testing/selftests/kvm/include/x86/tdx/tdx.h
> new file mode 100644
> index 000000000000..6355a30bb47f
> --- /dev/null
> +++ b/tools/testing/selftests/kvm/include/x86/tdx/tdx.h
> @@ -0,0 +1,17 @@
> +/* SPDX-License-Identifier: GPL-2.0-only */
> +#ifndef SELFTEST_KVM_TDX_TDX_H
> +#define SELFTEST_KVM_TDX_TDX_H
> +
> +#include <linux/types.h>
> +
> +#define TDG_VP_VMCALL_VE_REQUEST_MMIO    48
> +#define TDVMCALL_MMIO_WRITE            1

The indentation in these two lines is off. 

> +
> +u64 __tdcall(u64 leaf, u64 r12, u64 r13, u64 r14, u64 r15);

As Xiaoyao already pointed out, this function name is misleading. This
is a TDG.VP.VMCALL (or a TDVMCALL), and r11 is a subfunction (the guest
kernel simply calls it "fn").

> +
> +.globl __tdcall
> +/*
> + * u64 __tdcall(u64 leaf, u64 r12, u64 r13, u64 r14, u64 r15)
> + */
> +__tdcall:
> +     push %r12
> +     push %r13
> +     push %r14
> +     push %r15
> +
> +     /* Map C ABI fast arguments to TDX GHCI payload registers */
> +     /* RDI=leaf, RSI=r12, RDX=r13, RCX=r14, R8=r15 */

[ ... ]

> +
> +     pop %r15
> +     pop %r14
> +     pop %r13
> +     pop %r12
> +     ret

This is probably more of a nit... td_boot.S has:

  .section .note.GNU-stack,"",%progbits

...to disable executable stack. 

> 
> -- 
> 2.55.0.229.g6434b31f56-goog
> 
> 

Reply via email to