Kernel KVM virtualization development
 help / color / mirror / Atom feed
From: Binbin Wu <binbin.wu@linux.intel.com>
To: Artem Bityutskiy <dedekind1@gmail.com>,
	"Edgecombe, Rick P" <rick.p.edgecombe@intel.com>,
	"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Cc: "Gao, Chao" <chao.gao@intel.com>,
	"seanjc@google.com" <seanjc@google.com>,
	"dave.hansen@linux.intel.com" <dave.hansen@linux.intel.com>,
	"kas@kernel.org" <kas@kernel.org>,
	"Li, Xiaoyao" <xiaoyao.li@intel.com>,
	"pbonzini@redhat.com" <pbonzini@redhat.com>,
	"andrew.cooper3@citrix.com" <andrew.cooper3@citrix.com>,
	"nik.borisov@suse.com" <nik.borisov@suse.com>
Subject: Re: [PATCH v3 0/4] KVM: TDX: Validate directly configurable CPUID bits
Date: Wed, 9 Sep 2026 16:48:25 +0800	[thread overview]
Message-ID: <473c5507-045f-454c-b6d1-76d2a390f413@linux.intel.com> (raw)
In-Reply-To: <5faff363852572d59e34c876173d73c93734bd3c.camel@gmail.com>

On 9/9/2026 2:52 PM, Artem Bityutskiy wrote:
> On Tue, 2026-09-08 at 22:31 +0000, Edgecombe, Rick P wrote:
>> We are kind of discussing what recommendations we should give about how
>> msr_preservation.pdf should be defined for new CPUID bit based features. So
>> saying to follow msr_preservation.pdf is self referential.
> 
> OK, thanks for elaborating. The e-mail was vague about that.
> 
>> Again, please do not treat the TDX specs as something to be handed down and
>> "followed". I think this is something to get used to for TDX. I mean, upstream
>> never wants to adapt to platform arch that fits awkwardly, but it's even tougher
>> to swallow when the arch is mostly SW defined. And further, the people working
>> on the TDX arch want to hear such requirements from upstream.
> 
> Agreed, that matches my understanding. Reminders are useful in general,
> but this was not that case.
> 
>> Here, the thing to discuss is how TDX should define new features that will
>> clobber host state (e.g. bits that would appear in msr_preservation.pdf as not
>> being preserved).
>>
>> There have been several PUCK discussions on the problem this series is tackling,
>> and actually several attempts to solve the problem during the base series. More
>> recently a host clobbering control was proposed that attempted to make it safe,
>> but it was not accepted. That proposal brought up the topic of whether having
>> select states clobbered was actually an unproven optimization.
>>
>> Now that we are moving back to an allow list type solution, what guidance should
>> we give on this other surfaced topic. Since TDX shares some save/restore logic
>> with normal VMs, we should have it work well with that code. So forgetting about
>> the performance optimization question, how to have it work in a sensible way
>> with the shared code paths.
> 
> Rick,
> 
> In general, the TDX case and the VMX case behaving the same way is
> best. I thought that consistency is always obviously a good thing,
> but let me acknowledge it explicitly.
> 
> I was trying to dig deeper into the proposal and analyze it.
> 
> <cite>
> The proposal is to have TDX simply match VMX behavior, i.e. on return
> from TDH.VP.ENTER, state that VMX would restore from the VMCS host
> fields is restored, and state that VMX would leave as the guest value
> is clobbered.  That keeps a single model for VMM, and means enabling a
> new feature for TDs requires the same work flow as enabling it for VMX.
> </cite>
> 
> My point was that hardware behaves differently for VMX guests and for
> the VMM<->TDX. This is not about following "boss specs", it is what the
> SDM describes.
> 
> For VMX, the VMCS host-state area is loaded by hardware on VM exit
> (SDM 27.5). For SEAMCALL and SEAMRET, the SDM seems to say they operate
> like an SMM VM exit and a VM entry returning from SMM (SDM 35.1), and
> those save state into the guest-state area of the transfer VMCS
> (SDM 34.15.2.2).
> 
> VMX:
>   VM entry = load guest state from guest-state area
>   VM exit  = save guest state into guest-state area,
>              load host state from host-state area
> 
> TDX:
>   SEAMCALL = save host state into SEAM VMCS guest-state area,
>              load module state from SEAM VMCS host-state area
>   SEAMRET  = restore host state from SEAM VMCS guest-state area
> 
> I may be reading the SDM wrong, let me know.

That's my understanding too.

> 
> So there are differences, and I was hoping to:
> - Be corrected if I misinterpret the SDM and how things work.
> - Get comments on whether the proposal took this into account.
> - Get comments on how this affects, or does not affect, the proposal.

For host state clobbering behavior, we cares about the values of the host (VMX
root mode) after SEAMRET.

When there is a control/field for "load host state from host-state area", I
think there are two cases: 
- If there is the corresponding control/field for "load guest state from
  guest-state area", the TDX module could leverage it.
