All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Radim Krčmář" <rkrcmar@redhat.com>
To: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
	pbonzini@redhat.com, joro@8bytes.org
Subject: Re: [PATCH v2 3/3] KVM: SVM: Add irqchip_split() checks before enabling AVIC
Date: Thu, 14 Sep 2017 17:20:32 +0200	[thread overview]
Message-ID: <20170914152031.GA23415@flask> (raw)
In-Reply-To: <1505230962-86304-4-git-send-email-suravee.suthikulpanit@amd.com>

2017-09-12 10:42-0500, Suravee Suthikulpanit:
> SVM AVIC hardware accelerates guest write to APIC_EOI register
> (for edge-trigger interrupt), which means it does not trap to KVM.
> 
> So, only enable SVM AVIC only in split irqchip mode.
> (e.g. launching qemu w/ option '-machine kernel_irqchip=split').
> 
> Suggested-by: Paolo Bonzini <pbonzini@redhat.com>
> Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
> ---
>  arch/x86/kvm/svm.c | 13 +++++++++----
>  1 file changed, 9 insertions(+), 4 deletions(-)
> 
> diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
> index d1b3eb4..a7b96e7 100644
> --- a/arch/x86/kvm/svm.c
> +++ b/arch/x86/kvm/svm.c
> @@ -1176,7 +1176,6 @@ static void avic_init_vmcb(struct vcpu_svm *svm)
>  	vmcb->control.avic_physical_id = ppa & AVIC_HPA_MASK;
>  	vmcb->control.avic_physical_id |= AVIC_MAX_PHYSICAL_ID_COUNT;
>  	vmcb->control.int_ctl |= AVIC_ENABLE_MASK;
> -	svm->vcpu.arch.apicv_active = true;
>  }
>  
>  static void init_vmcb(struct vcpu_svm *svm)
> @@ -1292,7 +1291,7 @@ static void init_vmcb(struct vcpu_svm *svm)
>  		set_intercept(svm, INTERCEPT_PAUSE);
>  	}
>  
> -	if (avic)
> +	if (kvm_vcpu_apicv_active(&svm->vcpu))
>  		avic_init_vmcb(svm);
>  
>  	/*
> @@ -1594,6 +1593,12 @@ static int avic_init_vcpu(struct vcpu_svm *svm)
>  	if (!avic)
>  		return 0;
>  
> +	if (!kvm_vcpu_apicv_active(&svm->vcpu)) {
> +		pr_debug("%s: Disable AVIC due to non-split irqchip.\n",
> +			      __func__);

We need to have an extra condition just because of this print ...
I removed the print altogether when applying -- I thought more about
that and it was aimed at people who wonder why AVIC was suddenly
disabled and it's unlikely that they will enable a debug message without
already knowing the reason,

thanks.

> @@ -4388,7 +4393,7 @@ static void svm_set_virtual_x2apic_mode(struct kvm_vcpu *vcpu, bool set)
>  
>  static bool svm_get_enable_apicv(struct kvm_vcpu *vcpu)
>  {

A close contender was pr_info_once() here:

	if (avic && !irqchip_split(vcpu->kvm))
		pr_info_once(...)

> -	return avic;
> +	return avic && irqchip_split(vcpu->kvm);

>  }
>  
>  static void svm_hwapic_irr_update(struct kvm_vcpu *vcpu, int max_irr)
> @@ -4405,7 +4410,7 @@ static void svm_refresh_apicv_exec_ctrl(struct kvm_vcpu *vcpu)
>  	struct vcpu_svm *svm = to_svm(vcpu);
>  	struct vmcb *vmcb = svm->vmcb;
>  
> -	if (!avic)
> +	if (!kvm_vcpu_apicv_active(&svm->vcpu))
>  		return;
>  
>  	vmcb->control.int_ctl &= ~AVIC_ENABLE_MASK;
> -- 
> 1.8.3.1
> 

  reply	other threads:[~2017-09-14 15:20 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-09-12 15:42 [PATCH v2 0/3] KVM: SVM: Fix guest not booting w/ AVIC enabled Suravee Suthikulpanit
2017-09-12 15:42 ` [PATCH v2 1/3] KVM: SVM: Refactor AVIC vcpu initialization into avic_init_vcpu() Suravee Suthikulpanit
2017-09-12 15:42 ` [PATCH v2 2/3] KVM: Add struct kvm_vcpu pointer parameter to get_enable_apicv() Suravee Suthikulpanit
2017-09-12 15:42 ` [PATCH v2 3/3] KVM: SVM: Add irqchip_split() checks before enabling AVIC Suravee Suthikulpanit
2017-09-14 15:20   ` Radim Krčmář [this message]
2017-09-14 15:23     ` Suravee Suthikulpanit
2017-09-15 19:21       ` Suravee Suthikulpanit
2017-09-15 21:14         ` Paolo Bonzini

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=20170914152031.GA23415@flask \
    --to=rkrcmar@redhat.com \
    --cc=joro@8bytes.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=suravee.suthikulpanit@amd.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.