From: Liran Alon <LIRAN.ALON@ORACLE.COM>
To: Paolo Bonzini <pbonzini@redhat.com>,
rkrcmar@redhat.com, kvm@vger.kernel.org
Cc: jmattson@google.com, wanpeng.li@hotmail.com,
idan.brown@ORACLE.COM, Liam Merwick <liam.merwick@ORACLE.COM>
Subject: Re: [PATCH v3 11/11] KVM: nVMX: Wake L2 from HLT when nested posted-interrupt pending
Date: Wed, 27 Dec 2017 12:51:25 +0200 [thread overview]
Message-ID: <5A437B2D.30805@ORACLE.COM> (raw)
In-Reply-To: <f906d4ca-3a85-89ac-32e0-6d8b35a2455b@redhat.com>
On 27/12/17 12:15, Paolo Bonzini wrote:
> On 24/12/2017 17:13, Liran Alon wrote:
>> +static bool vmx_cpu_has_nested_posted_interrupt(struct kvm_vcpu *vcpu)
>> +{
>> + struct vcpu_vmx *vmx = to_vmx(vcpu);
>> +
>> + return (vcpu->arch.apicv_active &&
>> + is_guest_mode(vcpu) &&
>> + vmx->nested.pi_pending &&
>> + vmx->nested.pi_desc &&
>> + pi_test_on(vmx->nested.pi_desc));
>> +}
>> +
>> /*
>> * Set up the vmcs's constant host-state fields, i.e., host-state fields that
>> * will not change in the lifetime of the guest.
>> @@ -12142,6 +12153,8 @@ static int enable_smi_window(struct kvm_vcpu *vcpu)
>> .deliver_posted_interrupt = vmx_deliver_posted_interrupt,
>> .complete_nested_posted_interrupt =
>> vmx_complete_nested_posted_interrupt,
>> + .cpu_has_nested_posted_interrupt =
>> + vmx_cpu_has_nested_posted_interrupt,
>>
>> .set_tss_addr = vmx_set_tss_addr,
>> .get_tdp_level = get_ept_level,
>> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
>> index fa088951afc9..a840f2c9bd66 100644
>> --- a/arch/x86/kvm/x86.c
>> +++ b/arch/x86/kvm/x86.c
>> @@ -8542,7 +8542,8 @@ static inline bool kvm_vcpu_has_events(struct kvm_vcpu *vcpu)
>> return true;
>>
>> if (kvm_arch_interrupt_allowed(vcpu) &&
>> - kvm_cpu_has_interrupt(vcpu))
>> + (kvm_cpu_has_interrupt(vcpu) ||
>> + kvm_x86_ops->cpu_has_nested_posted_interrupt(vcpu)))
>> return true;
>
>
> kvm_cpu_has_interrupt ultimately calls apic_has_interrupt_for_ppr, which
> calls kvm_x86_ops->sync_pir_to_irr.
>
> You already have
>
> + if (is_guest_mode(vcpu))
> + kvm_x86_ops->complete_nested_posted_interrupt(vcpu);
>
> earlier in the series right after a call to kvm_x86_ops->sync_pir_to_irr.
>
> So I wonder if:
>
> 1) kvm_x86_ops->complete_nested_posted_interrupt would do the job here as
> well, removing the need for the new kvm_x86_ops member;
>
> 2) The call to kvm_x86_ops->complete_nested_posted_interrupt actually
> applies to all callers of sync_pir_to_irr, which would remove the need for
> that other kvm_x86_ops member.
Maybe I misunderstand you, but I don't think this is true.
complete_nested_posted_interrupt() relies on being called at a very
specific call-site: Right before VMEntry and after interrupts are
disabled. It works by issue a self-IPI to cause CPU to actually process
the nested posted-interrupts.
In addition, I don't see how we can utilize the fact that
kvm_cpu_has_interrupt() calls apic_has_interrupt_for_ppr() as
vmx.nested.pi_desc->pir should never be synced into L0 vLAPIC IRR.
In contrast to vmx.pi_desc->pir which does after sync_pir_to_irr().
>
> I'm leaning towards applying patches 1-4, what do you think?
>
I don't see any reason not to do so if it passes your review :)
Logically these patches are separated from the patches we still debate on.
Regards,
-Liran
> Paolo
>
next prev parent reply other threads:[~2017-12-27 10:51 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-12-24 16:12 [PATCH v3 00/11] KVM: nVMX: Fix multiple issues in nested posted-interrupts Liran Alon
2017-12-24 16:12 ` [PATCH v3 01/11] KVM: x86: Optimization: Create SVM stubs for sync_pir_to_irr() Liran Alon
2017-12-27 9:56 ` Paolo Bonzini
2017-12-27 10:01 ` Liran Alon
2017-12-24 16:12 ` [PATCH v3 02/11] KVM: x86: Change __kvm_apic_update_irr() to also return if max IRR updated Liran Alon
2018-01-02 1:51 ` Quan Xu
2017-12-24 16:12 ` [PATCH v3 03/11] KVM: nVMX: Re-evaluate L1 pending events when running L2 and L1 got posted-interrupt Liran Alon
2018-01-02 2:45 ` Quan Xu
2018-01-02 9:57 ` Liran Alon
2018-01-02 11:21 ` Quan Xu
2018-01-02 11:52 ` Quan Xu
2018-01-02 12:20 ` Liran Alon
2018-01-03 5:32 ` Quan Xu
2018-01-03 5:35 ` Quan Xu
2017-12-24 16:12 ` [PATCH v3 04/11] KVM: nVMX: Fix injection to L2 when L1 don't intercept external-interrupts Liran Alon
2017-12-24 16:12 ` [PATCH v3 05/11] KVM: x86: Rename functions which saves vCPU in per-cpu var Liran Alon
2017-12-24 16:12 ` [PATCH v3 06/11] KVM: x86: Set current_vcpu per-cpu var before enabling interrupts at host Liran Alon
2017-12-27 10:06 ` Paolo Bonzini
2017-12-27 10:44 ` Liran Alon
2017-12-24 16:12 ` [PATCH v3 07/11] KVM: x86: Add util for getting current vCPU running on CPU Liran Alon
2017-12-24 16:13 ` [PATCH v3 08/11] KVM: x86: Register empty handler for POSTED_INTR_NESTED_VECTOR IPI Liran Alon
2017-12-24 16:13 ` [PATCH v3 09/11] KVM: nVMX: Deliver missed nested-PI notification-vector via self-IPI while interrupts disabled Liran Alon
2017-12-24 16:13 ` [PATCH v3 10/11] KVM: nVMX: Wake halted L2 on nested posted-interrupt Liran Alon
2017-12-27 11:31 ` Paolo Bonzini
2017-12-27 12:01 ` Liran Alon
2017-12-27 12:27 ` Paolo Bonzini
2017-12-27 12:52 ` Liran Alon
2017-12-27 13:05 ` Paolo Bonzini
2017-12-27 15:33 ` Liran Alon
2017-12-27 15:54 ` Paolo Bonzini
2018-01-01 21:32 ` Paolo Bonzini
2018-01-01 22:37 ` Liran Alon
2018-01-02 7:25 ` Paolo Bonzini
2017-12-24 16:13 ` [PATCH v3 11/11] KVM: nVMX: Wake L2 from HLT when nested posted-interrupt pending Liran Alon
2017-12-27 10:15 ` Paolo Bonzini
2017-12-27 10:51 ` Liran Alon [this message]
2017-12-27 12:55 ` Paolo Bonzini
2017-12-27 15:15 ` Liran Alon
2017-12-27 15:55 ` Paolo Bonzini
2020-11-23 19:22 ` Oliver Upton
2020-11-23 22:42 ` Paolo Bonzini
2020-11-24 0:10 ` Oliver Upton
2020-11-24 0:13 ` Oliver Upton
2020-11-24 1:55 ` Sean Christopherson
2020-11-24 3:19 ` Sean Christopherson
2020-11-24 11:39 ` Paolo Bonzini
2020-11-24 21:22 ` Sean Christopherson
2020-11-25 0:10 ` Paolo Bonzini
2020-11-25 1:14 ` Sean Christopherson
2020-11-25 17:00 ` Paolo Bonzini
2020-11-25 18:32 ` Sean Christopherson
2020-11-26 13:13 ` Paolo Bonzini
2020-11-30 19:14 ` Sean Christopherson
2020-11-30 19:36 ` Paolo Bonzini
2020-12-03 22:07 ` Jim Mattson
2020-11-24 11:09 ` Paolo Bonzini
2020-12-03 21:45 ` Jim Mattson
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=5A437B2D.30805@ORACLE.COM \
--to=liran.alon@oracle.com \
--cc=idan.brown@ORACLE.COM \
--cc=jmattson@google.com \
--cc=kvm@vger.kernel.org \
--cc=liam.merwick@ORACLE.COM \
--cc=pbonzini@redhat.com \
--cc=rkrcmar@redhat.com \
--cc=wanpeng.li@hotmail.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.