From: Sean Christopherson <seanjc@google.com>
To: Xin Li <xin@zytor.com>
Cc: Binbin Wu <binbin.wu@linux.intel.com>,
linux-kernel@vger.kernel.org, kvm@vger.kernel.org,
linux-doc@vger.kernel.org, pbonzini@redhat.com, corbet@lwn.net,
tglx@linutronix.de, mingo@redhat.com, bp@alien8.de,
dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com,
luto@kernel.org, peterz@infradead.org,
andrew.cooper3@citrix.com, chao.gao@intel.com,
hch@infradead.org, sohil.mehta@intel.com
Subject: Re: [PATCH v9 07/22] KVM: VMX: Initialize VMCS FRED fields
Date: Thu, 5 Mar 2026 07:21:53 -0800 [thread overview]
Message-ID: <aamfka09bDZV0iUO@google.com> (raw)
In-Reply-To: <99463361-58F3-42F9-9BCC-4BF0BF73D247@zytor.com>
On Wed, Mar 04, 2026, Xin Li wrote:
>
>
> > On Mar 4, 2026, at 8:23 AM, Sean Christopherson <seanjc@google.com> wrote:
> >
> > On Wed, Jan 21, 2026, Binbin Wu wrote:
> >> On 10/27/2025 4:18 AM, Xin Li (Intel) wrote:
> >>> diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
> >>> index fcfa99160018..c8b5359123bf 100644
> >>> --- a/arch/x86/kvm/vmx/vmx.c
> >>> +++ b/arch/x86/kvm/vmx/vmx.c
> >>> @@ -1459,6 +1459,15 @@ void vmx_vcpu_load_vmcs(struct kvm_vcpu *vcpu, int cpu)
> >>> (unsigned long)(cpu_entry_stack(cpu) + 1));
> >>> }
> >>>
> >>> + /* Per-CPU FRED MSRs */
> >
> > Meh, this is pretty self-explanatory code.
>
> I want to remind that this is “Per-CPU”.
>
> On the other side, FRED_CONFIG and FRED_STKLVLS are typically the same on
> all CPUs, and they don’t need to be updated during vCPU migration.
>
> But anyway vCPU migration only cares per-CPU MSRs, so this is redundant.
>
> It often bothers me whether to explain the code a bit more or not, with a
> short brief comment or a lengthy one.
Oh, I'm all for comments, But I generally dislike terse comments like the above,
as they're only useful for readers that *already* know many of the gory details,
and for everyone else, it's largely just noise.
E.g. in this case, what the subtlety of what you were trying to convey with
"Per-CPU" was completely lost on me. It would have been a wee bit more helpful
in earlier versions that used RDMSR, but even then it required the reader to make
large leaps of intuition to understand the full context.
And the terse comment is also "wrong" in the sense that it lies by omission,
because this isn't *all* of the per-CPU MSRs.
E.g.
/*
* Update the FRED RSP MSRs values that are restored on VM-Exit, as
* Linux uses dedicated per-CPU stacks for things like #DBs and NMIs.
* Note, RSP0 is _only_ used to load RSP on user=>kernel transitions,
* i.e. doesn't need to be loaded on VM-Exit and so doesn't have a VMCS
* field. Note #2, the SSP MSRs will likely be per-CPU as well, but
* Linux doesn't yet support supervisor shadow stacks.
*/
> >>> + if (kvm_cpu_cap_has(X86_FEATURE_FRED)) {
> >>> +#ifdef CONFIG_X86_64
> >>
> >> Nit:
> >>
> >> Is this needed?
> >>
> >> FRED is initialized by X86_64_F(), if CONFIG_X86_64 is not enabled, this
> >> path is not reachable.
> >> There should be no compilation issue without #ifdef CONFIG_X86_64 / #endif.
> >>
> >> There are several similar patterns in this patch, using #ifdef CONFIG_X86_64 /
> >> #endif or not seems not consistent. E.g. __vmx_vcpu_reset() and init_vmcs()
> >> doesn't check the config, but here does.
> >>
> >>> + vmcs_write64(HOST_IA32_FRED_RSP1, __this_cpu_ist_top_va(ESTACK_DB));
> >>> + vmcs_write64(HOST_IA32_FRED_RSP2, __this_cpu_ist_top_va(ESTACK_NMI));
> >>> + vmcs_write64(HOST_IA32_FRED_RSP3, __this_cpu_ist_top_va(ESTACK_DF));
> >
> > IMO, this is flawed for other reasons. KVM shouldn't be relying on kernel
> > implementation details with respect to what FRED stack handles what event.
> >
> > The simplest approach would be to read the actual MSR. _If_ using a per-CPU read
> > provides meaningful performance benefits over RDMSR (or RDMSR w/ immediate? I
> > don't see an API for that...), then have the kernel provide a dedicated accessor.
>
> I think you asked for it:
>
> https://lore.kernel.org/kvm/ZmoWB_XtA0wR2K4Q@google.com/
Gah, so I did. FWIW, comments like that aren't intended to be "you must do it
this way", i.e. it's ok to push back (if there's justification to do so), but I
can totally see how it came across that way.
> I assume fetching through per-CPU cache is fast, but I might have misunderstood
> your suggestion.
Oh, per-CPU cache is likely faster than RDMSR (though it would be nice to verify).
The part I specifically don't like is referencing DB, NMI, and DF stacks.
> > Then the accessor can be a non-inlined functions, and this code can be e.g.:
> >
> > if (IS_ENABLED(CONFIG_X86_64) && kvm_cpu_cap_has(X86_FEATURE_FRED)) {
> > vmcs_write64(HOST_IA32_FRED_RSP1, fred_rsp(MSR_IA32_FRED_RSP1));
> > vmcs_write64(HOST_IA32_FRED_RSP2, fred_rsp(MSR_IA32_FRED_RSP2));
> > vmcs_write64(HOST_IA32_FRED_RSP3, fred_rsp(MSR_IA32_FRED_RSP2));
^
|
3 (guess who failed at copy+paste)
> > }
> >
> > where fred_rsp() is _declared_ unconditionally, but implemented only for 64-bit.
> > That way the compiler will be happy, and the actual usage will be dropped before
> > linking via dead-code elimination.
>
> If KVM can’t rely on kernel side implementation details, fred_rsp() has to read
> directly from the corresponding MSRs, right?
No. If the kernel provides an API specifically for getting RSP values, then KVM
isn't rely on implementation details, KVM is relying on an (exported?) API, and
it's the _kernel's_ responsibility to ensure that API is updated as needed.
Yeah, yeah, KVM is also part of the kernel, but it's a _lot_ easier to forget to
update code when the implementation details change when some of the usage is "far"
away.
> > Actually, we can probably do one better?
> >
> > if (cpu_feature_enabled(X86_FEATURE_FRED) && kvm_cpu_cap_has(X86_FEATURE_FRED)) {
>
> I think KVM now forces X86_FEATURE_FRED=y, no?
32-bit doesn't :-D
But even for 64-bit, X86_FEATURE_FRED should be cleared when FRED isn't supported
by hardware, in which case cpu_feature_enabled() still patches out the text.
next prev parent reply other threads:[~2026-03-05 15:22 UTC|newest]
Thread overview: 106+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-26 20:18 [PATCH v9 00/22] Enable FRED with KVM VMX Xin Li (Intel)
2025-10-26 20:18 ` [PATCH v9 01/22] KVM: VMX: Enable support for secondary VM exit controls Xin Li (Intel)
2025-10-26 20:18 ` [PATCH v9 02/22] KVM: VMX: Initialize VM entry/exit FRED controls in vmcs_config Xin Li (Intel)
2026-01-20 9:24 ` Binbin Wu
2026-01-22 17:57 ` Xin Li
2025-10-26 20:18 ` [PATCH v9 03/22] KVM: VMX: Disable FRED if FRED consistency checks fail Xin Li (Intel)
2026-03-05 0:25 ` Sean Christopherson
2025-10-26 20:18 ` [PATCH v9 04/22] x86/cea: Prefix event stack names with ESTACK_ Xin Li (Intel)
2025-10-26 20:18 ` [PATCH v9 05/22] x86/cea: Use array indexing to simplify exception stack access Xin Li (Intel)
2025-10-27 15:49 ` Dave Hansen
2025-10-28 2:31 ` Xin Li
2026-01-30 13:42 ` Borislav Petkov
2025-10-26 20:18 ` [PATCH v9 06/22] x86/cea: Export __this_cpu_ist_top_va() to KVM Xin Li (Intel)
2025-10-27 15:50 ` Dave Hansen
2026-01-30 13:46 ` Borislav Petkov
2026-01-30 16:35 ` Xin Li
2026-01-30 17:56 ` Borislav Petkov
2026-03-07 7:38 ` Xin Li
2026-03-09 15:24 ` Sean Christopherson
2026-03-09 22:57 ` Xin Li
2025-10-26 20:18 ` [PATCH v9 07/22] KVM: VMX: Initialize VMCS FRED fields Xin Li (Intel)
2025-11-19 2:44 ` Chao Gao
2026-01-21 6:44 ` Binbin Wu
2026-01-21 18:14 ` Xin Li
2026-01-22 0:45 ` Xin Li
2026-01-22 1:56 ` Binbin Wu
2026-01-22 17:22 ` Xin Li
2026-03-04 16:23 ` Sean Christopherson
2026-03-05 5:27 ` Xin Li
2026-03-05 15:21 ` Sean Christopherson [this message]
2026-03-05 17:25 ` Xin Li
2025-10-26 20:18 ` [PATCH v9 08/22] KVM: VMX: Set FRED MSR intercepts Xin Li (Intel)
2025-11-12 5:49 ` Chao Gao
2026-03-05 0:48 ` Sean Christopherson
2026-03-05 5:56 ` Xin Li
2026-03-06 2:30 ` Chao Gao
2026-03-06 15:54 ` Sean Christopherson
2026-01-16 19:49 ` Dave Hansen
2026-01-17 0:43 ` H. Peter Anvin
2025-10-26 20:18 ` [PATCH v9 09/22] KVM: VMX: Save/restore guest FRED RSP0 Xin Li (Intel)
2025-11-12 5:59 ` Chao Gao
2026-01-21 7:23 ` Binbin Wu
2025-10-26 20:18 ` [PATCH v9 10/22] KVM: VMX: Add support for saving and restoring FRED MSRs Xin Li (Intel)
2025-11-12 6:16 ` Chao Gao
2025-12-01 6:20 ` Xin Li
2025-10-26 20:18 ` [PATCH v9 11/22] KVM: x86: Add a helper to detect if FRED is enabled for a vCPU Xin Li (Intel)
2025-11-12 6:19 ` Chao Gao
2026-01-21 8:05 ` Binbin Wu
2026-01-21 16:46 ` Xin Li
2026-01-21 20:24 ` Sean Christopherson
2026-01-21 22:38 ` Xin Li
2025-10-26 20:19 ` [PATCH v9 12/22] KVM: VMX: Virtualize FRED event_data Xin Li (Intel)
2025-11-19 3:24 ` Chao Gao
2026-01-29 17:12 ` Xin Li
2026-01-29 17:21 ` H. Peter Anvin
2026-01-29 22:50 ` Xin Li
2026-03-04 16:42 ` Sean Christopherson
2025-10-26 20:19 ` [PATCH v9 13/22] KVM: VMX: Virtualize FRED nested exception tracking Xin Li (Intel)
2025-11-19 6:54 ` Chao Gao
2026-03-07 2:07 ` Sean Christopherson
2026-03-07 3:05 ` Xin Li
2025-10-26 20:19 ` [PATCH v9 14/22] KVM: x86: Save/restore the nested flag of an exception Xin Li (Intel)
2025-11-19 6:13 ` Chao Gao
2025-10-26 20:19 ` [PATCH v9 15/22] KVM: x86: Mark CR4.FRED as not reserved Xin Li (Intel)
2025-11-19 7:26 ` Chao Gao
2026-03-05 0:58 ` Sean Christopherson
2026-03-05 7:20 ` Xin Li
2026-03-05 15:35 ` Sean Christopherson
2026-03-05 17:09 ` Xin Li
2026-03-05 17:46 ` Xin Li
2026-03-06 5:33 ` Chao Gao
2025-10-26 20:19 ` [PATCH v9 16/22] KVM: VMX: Dump FRED context in dump_vmcs() Xin Li (Intel)
2025-11-19 7:40 ` Chao Gao
2025-11-30 18:42 ` Xin Li
2025-10-26 20:19 ` [PATCH v9 17/22] KVM: x86: Advertise support for FRED Xin Li (Intel)
2025-11-12 7:30 ` Chao Gao
2026-01-20 6:56 ` Xin Li
2026-01-20 8:07 ` Chao Gao
2026-01-20 9:09 ` Xin Li
2026-01-20 9:46 ` Binbin Wu
2026-01-20 15:25 ` Sean Christopherson
2026-01-20 18:04 ` Xin Li
2026-01-20 17:58 ` Xin Li
2025-10-26 20:19 ` [PATCH v9 18/22] KVM: nVMX: Enable support for secondary VM exit controls Xin Li (Intel)
2025-11-12 13:42 ` Chao Gao
2025-10-26 20:19 ` [PATCH v9 19/22] KVM: nVMX: Handle FRED VMCS fields in nested VMX context Xin Li (Intel)
2025-12-02 6:32 ` Chao Gao
2026-01-20 6:30 ` Xin Li
2026-01-20 16:07 ` Dave Hansen
2026-01-20 18:10 ` Xin Li
2026-01-21 0:44 ` Chao Gao
2026-01-22 16:52 ` Xin Li
2025-12-08 22:37 ` Sean Christopherson
2025-10-26 20:19 ` [PATCH v9 20/22] KVM: nVMX: Validate FRED-related VMCS fields Xin Li (Intel)
2025-11-13 3:00 ` Chao Gao
2026-01-20 9:19 ` Xin Li
2026-01-21 2:33 ` Chao Gao
2025-10-26 20:19 ` [PATCH v9 21/22] KVM: nVMX: Guard SHADOW_FIELD_R[OW] macros with VMX feature checks Xin Li (Intel)
2025-12-02 6:35 ` Chao Gao
2025-12-08 22:49 ` Sean Christopherson
2025-10-26 20:19 ` [PATCH v9 22/22] KVM: nVMX: Enable VMX FRED controls Xin Li (Intel)
2025-11-13 3:20 ` Chao Gao
2025-11-06 17:35 ` [PATCH v9 00/22] Enable FRED with KVM VMX Xin Li
2025-11-13 22:20 ` Sean Christopherson
2025-12-08 22:51 ` Sean Christopherson
2025-12-09 17:08 ` Xin Li
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=aamfka09bDZV0iUO@google.com \
--to=seanjc@google.com \
--cc=andrew.cooper3@citrix.com \
--cc=binbin.wu@linux.intel.com \
--cc=bp@alien8.de \
--cc=chao.gao@intel.com \
--cc=corbet@lwn.net \
--cc=dave.hansen@linux.intel.com \
--cc=hch@infradead.org \
--cc=hpa@zytor.com \
--cc=kvm@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@kernel.org \
--cc=mingo@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peterz@infradead.org \
--cc=sohil.mehta@intel.com \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
--cc=xin@zytor.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