mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "Edgecombe, Rick P" <rick.p.edgecombe@intel.com>
To: "linux-coco@lists.linux.dev" <linux-coco@lists.linux.dev>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"Duan, Zhenzhong" <zhenzhong.duan@intel.com>,
	"x86@kernel.org" <x86@kernel.org>
Cc: "Li, Xiaoyao" <xiaoyao.li@intel.com>,
	"Hansen, Dave" <dave.hansen@intel.com>,
	"dave.hansen@linux.intel.com" <dave.hansen@linux.intel.com>,
	"kas@kernel.org" <kas@kernel.org>,
	"mingo@redhat.com" <mingo@redhat.com>,
	"seanjc@google.com" <seanjc@google.com>,
	"pbonzini@redhat.com" <pbonzini@redhat.com>,
	"Peng, Chao P" <chao.p.peng@intel.com>,
	"Verma, Vishal L" <vishal.l.verma@intel.com>,
	"jgg@nvidia.com" <jgg@nvidia.com>,
	"aneesh.kumar@kernel.org" <aneesh.kumar@kernel.org>,
	"Tian, Kevin" <kevin.tian@intel.com>,
	"hpa@zytor.com" <hpa@zytor.com>,
	"tglx@kernel.org" <tglx@kernel.org>,
	"nicolinc@nvidia.com" <nicolinc@nvidia.com>,
	"bp@alien8.de" <bp@alien8.de>, "Gao, Chao" <chao.gao@intel.com>,
	"aik@amd.com" <aik@amd.com>,
	"yilun.xu@linux.intel.com" <yilun.xu@linux.intel.com>
Subject: Re: [RFC PATCH 08/15] x86/tdx: Add TDG.MMIO.ACCEPT module call wrapper for TDX Connect
Date: Thu, 24 Sep 2026 23:41:56 +0000	[thread overview]
Message-ID: <3d38cbbd51f8e75d5a3886ca203447fd19a3dad1.camel@intel.com> (raw)
In-Reply-To: <20260924041032.1096569-9-zhenzhong.duan@intel.com>

On Thu, 2026-09-24 at 12:10 +0800, Zhenzhong Duan wrote:
> TDG.MMIO.ACCEPT verifies and accepts a pending private MMIO range for
> a trusted device.
> 
> The MMIO range to be accepted can be a sub-range of the MMIO ranges
> originally defined in the Device Interface Report. Because the TDX
> module caches these ranges from the Device Interface Report, the guest
> does not need to pass the explicit physical start and end addresses of
> the MMIO range. Instead, it only needs to provide the target MMIO
> range index, the offset within that range, and the size to be accepted.
> 
> Translate TDX module return codes into Linux errno values.
> 
> Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com>

We are going to need a lot more info about what this TDG call is doing. Look at
the host side seamcall wrapper commits for examples.

