From: Chao Gao <chao.gao@intel.com>
To: "Xin Li (Intel)" <xin@zytor.com>
Cc: <kvm@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<linux-doc@vger.kernel.org>, <seanjc@google.com>,
<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>
Subject: Re: [PATCH v3 16/27] KVM: VMX: Virtualize FRED nested exception tracking
Date: Thu, 24 Oct 2024 14:24:19 +0800 [thread overview]
Message-ID: <ZxnoE6ltLawgPHdZ@intel.com> (raw)
In-Reply-To: <20241001050110.3643764-17-xin@zytor.com>
>diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
>index b9b82aaea9a3..3830084b569b 100644
>--- a/arch/x86/include/asm/kvm_host.h
>+++ b/arch/x86/include/asm/kvm_host.h
>@@ -736,6 +736,7 @@ struct kvm_queued_exception {
> u32 error_code;
> unsigned long payload;
> bool has_payload;
>+ bool nested;
> u64 event_data;
how "nested" is migrated in live migration?
> };
[..]
>
>diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
>index d81144bd648f..03f42b218554 100644
>--- a/arch/x86/kvm/vmx/vmx.c
>+++ b/arch/x86/kvm/vmx/vmx.c
>@@ -1910,8 +1910,11 @@ void vmx_inject_exception(struct kvm_vcpu *vcpu)
> vmcs_write32(VM_ENTRY_INSTRUCTION_LEN,
> vmx->vcpu.arch.event_exit_inst_len);
> intr_info |= INTR_TYPE_SOFT_EXCEPTION;
>- } else
>+ } else {
> intr_info |= INTR_TYPE_HARD_EXCEPTION;
>+ if (ex->nested)
>+ intr_info |= INTR_INFO_NESTED_EXCEPTION_MASK;
how about moving the is_fred_enable() check from kvm_multiple_exception() to here? i.e.,
if (ex->nested && is_fred_enabled(vcpu))
intr_info |= INTR_INFO_NESTED_EXCEPTION_MASK;
It is slightly clearer because FRED details don't bleed into kvm_multiple_exception().
>+ }
>
> vmcs_write32(VM_ENTRY_INTR_INFO_FIELD, intr_info);
>
>@@ -7290,6 +7293,7 @@ static void __vmx_complete_interrupts(struct kvm_vcpu *vcpu,
> kvm_requeue_exception(vcpu, vector,
> idt_vectoring_info & VECTORING_INFO_DELIVER_CODE_MASK,
> error_code,
>+ idt_vectoring_info & VECTORING_INFO_NESTED_EXCEPTION_MASK,
> event_data);
> break;
> }
>diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
>index 7a55c1eb5297..8546629166e9 100644
>--- a/arch/x86/kvm/x86.c
>+++ b/arch/x86/kvm/x86.c
>@@ -874,6 +874,11 @@ static void kvm_multiple_exception(struct kvm_vcpu *vcpu, unsigned int nr,
> vcpu->arch.exception.pending = true;
> vcpu->arch.exception.injected = false;
>
>+ vcpu->arch.exception.nested = vcpu->arch.exception.nested ||
>+ (is_fred_enabled(vcpu) &&
>+ (vcpu->arch.nmi_injected ||
>+ vcpu->arch.interrupt.injected));
>+
> vcpu->arch.exception.has_error_code = has_error;
> vcpu->arch.exception.vector = nr;
> vcpu->arch.exception.error_code = error_code;
>@@ -903,8 +908,13 @@ static void kvm_multiple_exception(struct kvm_vcpu *vcpu, unsigned int nr,
> vcpu->arch.exception.injected = false;
> vcpu->arch.exception.pending = false;
>
>+ /* #DF is NOT a nested event, per its definition. */
>+ vcpu->arch.exception.nested = false;
>+
> kvm_queue_exception_e(vcpu, DF_VECTOR, 0);
> } else {
>+ vcpu->arch.exception.nested = is_fred_enabled(vcpu);
>+
> /* replace previous exception with a new one in a hope
> that instruction re-execution will regenerate lost
> exception */
next prev parent reply other threads:[~2024-10-24 6:24 UTC|newest]
Thread overview: 81+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-01 5:00 [PATCH v3 00/27] Enable FRED with KVM VMX Xin Li (Intel)
2024-10-01 5:00 ` [PATCH v3 01/27] KVM: x86: Use a dedicated flow for queueing re-injected exceptions Xin Li (Intel)
2024-10-01 5:00 ` [PATCH v3 02/27] KVM: VMX: Don't modify guest XFD_ERR if CR0.TS=1 Xin Li (Intel)
2024-10-01 5:00 ` [PATCH v3 03/27] KVM: VMX: Add support for the secondary VM exit controls Xin Li (Intel)
2024-10-21 8:28 ` Chao Gao
2024-10-21 17:03 ` Xin Li
2024-10-22 2:47 ` Chao Gao
2024-10-22 16:30 ` Xin Li
2025-02-25 17:28 ` Sean Christopherson
2024-10-01 5:00 ` [PATCH v3 04/27] KVM: VMX: Initialize FRED VM entry/exit controls in vmcs_config Xin Li (Intel)
2024-10-01 5:00 ` [PATCH v3 05/27] KVM: VMX: Disable FRED if FRED consistency checks fail Xin Li (Intel)
2024-10-22 8:48 ` Chao Gao
2024-10-22 16:21 ` Xin Li
2024-11-26 15:32 ` Borislav Petkov
2024-11-26 18:53 ` Xin Li
2024-11-26 19:04 ` Borislav Petkov
2024-10-01 5:00 ` [PATCH v3 06/27] x86/cea: Export per CPU variable cea_exception_stacks Xin Li (Intel)
2024-10-01 16:12 ` Dave Hansen
2024-10-01 17:51 ` Xin Li
2024-10-01 18:18 ` Dave Hansen
2024-10-01 5:00 ` [PATCH v3 07/27] KVM: VMX: Initialize VMCS FRED fields Xin Li (Intel)
2024-10-22 9:06 ` Chao Gao
2024-10-22 16:18 ` Xin Li
2024-10-01 5:00 ` [PATCH v3 08/27] KVM: x86: Use KVM-governed feature framework to track "FRED enabled" Xin Li (Intel)
2024-10-01 5:00 ` [PATCH v3 09/27] KVM: VMX: Do not use MAX_POSSIBLE_PASSTHROUGH_MSRS in array definition Xin Li (Intel)
2024-11-26 18:02 ` Borislav Petkov
2024-11-26 19:22 ` Xin Li
2024-11-26 20:06 ` Borislav Petkov
2024-11-27 6:46 ` Xin Li
2024-11-27 6:55 ` Borislav Petkov
2024-11-27 7:02 ` Xin Li
2024-11-27 7:10 ` Borislav Petkov
2024-11-27 7:32 ` Xin Li
2024-11-27 7:58 ` Borislav Petkov
2024-10-01 5:00 ` [PATCH v3 10/27] KVM: VMX: Set FRED MSR interception Xin Li (Intel)
2024-11-13 11:31 ` Chao Gao
2024-10-01 5:00 ` [PATCH v3 11/27] KVM: VMX: Save/restore guest FRED RSP0 Xin Li (Intel)
2024-10-01 5:00 ` [PATCH v3 12/27] KVM: VMX: Add support for FRED context save/restore Xin Li (Intel)
2024-10-01 5:00 ` [PATCH v3 13/27] KVM: x86: Add a helper to detect if FRED is enabled for a vCPU Xin Li (Intel)
2024-10-01 5:00 ` [PATCH v3 14/27] KVM: VMX: Pass XFD_ERR as pseudo-payload when injecting #NM Xin Li (Intel)
2024-10-01 5:00 ` [PATCH v3 15/27] KVM: VMX: Virtualize FRED event_data Xin Li (Intel)
2024-10-01 5:00 ` [PATCH v3 16/27] KVM: VMX: Virtualize FRED nested exception tracking Xin Li (Intel)
2024-10-24 6:24 ` Chao Gao [this message]
2024-10-25 8:04 ` Xin Li
2024-10-28 6:33 ` Chao Gao
2024-12-05 7:16 ` Xin Li
2024-10-01 5:01 ` [PATCH v3 17/27] KVM: x86: Mark CR4.FRED as not reserved when guest can use FRED Xin Li (Intel)
2024-10-24 7:18 ` Chao Gao
2024-12-12 18:48 ` Xin Li
2024-12-12 19:05 ` Sean Christopherson
2024-12-13 18:43 ` Xin Li
2024-10-01 5:01 ` [PATCH v3 18/27] KVM: VMX: Dump FRED context in dump_vmcs() Xin Li (Intel)
2024-10-24 7:23 ` Chao Gao
2024-10-24 16:50 ` Xin Li
2024-10-01 5:01 ` [PATCH v3 19/27] KVM: x86: Allow FRED/LKGS to be advertised to guests Xin Li (Intel)
2024-10-01 5:01 ` [PATCH v3 20/27] KVM: x86: Allow WRMSRNS " Xin Li (Intel)
2025-02-25 15:41 ` Sean Christopherson
2024-10-01 5:01 ` [PATCH v3 21/27] KVM: VMX: Invoke vmx_set_cpu_caps() before nested setup Xin Li (Intel)
2024-10-24 7:49 ` Chao Gao
2024-10-25 7:34 ` Xin Li
2025-02-25 16:01 ` Sean Christopherson
2024-10-01 5:01 ` [PATCH v3 22/27] KVM: nVMX: Add support for the secondary VM exit controls Xin Li (Intel)
2024-10-01 5:01 ` [PATCH v3 23/27] KVM: nVMX: Add a prerequisite to SHADOW_FIELD_R[OW] macros Xin Li (Intel)
2024-10-01 5:01 ` [PATCH v3 24/27] KVM: nVMX: Add a prerequisite to existence of VMCS fields Xin Li (Intel)
2025-02-25 16:22 ` Sean Christopherson
2025-02-25 16:37 ` Xin Li
2025-02-25 19:32 ` Sean Christopherson
2024-10-01 5:01 ` [PATCH v3 25/27] KVM: nVMX: Add FRED " Xin Li (Intel)
2024-10-24 7:42 ` Chao Gao
2024-10-25 7:25 ` Xin Li
2024-10-28 9:07 ` Chao Gao
2024-10-28 18:27 ` Sean Christopherson
2024-10-29 17:40 ` Xin Li
2024-10-01 5:01 ` [PATCH v3 26/27] KVM: nVMX: Add VMCS FRED states checking Xin Li (Intel)
2024-10-01 5:01 ` [PATCH v3 27/27] KVM: nVMX: Allow VMX FRED controls Xin Li (Intel)
2025-02-19 0:26 ` [PATCH v3 00/27] Enable FRED with KVM VMX Xin Li
2025-02-25 15:24 ` Sean Christopherson
2025-02-25 17:04 ` Xin Li
2025-02-25 17:35 ` Sean Christopherson
2025-02-25 18:48 ` Xin Li
2025-02-28 17:06 ` Sean Christopherson
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=ZxnoE6ltLawgPHdZ@intel.com \
--to=chao.gao@intel.com \
--cc=andrew.cooper3@citrix.com \
--cc=bp@alien8.de \
--cc=corbet@lwn.net \
--cc=dave.hansen@linux.intel.com \
--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=seanjc@google.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.