From: Sean Christopherson <seanjc@google.com>
To: Xin Li <xin@zytor.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>, Chao Gao <chao.gao@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, luto@kernel.org,
peterz@infradead.org, andrew.cooper3@citrix.com,
hch@infradead.org, sohil.mehta@intel.com
Subject: Re: [PATCH v9 12/22] KVM: VMX: Virtualize FRED event_data
Date: Wed, 4 Mar 2026 08:42:36 -0800 [thread overview]
Message-ID: <aahg_PgO5mwjArZ6@google.com> (raw)
In-Reply-To: <A7B34157-A5CA-430C-A459-E8E142951ECB@zytor.com>
On Thu, Jan 29, 2026, Xin Li wrote:
> > On Jan 29, 2026, at 9:21 AM, H. Peter Anvin <hpa@zytor.com> wrote:
> >
> >> Just to confirm, you are referring to requeueing an original event
> >> via vmx_complete_interrupts(), right?
> >>
> >> Regardless of whether FRED or IDT is in use, the event payload is delivered
> >> into the appropriate guest state and then invalidated in
> >> kvm_deliver_exception_payload():
> >>
> >> 1) CR2 for #PF
> >>
> >> 2) DR6 for #DB
> >>
> >> 3) guest_fpu.xfd_err for #NM (in handle_nm_fault_irqoff())
> >>
> >> We should be able to recover the FRED event data from there.
> >>
> >> Alternatively, we could drop the original event and allow the hardware to
> >> regenerate it upon resuming the guest. However, this breaks #DB delivery,
> >> as debug exceptions sometimes are triggered post-instruction.
> >>
> >> Sean, does it make sense to recover the FRED event data from guest CPU state?
No? As Peter points out, the payload is tied to the exception and shouldn't
change.
> > I think some bits in DR6 are "sticky", and so unless the guest has
> > explicitly cleared DR6 the event data isn't necessarily derivable from DR6.
> > However, the FRED event data for #DB is directly based on the data already
> > reported by VTx (for exactly the same reason – knowing what the *currently
> > taken* trap represents.)
>
> Yeah, it's important to keep in mind that DR6 bits are 'sticky'.
>
> Regarding vmx_complete_interrupts(), when a VM migration occurs immediately
> following a VM exit with a valid original event saved in the VMCS, we can
> safely assume the guest DR6 state remains consistent with the original event
> data because there is no chance for guest OS to modify DR6.
There's a different problem though. If there's a re-injected exception at the
time of save/restore, the destination vCPU won't see a valid payload and thus
won't set the appropriate FRED VMCS fields.
We _could_ extend KVM's uAPI to save/restore event_data, but ugh. Rather than
add event_data, what if we reuse payload, and then simply skip updating register
state on re-injection? E.g.
diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
index 967b58a8ab9d..b79d545d69c7 100644
--- a/arch/x86/kvm/vmx/vmx.c
+++ b/arch/x86/kvm/vmx/vmx.c
@@ -1941,6 +1941,9 @@ void vmx_inject_exception(struct kvm_vcpu *vcpu)
u32 intr_info = ex->vector | INTR_INFO_VALID_MASK;
struct vcpu_vmx *vmx = to_vmx(vcpu);
+ if (ex->has_payload)
+ <do fred>;
+
kvm_deliver_exception_payload(vcpu, ex);
if (ex->has_error_code) {
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index db3f393192d9..485eec337203 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -773,6 +773,9 @@ void kvm_deliver_exception_payload(struct kvm_vcpu *vcpu,
if (!ex->has_payload)
return;
+ if (ex->injected)
+ goto clear_payload;
+
switch (ex->vector) {
case DB_VECTOR:
/*
@@ -814,6 +817,7 @@ void kvm_deliver_exception_payload(struct kvm_vcpu *vcpu,
break;
}
+clear_payload:
ex->has_payload = false;
ex->payload = 0;
}
next prev parent reply other threads:[~2026-03-04 16:42 UTC|newest]
Thread overview: 123+ 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
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 [this message]
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
2026-04-23 14:35 ` David Woodhouse
2026-04-23 22:56 ` Xin Li
2026-05-05 18:04 ` Maciej Wieczor-Retman
2026-05-05 18:30 ` Andrew Cooper
2026-05-05 19:29 ` H. Peter Anvin
2026-05-05 20:20 ` Maciej Wieczor-Retman
2026-05-05 20:27 ` Andrew Cooper
2026-05-06 14:05 ` Maciej Wieczor-Retman
2026-05-07 7:49 ` David Woodhouse
2026-05-07 12:59 ` Maciej Wieczor-Retman
2026-05-07 13:35 ` David Woodhouse
2026-05-07 13:53 ` Maciej Wieczor-Retman
2026-05-07 14:01 ` David Woodhouse
2026-05-07 23:00 ` David Woodhouse
2026-05-08 14:25 ` Maciej Wieczor-Retman
2026-05-08 14:46 ` David Woodhouse
2026-05-08 18:06 ` Maciej Wieczor-Retman
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=aahg_PgO5mwjArZ6@google.com \
--to=seanjc@google.com \
--cc=andrew.cooper3@citrix.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 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.