From: Sean Christopherson via iommu <iommu@lists.linux-foundation.org>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: Wanpeng Li <wanpengli@tencent.com>,
kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
Maxim Levitsky <mlevitsk@redhat.com>,
iommu@lists.linux-foundation.org,
Vitaly Kuznetsov <vkuznets@redhat.com>,
Jim Mattson <jmattson@google.com>
Subject: Re: [PATCH v3 21/26] KVM: SVM: Drop AVIC's intermediate avic_set_running() helper
Date: Wed, 8 Dec 2021 15:43:16 +0000 [thread overview]
Message-ID: <YbDSlNsY8b2O8PtM@google.com> (raw)
In-Reply-To: <e1c4ec6a-7c1e-b96c-63e6-d07b35820def@redhat.com>
On Wed, Dec 08, 2021, Paolo Bonzini wrote:
> On 12/8/21 02:52, Sean Christopherson wrote:
> > + /*
> > + * Unload the AVIC when the vCPU is about to block,_before_ the vCPU
> > + * actually blocks. The vCPU needs to be marked IsRunning=0 before the
> > + * final pass over the vIRR via kvm_vcpu_check_block(). Any IRQs that
> > + * arrive before IsRunning=0 will not signal the doorbell, i.e. it's
> > + * KVM's responsibility to ensure there are no pending IRQs in the vIRR
> > + * after IsRunning is cleared, prior to scheduling out the vCPU.
>
> I prefer to phrase this around paired memory barriers and the usual
> store/smp_mb/load lockless idiom:
I've no objection to that, my goal is/was purely to emphasize the need to manually
process the vIRR after clearing IsRunning.
> /*
> * Unload the AVIC when the vCPU is about to block, _before_
> * the vCPU actually blocks.
> *
> * Any IRQs that arrive before IsRunning=0 will not cause an
> * incomplete IPI vmexit on the source,
It's not just IPIs, the GA log will also suffer the same fate. That's why I
didn't mention incomplete VM-Exits. I'm certainly not opposed to that clarification,
but I don't want readers to walk away thinking this is only a problem for IPIs.
> therefore vIRR will also
"s/vIRR will/the vIRR must" to make it abundantly clear that checking the vIRR
is effectively a hard requirement.
> * be checked by kvm_vcpu_check_block() before blocking. The
> * memory barrier implicit in set_current_state orders writing
set_current_state()
> * IsRunning=0 before reading the vIRR. The processor needs a
> * matching memory barrier on interrupt delivery between writing
> * IRR and reading IsRunning; the lack of this barrier might be
Missing the opening paranthesis.
> * the cause of errata #1235).
> */
_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu
WARNING: multiple messages have this Message-ID (diff)
From: Sean Christopherson <seanjc@google.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: Joerg Roedel <joro@8bytes.org>,
Vitaly Kuznetsov <vkuznets@redhat.com>,
Wanpeng Li <wanpengli@tencent.com>,
Jim Mattson <jmattson@google.com>,
Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>,
kvm@vger.kernel.org, iommu@lists.linux-foundation.org,
linux-kernel@vger.kernel.org,
Maxim Levitsky <mlevitsk@redhat.com>
Subject: Re: [PATCH v3 21/26] KVM: SVM: Drop AVIC's intermediate avic_set_running() helper
Date: Wed, 8 Dec 2021 15:43:16 +0000 [thread overview]
Message-ID: <YbDSlNsY8b2O8PtM@google.com> (raw)
In-Reply-To: <e1c4ec6a-7c1e-b96c-63e6-d07b35820def@redhat.com>
On Wed, Dec 08, 2021, Paolo Bonzini wrote:
> On 12/8/21 02:52, Sean Christopherson wrote:
> > + /*
> > + * Unload the AVIC when the vCPU is about to block,_before_ the vCPU
> > + * actually blocks. The vCPU needs to be marked IsRunning=0 before the
> > + * final pass over the vIRR via kvm_vcpu_check_block(). Any IRQs that
> > + * arrive before IsRunning=0 will not signal the doorbell, i.e. it's
> > + * KVM's responsibility to ensure there are no pending IRQs in the vIRR
> > + * after IsRunning is cleared, prior to scheduling out the vCPU.
>
> I prefer to phrase this around paired memory barriers and the usual
> store/smp_mb/load lockless idiom:
I've no objection to that, my goal is/was purely to emphasize the need to manually
process the vIRR after clearing IsRunning.
> /*
> * Unload the AVIC when the vCPU is about to block, _before_
> * the vCPU actually blocks.
> *
> * Any IRQs that arrive before IsRunning=0 will not cause an
> * incomplete IPI vmexit on the source,
It's not just IPIs, the GA log will also suffer the same fate. That's why I
didn't mention incomplete VM-Exits. I'm certainly not opposed to that clarification,
but I don't want readers to walk away thinking this is only a problem for IPIs.
> therefore vIRR will also
"s/vIRR will/the vIRR must" to make it abundantly clear that checking the vIRR
is effectively a hard requirement.
> * be checked by kvm_vcpu_check_block() before blocking. The
> * memory barrier implicit in set_current_state orders writing
set_current_state()
> * IsRunning=0 before reading the vIRR. The processor needs a
> * matching memory barrier on interrupt delivery between writing
> * IRR and reading IsRunning; the lack of this barrier might be
Missing the opening paranthesis.
> * the cause of errata #1235).
> */
next prev parent reply other threads:[~2021-12-08 15:43 UTC|newest]
Thread overview: 96+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-12-08 1:52 [PATCH v3 00/26] KVM: x86: Halt and APICv overhaul Sean Christopherson via iommu
2021-12-08 1:52 ` Sean Christopherson
2021-12-08 1:52 ` [PATCH v3 01/26] KVM: fix avic_set_running for preemptable kernels Sean Christopherson via iommu
2021-12-08 1:52 ` Sean Christopherson
2021-12-08 1:52 ` [PATCH v3 02/26] KVM: nVMX: Ensure vCPU honors event request if posting nested IRQ fails Sean Christopherson via iommu
2021-12-08 1:52 ` Sean Christopherson
2021-12-08 1:52 ` [PATCH v3 03/26] KVM: VMX: Clean up PI pre/post-block WARNs Sean Christopherson via iommu
2021-12-08 1:52 ` Sean Christopherson
2021-12-08 1:52 ` [PATCH v3 04/26] KVM: VMX: Handle PI wakeup shenanigans during vcpu_put/load Sean Christopherson via iommu
2021-12-08 1:52 ` Sean Christopherson
2021-12-08 1:52 ` [PATCH v3 05/26] KVM: Drop unused kvm_vcpu.pre_pcpu field Sean Christopherson via iommu
2021-12-08 1:52 ` Sean Christopherson
2021-12-08 1:52 ` [PATCH v3 06/26] KVM: Move x86 VMX's posted interrupt list_head to vcpu_vmx Sean Christopherson via iommu
2021-12-08 1:52 ` Sean Christopherson
2021-12-08 1:52 ` [PATCH v3 07/26] KVM: VMX: Move preemption timer <=> hrtimer dance to common x86 Sean Christopherson via iommu
2021-12-08 1:52 ` Sean Christopherson
2023-03-29 12:34 ` Tudor Ambarus
2023-03-29 13:47 ` Paolo Bonzini
2023-03-29 15:22 ` Tudor Ambarus
2023-03-30 7:12 ` Tudor Ambarus
2021-12-08 1:52 ` [PATCH v3 08/26] KVM: x86: Unexport LAPIC's switch_to_{hv, sw}_timer() helpers Sean Christopherson via iommu
2021-12-08 1:52 ` [PATCH v3 08/26] KVM: x86: Unexport LAPIC's switch_to_{hv,sw}_timer() helpers Sean Christopherson
2021-12-08 1:52 ` [PATCH v3 09/26] KVM: x86: Remove defunct pre_block/post_block kvm_x86_ops hooks Sean Christopherson via iommu
2021-12-08 1:52 ` Sean Christopherson
2021-12-08 1:52 ` [PATCH v3 10/26] KVM: SVM: Signal AVIC doorbell iff vCPU is in guest mode Sean Christopherson via iommu
2021-12-08 1:52 ` Sean Christopherson
2021-12-08 1:52 ` [PATCH v3 11/26] KVM: SVM: Don't bother checking for "running" AVIC when kicking for IPIs Sean Christopherson via iommu
2021-12-08 1:52 ` Sean Christopherson
2021-12-08 1:52 ` [PATCH v3 12/26] KVM: SVM: Remove unnecessary APICv/AVIC update in vCPU unblocking path Sean Christopherson via iommu
2021-12-08 1:52 ` Sean Christopherson
2021-12-08 1:52 ` [PATCH v3 13/26] KVM: SVM: Use kvm_vcpu_is_blocking() in AVIC load to handle preemption Sean Christopherson via iommu
2021-12-08 1:52 ` Sean Christopherson
2021-12-08 1:52 ` [PATCH v3 14/26] KVM: SVM: Skip AVIC and IRTE updates when loading blocking vCPU Sean Christopherson via iommu
2021-12-08 1:52 ` Sean Christopherson
2021-12-08 1:52 ` [PATCH v3 15/26] iommu/amd: KVM: SVM: Use pCPU to infer IsRun state for IRTE Sean Christopherson via iommu
2021-12-08 1:52 ` Sean Christopherson
2021-12-08 1:52 ` [PATCH v3 16/26] KVM: VMX: Don't do full kick when triggering posted interrupt "fails" Sean Christopherson via iommu
2021-12-08 1:52 ` Sean Christopherson
2021-12-08 1:52 ` [PATCH v3 17/26] KVM: VMX: Wake vCPU when delivering posted IRQ even if vCPU == this vCPU Sean Christopherson via iommu
2021-12-08 1:52 ` Sean Christopherson
2021-12-08 1:52 ` [PATCH v3 18/26] KVM: VMX: Pass desired vector instead of bool for triggering posted IRQ Sean Christopherson via iommu
2021-12-08 1:52 ` Sean Christopherson
2021-12-08 1:52 ` [PATCH v3 19/26] KVM: VMX: Fold fallback path into triggering posted IRQ helper Sean Christopherson via iommu
2021-12-08 1:52 ` Sean Christopherson
2021-12-08 1:52 ` [PATCH v3 20/26] KVM: VMX: Don't do full kick when handling posted interrupt wakeup Sean Christopherson via iommu
2021-12-08 1:52 ` Sean Christopherson
2021-12-08 1:52 ` [PATCH v3 21/26] KVM: SVM: Drop AVIC's intermediate avic_set_running() helper Sean Christopherson via iommu
2021-12-08 1:52 ` Sean Christopherson
2021-12-08 14:43 ` Paolo Bonzini
2021-12-08 14:43 ` Paolo Bonzini
2021-12-08 15:03 ` Maxim Levitsky
2021-12-08 15:03 ` Maxim Levitsky
2021-12-08 15:43 ` Sean Christopherson via iommu [this message]
2021-12-08 15:43 ` Sean Christopherson
2021-12-08 1:52 ` [PATCH v3 22/26] KVM: SVM: Move svm_hardware_setup() and its helpers below svm_x86_ops Sean Christopherson via iommu
2021-12-08 1:52 ` Sean Christopherson
2021-12-08 1:52 ` [PATCH v3 23/26] KVM: SVM: Nullify vcpu_(un)blocking() hooks if AVIC is disabled Sean Christopherson via iommu
2021-12-08 1:52 ` Sean Christopherson
2021-12-08 1:52 ` [PATCH v3 24/26] KVM: x86: Skip APICv update if APICv is disable at the module level Sean Christopherson via iommu
2021-12-08 1:52 ` Sean Christopherson
2021-12-08 1:52 ` [PATCH v3 25/26] KVM: x86: Drop NULL check on kvm_x86_ops.check_apicv_inhibit_reasons Sean Christopherson via iommu
2021-12-08 1:52 ` Sean Christopherson
2021-12-08 1:52 ` [PATCH v3 26/26] KVM: x86: Unexport __kvm_request_apicv_update() Sean Christopherson via iommu
2021-12-08 1:52 ` Sean Christopherson
2021-12-08 9:04 ` [PATCH v3 00/26] KVM: x86: Halt and APICv overhaul Paolo Bonzini
2021-12-08 9:04 ` Paolo Bonzini
2021-12-08 14:51 ` Paolo Bonzini
2021-12-08 14:51 ` Paolo Bonzini
2021-12-08 23:00 ` Maxim Levitsky
2021-12-08 23:00 ` Maxim Levitsky
2021-12-08 23:16 ` Maxim Levitsky
2021-12-08 23:16 ` Maxim Levitsky
2021-12-08 23:34 ` Maxim Levitsky
2021-12-08 23:34 ` Maxim Levitsky
2021-12-09 0:04 ` Sean Christopherson via iommu
2021-12-09 0:04 ` Sean Christopherson
2021-12-09 6:36 ` Maxim Levitsky
2021-12-09 6:36 ` Maxim Levitsky
2021-12-09 0:02 ` Sean Christopherson via iommu
2021-12-09 0:02 ` Sean Christopherson
2021-12-09 14:29 ` Paolo Bonzini
2021-12-09 14:29 ` Paolo Bonzini
2021-12-09 14:48 ` Maxim Levitsky
2021-12-09 14:48 ` Maxim Levitsky
2021-12-09 15:45 ` Sean Christopherson via iommu
2021-12-09 15:45 ` Sean Christopherson
2021-12-09 16:03 ` Maxim Levitsky
2021-12-09 16:03 ` Maxim Levitsky
2021-12-09 1:37 ` Sean Christopherson via iommu
2021-12-09 1:37 ` Sean Christopherson
2021-12-09 6:31 ` Maxim Levitsky
2021-12-09 6:31 ` Maxim Levitsky
2021-12-08 23:43 ` Sean Christopherson via iommu
2021-12-08 23:43 ` Sean Christopherson
2021-12-09 6:34 ` Maxim Levitsky
2021-12-09 6:34 ` Maxim Levitsky
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=YbDSlNsY8b2O8PtM@google.com \
--to=iommu@lists.linux-foundation.org \
--cc=jmattson@google.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mlevitsk@redhat.com \
--cc=pbonzini@redhat.com \
--cc=seanjc@google.com \
--cc=vkuznets@redhat.com \
--cc=wanpengli@tencent.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.