- If there is no such corresponding control/field for "load guest state from
  guest-state area", the TDX module could do it in software way to mimic it.

So from the view of the VMM, it can have the aligned behavior on host state
clobbering behavior.


  reply	other threads:[~2026-09-09  8:48 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-27  3:18 [PATCH v3 0/4] KVM: TDX: Validate directly configurable CPUID bits Binbin Wu
2026-08-27  3:18 ` [PATCH v3 1/4] KVM: TDX: Track configurable CPUID bits allowed by KVM Binbin Wu
2026-09-01  6:29   ` Tony Lindgren
2026-09-01  8:23     ` Binbin Wu
2026-09-01  8:27       ` Tony Lindgren
2026-09-01 14:35   ` Xiaoyao Li
2026-09-02  0:33     ` Binbin Wu
2026-09-02 15:09       ` Xiaoyao Li
2026-09-02 16:19         ` Binbin Wu
2026-09-02 16:22           ` Edgecombe, Rick P
2026-09-02 16:25             ` Binbin Wu
2026-09-03  7:28           ` Xiaoyao Li
2026-09-03  8:57             ` Binbin Wu
2026-09-08 21:13             ` Edgecombe, Rick P
2026-09-09 16:39               ` Xiaoyao Li
2026-09-09 22:29                 ` Sean Christopherson
2026-09-09 23:18                   ` Edgecombe, Rick P
2026-09-10  2:39                     ` Binbin Wu
2026-09-10 21:29                       ` Edgecombe, Rick P
2026-09-10  2:53                     ` Xiaoyao Li
2026-09-08 21:15         ` Edgecombe, Rick P
2026-08-27  3:18 ` [PATCH v3 2/4] KVM: TDX: Report CORE_CAPABILITIES as configurable Binbin Wu
2026-09-01  6:45   ` Tony Lindgren
2026-09-02 17:43   ` Kishen Maloor
     [not found]     ` <d47c8cc6-242b-4ebf-89f2-0909abdaadd5@linux.intel.com>
2026-09-03  6:10       ` Kishen Maloor
2026-09-03  8:12         ` Binbin Wu
2026-08-27  3:18 ` [PATCH v3 3/4] KVM: TDX: Filter configurable CPUID bits Binbin Wu
2026-09-01  6:44   ` Tony Lindgren
2026-09-01  8:42     ` Binbin Wu
2026-09-01  9:09       ` Tony Lindgren
2026-09-03  8:04   ` Xiaoyao Li
2026-09-03  8:23     ` Binbin Wu
2026-08-27  3:18 ` [PATCH v3 4/4] KVM: TDX: Validate userspace CPUID input for KVM_TDX_INIT_VM Binbin Wu
2026-08-27  3:24   ` sashiko-bot
2026-08-27  7:25     ` Binbin Wu
2026-09-01  6:47   ` Tony Lindgren
2026-08-27 19:33 ` [PATCH v3 0/4] KVM: TDX: Validate directly configurable CPUID bits Edgecombe, Rick P
2026-08-28  3:19   ` Binbin Wu
2026-08-28 16:58     ` Edgecombe, Rick P
2026-08-31  5:01       ` Binbin Wu
2026-09-01  9:42         ` Xiaoyao Li
2026-09-01 10:21           ` Xiaoyao Li
2026-09-02 16:09           ` Edgecombe, Rick P
2026-09-02 16:21             ` Binbin Wu
2026-09-09  1:46             ` Binbin Wu
2026-09-01  9:38     ` Xiaoyao Li
2026-09-01 17:41       ` Edgecombe, Rick P
2026-09-02 10:29         ` Xiaoyao Li
2026-09-02 13:13           ` Edgecombe, Rick P
2026-09-02 13:39             ` Xiaoyao Li
2026-09-02 13:53               ` Edgecombe, Rick P
2026-09-02 14:21                 ` Xiaoyao Li
2026-09-02 16:26             ` Binbin Wu
2026-09-08  9:42 ` Artem Bityutskiy
2026-09-09  0:04   ` Binbin Wu
2026-09-08 20:30 ` Artem Bityutskiy
2026-09-08 22:31   ` Edgecombe, Rick P
2026-09-09  6:52     ` Artem Bityutskiy
2026-09-09  8:48       ` Binbin Wu [this message]
2026-09-09 11:20         ` Artem Bityutskiy
2026-09-10  2:54           ` Binbin Wu
2026-09-08 23:54   ` Binbin Wu
2026-09-09  5:37     ` Binbin Wu

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=473c5507-045f-454c-b6d1-76d2a390f413@linux.intel.com \
    --to=binbin.wu@linux.intel.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=chao.gao@intel.com \
    --cc=dave.hansen@linux.intel.com \
    --cc=dedekind1@gmail.com \
    --cc=kas@kernel.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nik.borisov@suse.com \
    --cc=pbonzini@redhat.com \
    --cc=rick.p.edgecombe@intel.com \
    --cc=seanjc@google.com \
    --cc=xiaoyao.li@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