From: "Duan, Zhenzhong" <zhenzhong.duan@intel.com>
To: Nikolay Borisov <nik.borisov@suse.com>,
"x86@kernel.org" <x86@kernel.org>,
"linux-coco@lists.linux.dev" <linux-coco@lists.linux.dev>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Cc: "dave.hansen@linux.intel.com" <dave.hansen@linux.intel.com>,
"tglx@kernel.org" <tglx@kernel.org>,
"mingo@redhat.com" <mingo@redhat.com>,
"bp@alien8.de" <bp@alien8.de>, "hpa@zytor.com" <hpa@zytor.com>,
"Hansen, Dave" <dave.hansen@intel.com>,
"kas@kernel.org" <kas@kernel.org>,
"Edgecombe, Rick P" <rick.p.edgecombe@intel.com>,
"jgg@nvidia.com" <jgg@nvidia.com>,
"nicolinc@nvidia.com" <nicolinc@nvidia.com>,
"aik@amd.com" <aik@amd.com>,
"aneesh.kumar@kernel.org" <aneesh.kumar@kernel.org>,
"seanjc@google.com" <seanjc@google.com>,
"pbonzini@redhat.com" <pbonzini@redhat.com>,
"yilun.xu@linux.intel.com" <yilun.xu@linux.intel.com>,
"Gao, Chao" <chao.gao@intel.com>,
"Verma, Vishal L" <vishal.l.verma@intel.com>,
"Li, Xiaoyao" <xiaoyao.li@intel.com>,
"Tian, Kevin" <kevin.tian@intel.com>,
"Peng, Chao P" <chao.p.peng@intel.com>
Subject: RE: [RFC PATCH 06/15] virt: tdx-guest: Support TDI bind and unbind operations
Date: Wed, 14 Oct 2026 03:06:55 +0000 [thread overview]
Message-ID: <IA3PR11MB9136F32FBA9D830C48EBA968929D2@IA3PR11MB9136.namprd11.prod.outlook.com> (raw)
In-Reply-To: <00a4b474-eb13-4caa-90c6-b9cabb1ec621@suse.com>
>-----Original Message-----
>From: Nikolay Borisov <nik.borisov@suse.com>
>Subject: Re: [RFC PATCH 06/15] virt: tdx-guest: Support TDI bind and unbind
>operations
>
>
>
>On 24.09.26 г. 7:10 ч., Zhenzhong Duan wrote:
>> Introduce support for binding and unbinding the Trust Device Interface
>> (TDI) using the TDCM_OP_BIND and TDCM_OP_UNBIND commands.
>>
>> Executing TDCM_OP_BIND transitions the TDI state to a locked state
>> (TDI_STATE_CONFIG_LOCKED). Add a sanity check following the bind operation
>> to verify this state transition succeeded before finalizing device locking.
>>
>> Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
>
><snip>
>
>> struct tdx_devsec *tdevsec __free(kfree) = kzalloc(sizeof(*tdevsec),
>GFP_KERNEL);
>> @@ -174,6 +233,19 @@ static struct pci_tsm *tdx_devsec_lock(struct tsm_dev
>*tsm_dev, struct pci_dev *
>> if (!tdx_is_dev_teeio_support(tdevsec))
>> return ERR_PTR(-EOPNOTSUPP);
>>
>> + struct tdx_devsec *tdevsec_bind __free(tdx_tdi_unbind_dev) =
>tdx_tdi_bind_dev(tdevsec);
>> + if (IS_ERR(tdevsec_bind))
>> + return ERR_CAST(tdevsec_bind);
>> +
>> + ret = tdx_tdi_read_state(tdevsec, &state);
>> + if (ret)
>> + return ERR_PTR(ret);
>> +
>> + if (state != TDI_STATE_CONFIG_LOCKED)
>> + return ERR_PTR(-EIO);
>
>While this does seem correct, it's not really following the spec or I'm being too
>rigid, namely:
>
>Since TDI can change the state any time, TD can't fully rely on the Known RUN
>state in any scenario. However, TD can rely on the Known
>RUN state after TDG.TDI.START as a confirmation of the Interface Start.
About TDI changing state any time, do you mean host changes TDI state,
e.g., through TDH.TDI.STOP? Or you mean TDI device goes into TDISP error state
due to hw error? Can't they happen even after TDG.TDI.START?
>
>But here we still haven't done a START, just a BIND, no ?
Yes
>
> From the Guest perspective, querying the INTERFACE_STATE is a correct way for
>TD to query the TDI status. If the call status
>is TDX_SUCCESS then the TDI is BOUND. Other statuses indicate that the TDI is
>UNBOUND:
>TDX_TDIMT_NOT_PRESENT or TDX_TDI_INVALID_METADATA mean the TDI is
>UNBOUND and the TDI control structure
>has been removed or reassigned.
>TDX_TDI_INVALID_STATE means TDI is UNBOUND or in the ERROR state (TDI in
>TDISP ERROR state is considered
>UNBOUND from TD's perspective).
>
>IIUC it should be sufficient to check whether tdx_tdi_read_state didn't return an
>error and that would imply the interface is BOUND?
Updated todo list
I understand this as a best-effort sanity check, not a guarantee that
the interface will remain in this state.
For example, suppose the host creates the TDI but incorrectly reports
BIND complete without completing TDH.TDI.BIND. In the module
implementation I’m looking at, TDG.TDI.RD(INTERFACE_STATE) returns the
stored TDISP state without requiring the internal TDI state to be BOUND.
A successful read could therefore return CONFIG_UNLOCKED.
At this point we have bound the interface but have not started it, so
CONFIG_LOCKED is the state we expect. Checking it catches that
inconsistency; checking only the TDCALL return code would not. This is
still a snapshot, not proof against a subsequent state change.
BRs,
Zhenzhong
next prev parent reply other threads:[~2026-10-14 3:07 UTC|newest]
Thread overview: 127+ 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-30 22:13 ` Peter Fang
2026-10-01 12:38 ` Xu Yilun
2026-10-08 6:45 ` Duan, Zhenzhong
2026-10-08 16:30 ` Edgecombe, Rick P
2026-09-24 4:10 ` [RFC PATCH 02/15] x86/tdx: Add TDCM hypercall wrapper for TDX Connect Zhenzhong Duan
2026-10-13 14:34 ` Nikolay Borisov
2026-10-14 6:19 ` Duan, Zhenzhong
2026-10-14 6:27 ` Nikolay Borisov
2026-10-14 7:22 ` Duan, Zhenzhong
2026-10-26 0:33 ` Xiaoyao Li
2026-10-27 3:28 ` Duan, Zhenzhong
2026-10-27 5:49 ` Xiaoyao Li
2026-10-27 6:08 ` Duan, Zhenzhong
2026-10-29 2:15 ` Xiaoyao Li
2026-10-29 7:34 ` Duan, Zhenzhong
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-10-08 6:27 ` Duan, Zhenzhong
2026-10-08 16:42 ` Edgecombe, Rick P
2026-10-09 2:28 ` Duan, Zhenzhong
2026-10-26 0:51 ` Xiaoyao Li
2026-10-27 6:22 ` Duan, Zhenzhong
2026-11-02 21:07 ` Edgecombe, Rick P
2026-11-03 13:11 ` Duan, Zhenzhong
2026-11-03 21:04 ` Edgecombe, Rick P
2026-11-04 10:16 ` Duan, Zhenzhong
2026-09-24 4:10 ` [RFC PATCH 04/15] virt: tdx-guest: Support devsec TSM for secure devices Zhenzhong Duan
2026-10-15 13:42 ` Xu Yilun
2026-10-16 6:42 ` Duan, Zhenzhong
2026-10-26 1:12 ` Xiaoyao Li
2026-10-27 7:20 ` Duan, Zhenzhong
2026-09-24 4:10 ` [RFC PATCH 05/15] virt: tdx-guest: Add TDCM helpers and TEE-IO support check Zhenzhong Duan
2026-10-13 14:31 ` Nikolay Borisov
2026-10-14 6:11 ` Duan, Zhenzhong
2026-10-26 1:26 ` Xiaoyao Li
2026-10-26 7:13 ` Nikolay Borisov
2026-10-28 5:42 ` Duan, Zhenzhong
2026-10-28 6:51 ` Nikolay Borisov
2026-10-14 12:52 ` Nikolay Borisov
2026-10-15 6:24 ` Duan, Zhenzhong
2026-10-26 2:06 ` Xiaoyao Li
2026-10-27 8:32 ` Duan, Zhenzhong
2026-10-29 2:27 ` Xiaoyao Li
2026-09-24 4:10 ` [RFC PATCH 06/15] virt: tdx-guest: Support TDI bind and unbind operations Zhenzhong Duan
2026-10-13 12:10 ` Nikolay Borisov
2026-10-14 3:06 ` Duan, Zhenzhong [this message]
2026-10-14 6:32 ` Nikolay Borisov
2026-10-14 7:33 ` Duan, Zhenzhong
2026-11-04 8:20 ` Xu Yilun
2026-11-04 9:03 ` Duan, Zhenzhong
2026-10-17 18:38 ` Nikolay Borisov
2026-10-19 2:16 ` Duan, Zhenzhong
2026-10-26 2:32 ` Xiaoyao Li
2026-10-27 8:58 ` Duan, Zhenzhong
2026-10-29 2:38 ` Xiaoyao Li
2026-10-29 7:42 ` Duan, Zhenzhong
2026-10-29 3:26 ` Duan, Zhenzhong
2026-11-02 21:11 ` Edgecombe, Rick P
2026-11-03 8:49 ` Duan, Zhenzhong
2026-11-03 21:07 ` Edgecombe, Rick P
2026-11-04 8:59 ` Duan, Zhenzhong
2026-11-04 14:39 ` Edgecombe, Rick P
2026-11-05 4:37 ` Duan, Zhenzhong
2026-11-05 19:06 ` Edgecombe, Rick P
2026-11-06 3:03 ` Duan, Zhenzhong
2026-11-09 23:38 ` Edgecombe, Rick P
2026-11-10 9:40 ` Duan, Zhenzhong
2026-11-10 18:55 ` Edgecombe, Rick P
2026-11-10 19:57 ` Jason Gunthorpe
2026-11-10 22:25 ` Edgecombe, Rick P
2026-11-11 0:16 ` Jason Gunthorpe
2026-11-11 0:19 ` Edgecombe, Rick P
2026-11-11 9:44 ` Tian, Kevin
2026-11-11 15:00 ` Jason Gunthorpe
2026-11-11 23:05 ` Tian, Kevin
2026-11-12 10:50 ` Alexey Kardashevskiy
2026-11-12 14:54 ` Jason Gunthorpe
2026-11-12 12:56 ` Xu Yilun
2026-11-11 8:04 ` Nikolay Borisov
2026-10-26 2:38 ` Xiaoyao Li
2026-10-27 10:14 ` Duan, Zhenzhong
2026-11-02 21:15 ` Edgecombe, Rick P
2026-11-03 6:02 ` Duan, Zhenzhong
2026-09-24 4:10 ` [RFC PATCH 07/15] PCI/TSM: Track Device Interface Report MMIO range index Zhenzhong Duan
2026-10-26 2:45 ` Xiaoyao Li
2026-10-27 9:11 ` Duan, Zhenzhong
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
2026-09-25 0:02 ` Edgecombe, Rick P
2026-10-08 6:01 ` Duan, Zhenzhong
2026-10-08 16:47 ` Edgecombe, Rick P
2026-10-08 5:49 ` Duan, Zhenzhong
2026-10-08 16:44 ` Edgecombe, Rick P
2026-10-09 2:16 ` Duan, Zhenzhong
2026-11-03 7:48 ` Xiaoyao Li
2026-09-24 4:10 ` [RFC PATCH 09/15] virt: tdx-guest: Capture the TDI report during device lock Zhenzhong Duan
2026-10-26 5:04 ` Xiaoyao Li
2026-10-28 3:23 ` Duan, Zhenzhong
2026-11-02 21:19 ` Edgecombe, Rick P
2026-11-03 0:36 ` Jason Gunthorpe
2026-11-03 0:48 ` Edgecombe, Rick P
2026-11-03 1:26 ` Jason Gunthorpe
2026-11-03 21:11 ` Edgecombe, Rick P
2026-11-04 8:08 ` Duan, Zhenzhong
2026-09-24 4:10 ` [RFC PATCH 10/15] virt: tdx-guest: Set up and accept private MMIO ranges Zhenzhong Duan
2026-10-26 5:22 ` Xiaoyao Li
2026-10-28 3:32 ` Duan, Zhenzhong
2026-10-29 2:44 ` Xiaoyao Li
2026-10-29 9:56 ` Duan, Zhenzhong
2026-11-02 22:38 ` Edgecombe, Rick P
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-10-26 7:19 ` Xiaoyao Li
2026-10-28 6:44 ` Duan, Zhenzhong
2026-10-28 12:41 ` Jason Gunthorpe
2026-10-29 2:24 ` Duan, Zhenzhong
2026-09-24 4:10 ` [RFC PATCH 13/15] x86/tdx: Add __tdcall_saved() helper Zhenzhong Duan
2026-10-26 7:35 ` Xiaoyao Li
2026-09-24 4:10 ` [RFC PATCH 14/15] x86/tdx: Add TDG.DMAR.ACCEPT module call wrapper for TDX Connect Zhenzhong Duan
2026-10-26 7:39 ` Xiaoyao Li
2026-10-28 5:57 ` Duan, Zhenzhong
2026-09-24 4:10 ` [RFC PATCH 15/15] virt: tdx-guest: Accept default DMAR entry during PCI driver attach Zhenzhong Duan
2026-10-26 7:49 ` Xiaoyao Li
2026-10-26 12:02 ` Jason Gunthorpe
2026-10-28 9:39 ` Xu Yilun
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=IA3PR11MB9136F32FBA9D830C48EBA968929D2@IA3PR11MB9136.namprd11.prod.outlook.com \
--to=zhenzhong.duan@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=nik.borisov@suse.com \
--cc=pbonzini@redhat.com \
--cc=rick.p.edgecombe@intel.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 \
/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®