All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chao Gao <chao.gao@intel.com>
To: "Huang, Kai" <kai.huang@intel.com>
Cc: "kvm@vger.kernel.org" <kvm@vger.kernel.org>,
	"linux-coco@lists.linux.dev" <linux-coco@lists.linux.dev>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"x86@kernel.org" <x86@kernel.org>,
	"dave.hansen@linux.intel.com" <dave.hansen@linux.intel.com>,
	"kas@kernel.org" <kas@kernel.org>,
	"seanjc@google.com" <seanjc@google.com>,
	"Chatre, Reinette" <reinette.chatre@intel.com>,
	"Weiny, Ira" <ira.weiny@intel.com>,
	"binbin.wu@linux.intel.com" <binbin.wu@linux.intel.com>,
	"Verma, Vishal L" <vishal.l.verma@intel.com>,
	"nik.borisov@suse.com" <nik.borisov@suse.com>,
	"mingo@redhat.com" <mingo@redhat.com>,
	"pbonzini@redhat.com" <pbonzini@redhat.com>,
	"tony.lindgren@linux.intel.com" <tony.lindgren@linux.intel.com>,
	"sagis@google.com" <sagis@google.com>,
	"Annapurve, Vishal" <vannapurve@google.com>,
	"hpa@zytor.com" <hpa@zytor.com>,
	"Edgecombe, Rick P" <rick.p.edgecombe@intel.com>,
	"paulmck@kernel.org" <paulmck@kernel.org>,
	"tglx@kernel.org" <tglx@kernel.org>,
	"yilun.xu@linux.intel.com" <yilun.xu@linux.intel.com>,
	"Williams, Dan J" <dan.j.williams@intel.com>,
	"bp@alien8.de" <bp@alien8.de>
Subject: Re: [PATCH v5 12/22] x86/virt/tdx: Reset software states during TDX module shutdown
Date: Tue, 17 Mar 2026 16:27:06 +0800	[thread overview]
Message-ID: <abkQWsqR7BURMZxc@intel.com> (raw)
In-Reply-To: <996e42a31101bb90575e7b2b6f33b3bd607b5e6e.camel@intel.com>

