From: "Edgecombe, Rick P" <rick.p.edgecombe@intel.com>
To: "Li, Xiaoyao" <xiaoyao.li@intel.com>,
"seanjc@google.com" <seanjc@google.com>,
"binbin.wu@linux.intel.com" <binbin.wu@linux.intel.com>
Cc: "Gao, Chao" <chao.gao@intel.com>,
"dave.hansen@linux.intel.com" <dave.hansen@linux.intel.com>,
"kas@kernel.org" <kas@kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
"pbonzini@redhat.com" <pbonzini@redhat.com>,
"nik.borisov@suse.com" <nik.borisov@suse.com>,
"andrew.cooper3@citrix.com" <andrew.cooper3@citrix.com>
Subject: Re: [PATCH v3 1/4] KVM: TDX: Track configurable CPUID bits allowed by KVM
Date: Thu, 10 Sep 2026 21:29:43 +0000 [thread overview]
Message-ID: <18b2e611bf1d166dde6e27a68719fa5053151af6.camel@intel.com> (raw)
In-Reply-To: <ac43e7f1-2ee3-41a4-85ff-edab7a7caa35@linux.intel.com>
On Thu, 2026-09-10 at 10:39 +0800, Binbin Wu wrote:
> > I think this actually surfaces another problem with TD-first enabling.
> > KVM_TDX_CAPABILITIES only returns the directly configurable bits. Then
> > recall, KVM_TDX_GET_CPUID returns the actual TDX module's view of CPUID bits
> > to userspace. Then userspace calls KVM_SET_CPUID to actually put them on
> > KVM's vcpu so they can match between Qemu, KVM and TDX
>
> That brings up a point..
>
> Today, vcpu->arch.cpu_caps[] is capped by kvm_cpu_caps[] (plus a few special
> cases). As mentioned in the cover letter, this patch series doesn't enforce
> consistency between KVM's view and the guest's view of vCPU capabilities
> because KVM doesn't currently use its own view to make decisions for TDs (e.g.
> saving/restoring feature-related MSRs).
Not sure if I'm missing your point here. I don't think we ever want to have KVM
enforce consistency between KVM's view and guests. We just need to provide
enough info to userspace such that it can make them consistent.
>
> However, if KVM starts making decisions for TDX based on vcpu-
> >arch.cpu_caps[], intersecting userspace input with kvm_cpu_caps[] will not
> work for TDX.
vcpu->arch.cpu_caps are actually already consulted for TDX. I remember seeing a
bunch of the the guest cpuid feature checks during the base enabling, probably
working on this problem. Let me what we have today.
From a Linux guest boot, guest_cpu_cap_has() returns true for:
xsave
smep
smap
fsgsbase
pku
la57
umip
vmx
pcid
lam
unknown
ibt
x2apic
Since we share code with normal VMs (and manage shared EPT in KVM), some checks
are going to happen. If there is some new feature foo we enable for TDX. And
later KVM adds new logic around vcpu->arch.cpu_caps for it, then there is a
small risk of being pinned down when we want to add new guest_cpu_cap_has()
logic for normal VMs. Since we already are hitting these checks for TDX, the
general case is not theoretical.
> I think this is probably needed in the future? If so, allowing features
> outside of kvm_cpu_caps[] for TDX means
Yea, I think allowing TDX features outside of kvm_cpu_caps is for special cases.
And filtering like you have is good.
> we will need TDX-specific handling to construct KVM's view of vCPU
> capabilities. That likely implies tracking all known/supported TDX features,
> which is doable, but it will make the allow list bigger.
In this thread we have been talking about what "normal VMs" support, but in the
code and uAPI it really is about what KVM supports. If we let TDX use a feature
that *KVM* doesn't support, it is the risky zone.
I say we punt on this. Let's remember it's dicey and if we find TDX feature
enabling is being blocked all the time by normal VM enabling, we can work on a
solution. Does anyone see any big risk of this being harder later than it is
today?
I prefer to at least start filtering ASAP.
next prev parent reply other threads:[~2026-09-10 21:29 UTC|newest]
Thread overview: 66+ 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 [this message]
2026-09-11 0:55 ` Binbin Wu
2026-09-11 1:30 ` 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
2026-09-03 2:22 ` Binbin Wu
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
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=18b2e611bf1d166dde6e27a68719fa5053151af6.camel@intel.com \
--to=rick.p.edgecombe@intel.com \
--cc=andrew.cooper3@citrix.com \
--cc=binbin.wu@linux.intel.com \
--cc=chao.gao@intel.com \
--cc=dave.hansen@linux.intel.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=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 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.