All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sean Christopherson <seanjc@google.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org,
	mlevitsk@redhat.com, vkuznets@redhat.com
Subject: Re: [PATCH v2 8/9] KVM: x86: lapic does not have to process INIT if it is blocked
Date: Wed, 17 Aug 2022 00:07:03 +0000	[thread overview]
Message-ID: <YvwxJzHC5xYnc7CJ@google.com> (raw)
In-Reply-To: <20220811210605.402337-9-pbonzini@redhat.com>

On Thu, Aug 11, 2022, Paolo Bonzini wrote:
> Do not return true from kvm_apic_has_events, and consequently from
> kvm_vcpu_has_events, if the vCPU is not going to process an INIT.
> 
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  arch/x86/include/asm/kvm_host.h | 1 +
>  arch/x86/kvm/i8259.c            | 2 +-
>  arch/x86/kvm/lapic.h            | 2 +-
>  arch/x86/kvm/x86.c              | 5 +++++
>  arch/x86/kvm/x86.h              | 5 -----
>  5 files changed, 8 insertions(+), 7 deletions(-)
> 
> diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
> index 293ff678fff5..1ce4ebc41118 100644
> --- a/arch/x86/include/asm/kvm_host.h
> +++ b/arch/x86/include/asm/kvm_host.h
> @@ -2042,6 +2042,7 @@ void __user *__x86_set_memory_region(struct kvm *kvm, int id, gpa_t gpa,
>  				     u32 size);
>  bool kvm_vcpu_is_reset_bsp(struct kvm_vcpu *vcpu);
>  bool kvm_vcpu_is_bsp(struct kvm_vcpu *vcpu);
> +bool kvm_vcpu_latch_init(struct kvm_vcpu *vcpu);
>  
>  bool kvm_intr_is_single_vcpu(struct kvm *kvm, struct kvm_lapic_irq *irq,
>  			     struct kvm_vcpu **dest_vcpu);
> diff --git a/arch/x86/kvm/i8259.c b/arch/x86/kvm/i8259.c
> index e1bb6218bb96..177555eea54e 100644
> --- a/arch/x86/kvm/i8259.c
> +++ b/arch/x86/kvm/i8259.c
> @@ -29,9 +29,9 @@
>  #include <linux/mm.h>
>  #include <linux/slab.h>
>  #include <linux/bitops.h>
> -#include "irq.h"
> +#include <linux/kvm_host.h>
>  
> -#include <linux/kvm_host.h>
> +#include "irq.h"
>  #include "trace.h"
>  
>  #define pr_pic_unimpl(fmt, ...)	\
> diff --git a/arch/x86/kvm/lapic.h b/arch/x86/kvm/lapic.h
> index 117a46df5cc1..12577ddccdfc 100644
> --- a/arch/x86/kvm/lapic.h
> +++ b/arch/x86/kvm/lapic.h
> @@ -225,7 +225,7 @@ static inline bool kvm_vcpu_apicv_active(struct kvm_vcpu *vcpu)
>  
>  static inline bool kvm_apic_has_events(struct kvm_vcpu *vcpu)
>  {
> -	return lapic_in_kernel(vcpu) && vcpu->arch.apic->pending_events;
> +	return lapic_in_kernel(vcpu) && vcpu->arch.apic->pending_events && !kvm_vcpu_latch_init(vcpu);

Blech, the kvm_apic_has_events() name is awful (as is pending_events), e.g. it
really should be kvm_apic_has_pending_sipi_or_init().

To avoid the odd kvm_vcpu_latch_init() declaration and the long line above, what
if we open code this in kvm_vcpu_has_events() like we do for NMI, SMI, etc...?

And as follow-up, I would love to rename kvm_vcpu_latch_init() => kvm_vcpu_init_blocked(),
kvm_apic_has_events(), and pending_events.

E.g. for this patch just do:

diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 9f11b505cbee..559900736a71 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -12533,7 +12533,8 @@ static inline bool kvm_vcpu_has_events(struct kvm_vcpu *vcpu)
        if (!list_empty_careful(&vcpu->async_pf.done))
                return true;

-       if (kvm_apic_has_events(vcpu))
+       /* comment explaning that SIPIs are dropped in this case. */
+       if (kvm_apic_has_events(vcpu) && !kvm_vcpu_latch_init(vcpu))
                return true;

        if (vcpu->arch.pv.pv_unhalted)


  reply	other threads:[~2022-08-17  0:07 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-11 21:05 [PATCH v2 0/9] KVM: x86: never write to memory from kvm_vcpu_check_block Paolo Bonzini
2022-08-11 21:05 ` [PATCH v2 1/9] KVM: x86: check validity of argument to KVM_SET_MP_STATE Paolo Bonzini
2022-08-15 13:31   ` Maxim Levitsky
2022-08-16 22:50     ` Sean Christopherson
2022-08-11 21:05 ` [PATCH v2 2/9] KVM: x86: remove return value of kvm_vcpu_block Paolo Bonzini
2022-08-16 23:34   ` Sean Christopherson
2022-08-17 14:10     ` Maxim Levitsky
2022-08-17 15:31     ` Paolo Bonzini
2022-08-17 16:41       ` Sean Christopherson
2022-08-17 16:49         ` Paolo Bonzini
2022-09-20  0:42         ` Sean Christopherson
2022-08-11 21:05 ` [PATCH v2 3/9] KVM: x86: make kvm_vcpu_{block,halt} return whether vCPU is runnable Paolo Bonzini
2022-08-11 21:06 ` [PATCH v2 4/9] KVM: mips, x86: do not rely on KVM_REQ_UNHALT Paolo Bonzini
2022-08-11 21:06 ` [PATCH v2 5/9] KVM: remove KVM_REQ_UNHALT Paolo Bonzini
2022-08-11 21:06 ` [PATCH v2 6/9] KVM: x86: make vendor code check for all nested events Paolo Bonzini
2022-08-16 23:47   ` Sean Christopherson
2022-08-17 14:10   ` Maxim Levitsky
2022-08-11 21:06 ` [PATCH v2 7/9] KVM: nVMX: Make an event request when pending an MTF nested VM-Exit Paolo Bonzini
2022-08-17 14:11   ` Maxim Levitsky
2022-08-11 21:06 ` [PATCH v2 8/9] KVM: x86: lapic does not have to process INIT if it is blocked Paolo Bonzini
2022-08-17  0:07   ` Sean Christopherson [this message]
2022-08-17 14:11     ` Maxim Levitsky
2022-08-17 15:33       ` Paolo Bonzini
2022-08-11 21:06 ` [PATCH v2 9/9] KVM: x86: never write to memory from kvm_vcpu_check_block Paolo Bonzini
2022-08-16 23:45   ` Sean Christopherson
2022-08-17 14:11     ` Maxim Levitsky
2022-09-20  0:32   ` Sean Christopherson
2022-09-20  0:55   ` 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=YvwxJzHC5xYnc7CJ@google.com \
    --to=seanjc@google.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mlevitsk@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=vkuznets@redhat.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.