On Mon, Mar 16, 2026 at 05:06:49PM +0800, Huang, Kai wrote:
>
>> @@ -1179,6 +1179,7 @@ EXPORT_SYMBOL_FOR_KVM(tdx_enable);
>>  int tdx_module_shutdown(void)
>>  {
>>  	struct tdx_module_args args = {};
>> +	int ret, cpu;
>>  
>>  	/*
>>  	 * Shut down the TDX module and prepare handoff data for the next
>> @@ -1188,7 +1189,22 @@ int tdx_module_shutdown(void)
>>  	 * modules as new modules likely have higher handoff version.
>>  	 */
>>  	args.rcx = tdx_sysinfo.handoff.module_hv;
>> -	return seamcall_prerr(TDH_SYS_SHUTDOWN, &args);
>> +	ret = seamcall_prerr(TDH_SYS_SHUTDOWN, &args);
>> +	if (ret)
>> +		return ret;
>> +
>> +	tdx_module_status = TDX_MODULE_UNINITIALIZED;
>> +	sysinit_done = false;
>> +	sysinit_ret = 0;
>> +
>> +	/*
>> +	 * By reaching here CPUHP is disabled and all present CPUs
>> +	 * are online. It's safe to just loop all online CPUs and
>> +	 * reset the per-cpu flag.
>> +	 */
>> +	for_each_online_cpu(cpu)
>> +		per_cpu(tdx_lp_initialized, cpu) = false;
>
>Since you have removed the requirement that P-SEAMLDR.INSTALL must be done
>on all CPUs, and removed the relevant patch, the "all present CPUs are
>online" part isn't correct anymore.
>
>And using for_each_online_cpu() isn't enough since this doesn't reset the
>tdx_lp_initialized for offline CPUs.
>
>One way is to just use for_each_possible_cpu() here so tdx_lp_initialized
>for all CPUs are reset.  Since the "CPUHP is disabled" part is still correct
>AFAICT (since stop_machine() disables CPUHP internally during the
>operation), resetting tdx_lp_initialized for offline CPUs won't race with
>CPUHP.
>
>And assuming this series will be applied after Sean's VMXON series, we will

Yes.

>have a TDX-specific CPUHP callback tdx_online_cpu() in TDX x86 core to do
>tdx_cpu_enable(), which will then enable TDX again on the new-online CPU.

Good point.

Clearing tdx_lp_initialized for offlined CPUs makes sense, but I'd rather not
justify this through "enabling TDX on new-online CPUs" since many details
remain unclear. For example, there will be a SEAMCALL to disable TDX per-CPU.
It should be called when CPUs go offline so that those CPUs can be exempting
from doing SEAMLDR.INSTALL during module updates. tdx_lp_initialized should
have been cleared along with that "disable TDX per-CPU" SEAMCALL for offlined
CPUs.

I'm not arguing against for_each_present_cpu(). I just think discussing how
to support TDX module update with offlined CPUs in the comment would be a bit
premature. How about keeping it simple:

/*
 * Since the TDX module is shut down and gone, mark all CPUs (including
 * offlined ones) as uninitialied. This is called in stop_machine() (where
 * CPU hotplug is disabled), preventing races with other tdx_lp_initialized
 * accesses.
 */

>
>Btw, w/o Sean's VMXON series, currently only KVM provides the TDX-specific
>CPUHP callback.  So it seems if module update is done when KVM is not
>loaded,

w/o VMXON series, module update isn't possible if KVM isn't loaded.

>there will be no TDX-specific CPUHP callback to re-enable TDX for
>the new-online CPU.  This means any SEAMCALL on that CPU will fail before
>KVM module is loaded again (which will then re-register the TDX-specific
>CPUHP and run tdx_cpu_enable() for all online CPUs). 
>
>But I don't think we should consider this case.
>
>
Agreed.

  reply	other threads:[~2026-03-17  8:27 UTC|newest]

Thread overview: 80+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-15 13:58 [PATCH v5 00/22] Runtime TDX module update support Chao Gao
2026-03-15 13:58 ` [PATCH v5 01/22] x86/virt/tdx: Move low level SEAMCALL helpers out of <asm/tdx.h> Chao Gao
2026-03-16 12:41   ` Kiryl Shutsemau
2026-03-15 13:58 ` [PATCH v5 02/22] coco/tdx-host: Introduce a "tdx_host" device Chao Gao
2026-03-16 12:48   ` Kiryl Shutsemau
2026-03-15 13:58 ` [PATCH v5 03/22] coco/tdx-host: Expose TDX module version Chao Gao
2026-03-16 12:54   ` Kiryl Shutsemau
2026-03-18 21:37   ` Huang, Kai
2026-03-15 13:58 ` [PATCH v5 04/22] x86/virt/seamldr: Introduce a wrapper for P-SEAMLDR SEAMCALLs Chao Gao
2026-03-16 13:05   ` Kiryl Shutsemau
2026-03-17  0:43     ` Chao Gao
2026-03-17  9:59       ` Kiryl Shutsemau
2026-03-18  7:13   ` Xiaoyao Li
2026-03-18  9:34     ` Chao Gao
2026-03-19  3:02       ` Xiaoyao Li
2026-03-19  7:14         ` Chao Gao
2026-03-18 21:38   ` Huang, Kai
2026-03-15 13:58 ` [PATCH v5 05/22] x86/virt/seamldr: Retrieve P-SEAMLDR information Chao Gao
2026-03-16 13:12   ` Kiryl Shutsemau
2026-03-17  1:05     ` Chao Gao
2026-03-17 10:00       ` Kiryl Shutsemau
2026-03-18  7:53   ` Xiaoyao Li
2026-03-18  8:57     ` Chao Gao
2026-03-18 21:40   ` Huang, Kai
2026-03-15 13:58 ` [PATCH v5 06/22] coco/tdx-host: Expose P-SEAMLDR information via sysfs Chao Gao
2026-03-17 10:06   ` Kiryl Shutsemau
2026-03-17 15:34     ` Dave Hansen
2026-03-18  6:54     ` Chao Gao
2026-03-18  8:20       ` Xiaoyao Li
2026-03-18  9:10         ` Chao Gao
2026-03-18  9:28           ` Kiryl Shutsemau
2026-03-15 13:58 ` [PATCH v5 07/22] coco/tdx-host: Implement firmware upload sysfs ABI for TDX module updates Chao Gao
2026-03-17 10:20   ` Kiryl Shutsemau
2026-03-18  8:28     ` Chao Gao
2026-03-18 21:45   ` Huang, Kai
2026-03-15 13:58 ` [PATCH v5 08/22] x86/virt/seamldr: Allocate and populate a module update request Chao Gao
2026-03-17 10:59   ` Kiryl Shutsemau
2026-03-18  8:50     ` Chao Gao
2026-03-18 10:58       ` Kiryl Shutsemau
2026-03-19  7:24         ` Chao Gao
2026-03-19 12:58           ` Kiryl Shutsemau
2026-03-18 21:36   ` Huang, Kai
2026-03-15 13:58 ` [PATCH v5 09/22] x86/virt/seamldr: Introduce skeleton for TDX module updates Chao Gao
2026-03-18 22:11   ` Huang, Kai
2026-03-19 13:15   ` Kiryl Shutsemau
2026-03-20  8:10     ` Chao Gao
2026-03-15 13:58 ` [PATCH v5 10/22] x86/virt/seamldr: Abort updates if errors occurred midway Chao Gao
2026-03-19 13:19   ` Kiryl Shutsemau
2026-03-20  8:12     ` Chao Gao
2026-03-15 13:58 ` [PATCH v5 11/22] x86/virt/seamldr: Shut down the current TDX module Chao Gao
2026-03-19 13:24   ` Kiryl Shutsemau
2026-03-20  8:21     ` Chao Gao
2026-03-23  1:33       ` Chao Gao
2026-03-15 13:58 ` [PATCH v5 12/22] x86/virt/tdx: Reset software states during TDX module shutdown Chao Gao
2026-03-16  9:06   ` Huang, Kai
2026-03-17  8:27     ` Chao Gao [this message]
2026-03-17 11:08       ` Huang, Kai
2026-03-15 13:58 ` [PATCH v5 13/22] x86/virt/seamldr: Install a new TDX module Chao Gao
2026-03-19 13:32   ` Kiryl Shutsemau
2026-03-23  2:14     ` Chao Gao
2026-03-15 13:58 ` [PATCH v5 14/22] x86/virt/seamldr: Do TDX per-CPU initialization after updates Chao Gao
2026-03-19 13:33   ` Kiryl Shutsemau
2026-03-15 13:58 ` [PATCH v5 15/22] x86/virt/tdx: Restore TDX module state Chao Gao
2026-03-19 13:37   ` Kiryl Shutsemau
2026-03-15 13:58 ` [PATCH v5 16/22] x86/virt/tdx: Update tdx_sysinfo and check features post-update Chao Gao
2026-03-19 13:43   ` Kiryl Shutsemau
2026-03-15 13:58 ` [PATCH v5 17/22] x86/virt/tdx: Avoid updates during update-sensitive operations Chao Gao
2026-03-19 14:00   ` Kiryl Shutsemau
2026-03-20  8:00     ` Chao Gao
2026-03-15 13:58 ` [PATCH v5 18/22] coco/tdx-host: Don't expose P-SEAMLDR features on CPUs with erratum Chao Gao
2026-03-19 14:02   ` Kiryl Shutsemau
2026-03-15 13:58 ` [PATCH v5 19/22] x86/virt/tdx: Enable TDX module runtime updates Chao Gao
2026-03-19 14:03   ` Kiryl Shutsemau
2026-03-15 13:58 ` [PATCH v5 20/22] coco/tdx-host: Document TDX module update compatibility criteria Chao Gao
2026-03-19 14:04   ` Kiryl Shutsemau
2026-03-15 13:58 ` [PATCH v5 21/22] x86/virt/tdx: Document TDX module update Chao Gao
2026-03-19 14:05   ` Kiryl Shutsemau
2026-03-15 13:58 ` [PATCH v5 22/22] x86/virt/seamldr: Log TDX module update failures Chao Gao
2026-03-19 14:06   ` Kiryl Shutsemau
2026-03-20  8:31     ` Chao Gao

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=abkQWsqR7BURMZxc@intel.com \
    --to=chao.gao@intel.com \
    --cc=binbin.wu@linux.intel.com \
    --cc=bp@alien8.de \
    --cc=dan.j.williams@intel.com \
    --cc=dave.hansen@linux.intel.com \
    --cc=hpa@zytor.com \
    --cc=ira.weiny@intel.com \
    --cc=kai.huang@intel.com \
    --cc=kas@kernel.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-coco@lists.linux.dev \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=nik.borisov@suse.com \
    --cc=paulmck@kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=reinette.chatre@intel.com \
    --cc=rick.p.edgecombe@intel.com \
    --cc=sagis@google.com \
    --cc=seanjc@google.com \
    --cc=tglx@kernel.org \
    --cc=tony.lindgren@linux.intel.com \
    --cc=vannapurve@google.com \
    --cc=vishal.l.verma@intel.com \
    --cc=x86@kernel.org \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.