> ---
>  arch/x86/coco/tdx/tdx_connect.c   | 38 +++++++++++++++++++++++++++++++
>  arch/x86/include/asm/shared/tdx.h |  1 +
>  arch/x86/include/asm/tdx.h        |  1 +
>  3 files changed, 40 insertions(+)
> 
> diff --git a/arch/x86/coco/tdx/tdx_connect.c b/arch/x86/coco/tdx/tdx_connect.c
> index 1409b1a30cc6..09a92fe23357 100644
> --- a/arch/x86/coco/tdx/tdx_connect.c
> +++ b/arch/x86/coco/tdx/tdx_connect.c
> @@ -71,3 +71,41 @@ int tdx_mcall_tdi_read(u64 func_id, u64 field, u64 *value)
>  	return tdx_mcall_tdi_to_errno(ret);
>  }
>  EXPORT_SYMBOL_FOR_MODULES(tdx_mcall_tdi_read, "tdx-guest");
> +
> +/**
> + * tdx_mcall_mmio_accept() - Accept a pending private MMIO mapping of a
> + *                           Trust Device Interface (TDI) instance
> + * @func_id: Function identifier specifying the TDI instance
> + * @index: MMIO range index from the Device Interface Report
> + * @pg_offset: Range offset to start accepting the subrange from, in pages
> + * @page_cnt: Count of pages to accept
> + * @gpa: GPA base address the subrange mapped to
> + *
> + * Verify and accept a pending private MMIO mapping. Upon success, the MMIO
> + * pages are set as mapped in the TDX module.
> + *
> + * Return 0 on success, -EINVAL for unaligned GPA, -ENXIO for invalid operands,
> + * -EBUSY for busy operation, -ENODEV for TDI not present or invalid metadata,
> + * or -EIO on other TDCALL failures.
> + *
> + */
> +int tdx_mcall_mmio_accept(u64 func_id, u64 index, u32 pg_offset, u32 page_cnt, phys_addr_t gpa)
> +{

offset is 0 for all callers in this series. So I'd think to drop it unless there
is some other code coming very very soon.

Can we turn some of these others into proper types? Why not pass struct
pci_tsm_mmio_entry or struct pci_dev pointers instead of raw unsigned ints?

Actually, the only caller just accepts the whole pci_tsm_mmio_entry, so you just
need:

int tdx_mcall_mmio_accept(struct pci_dev *dev, struct pci_tsm_mmio_entry *entry)

What do you think?

> +	struct tdx_module_args args = {
> +		.rcx = gpa | TDX_PS_4K,

Always 4KB? Needs an explanation in the log at least.

> +		.rdx = index,
> +		.r8 = func_id,
> +		.r9 = (u64)pg_offset << 32 | page_cnt,
> +	};
> +	u64 ret;
> +
> +	if (!IS_ALIGNED(gpa, PAGE_SIZE))
> +		return -EINVAL;
> +
> +	ret = __tdcall_ret(TDG_MMIO_ACCEPT, &args);
> +	if (!ret)
> +		return 0;
> +
> +	return tdx_mcall_tdi_to_errno(ret);
> +}
> +EXPORT_SYMBOL_FOR_MODULES(tdx_mcall_mmio_accept, "tdx-guest");
> diff --git a/arch/x86/include/asm/shared/tdx.h b/arch/x86/include/asm/shared/tdx.h
> index 499103f7a01b..ce80fb2116fb 100644
> --- a/arch/x86/include/asm/shared/tdx.h
> +++ b/arch/x86/include/asm/shared/tdx.h
> @@ -21,6 +21,7 @@
>  #define TDG_VM_RD			7
>  #define TDG_VM_WR			8
>  #define TDG_TDI_READ			67
> +#define TDG_MMIO_ACCEPT			71
>  
>  /* TDX TD attributes */
>  #define TDX_TD_ATTR_DEBUG_BIT		0
> diff --git a/arch/x86/include/asm/tdx.h b/arch/x86/include/asm/tdx.h
> index 71cd701d346f..e6493f3bc0d1 100644
> --- a/arch/x86/include/asm/tdx.h
> +++ b/arch/x86/include/asm/tdx.h
> @@ -155,6 +155,7 @@ struct tdcm_rsp_check_teeio_supp {
>  
>  u64 tdx_hcall_tdcm(u16 devid, void *buf, size_t size, u8 vector);
>  int tdx_mcall_tdi_read(u64 func_id, u64 field, u64 *value);
> +int tdx_mcall_mmio_accept(u64 func_id, u64 index, u32 pg_offset, u32 page_cnt, phys_addr_t gpa);
>  #endif
>  
>  void __init tdx_dump_attributes(u64 td_attr);


  reply	other threads:[~2026-09-24 23:41 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-24  4:10 [RFC PATCH 00/15] PCI/TSM: coco/tdx-guest: Implement TDX-Connect PCIe TDISP (phase2) Zhenzhong Duan
2026-09-24  4:10 ` [RFC PATCH 01/15] x86/tdx: Export tdg_vm_rd() for tdx-guest module Zhenzhong Duan
2026-09-24  4:10 ` [RFC PATCH 02/15] x86/tdx: Add TDCM hypercall wrapper for TDX Connect Zhenzhong Duan
2026-09-24  4:10 ` [RFC PATCH 03/15] x86/tdx: Add TDG.TDI.RD module call " Zhenzhong Duan
2026-09-25  0:06   ` Edgecombe, Rick P
2026-09-24  4:10 ` [RFC PATCH 04/15] virt: tdx-guest: Support devsec TSM for secure devices Zhenzhong Duan
2026-09-24  4:10 ` [RFC PATCH 05/15] virt: tdx-guest: Add TDCM helpers and TEE-IO support check Zhenzhong Duan
2026-09-24  4:10 ` [RFC PATCH 06/15] virt: tdx-guest: Support TDI bind and unbind operations Zhenzhong Duan
2026-09-24  4:10 ` [RFC PATCH 07/15] PCI/TSM: Track Device Interface Report MMIO range index Zhenzhong Duan
2026-09-24  4:10 ` [RFC PATCH 08/15] x86/tdx: Add TDG.MMIO.ACCEPT module call wrapper for TDX Connect Zhenzhong Duan
2026-09-24 23:41   ` Edgecombe, Rick P [this message]
2026-09-25  0:02     ` Edgecombe, Rick P
2026-09-24  4:10 ` [RFC PATCH 09/15] virt: tdx-guest: Capture the TDI report during device lock Zhenzhong Duan
2026-09-24  4:10 ` [RFC PATCH 10/15] virt: tdx-guest: Set up and accept private MMIO ranges Zhenzhong Duan
2026-09-24  4:10 ` [RFC PATCH 11/15] x86/tdx: Add TDG.TDI.START module call wrapper for TDX Connect Zhenzhong Duan
2026-09-24  4:10 ` [RFC PATCH 12/15] virt: tdx-guest: Support Trust Device Interface (TDI) activation Zhenzhong Duan
2026-09-24  4:10 ` [RFC PATCH 13/15] x86/tdx: Add __tdcall_saved() helper Zhenzhong Duan
2026-09-24  4:10 ` [RFC PATCH 14/15] x86/tdx: Add TDG.DMAR.ACCEPT module call wrapper for TDX Connect Zhenzhong Duan
2026-09-24  4:10 ` [RFC PATCH 15/15] virt: tdx-guest: Accept default DMAR entry during PCI driver attach Zhenzhong Duan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3d38cbbd51f8e75d5a3886ca203447fd19a3dad1.camel@intel.com \
    --to=rick.p.edgecombe@intel.com \
    --cc=aik@amd.com \
    --cc=aneesh.kumar@kernel.org \
    --cc=bp@alien8.de \
    --cc=chao.gao@intel.com \
    --cc=chao.p.peng@intel.com \
    --cc=dave.hansen@intel.com \
    --cc=dave.hansen@linux.intel.com \
    --cc=hpa@zytor.com \
    --cc=jgg@nvidia.com \
    --cc=kas@kernel.org \
    --cc=kevin.tian@intel.com \
    --cc=linux-coco@lists.linux.dev \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=nicolinc@nvidia.com \
    --cc=pbonzini@redhat.com \
    --cc=seanjc@google.com \
    --cc=tglx@kernel.org \
    --cc=vishal.l.verma@intel.com \
    --cc=x86@kernel.org \
    --cc=xiaoyao.li@intel.com \
    --cc=yilun.xu@linux.intel.com \
    --cc=zhenzhong.duan@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®