From: Gleb Natapov <gleb@redhat.com>
To: Yang Zhang <yang.z.zhang@intel.com>
Cc: kvm@vger.kernel.org, mtosatti@redhat.com
Subject: Re: [PATCH v2 5/6] x86: Enable ack interrupt on vmexit
Date: Thu, 22 Nov 2012 17:22:01 +0200 [thread overview]
Message-ID: <20121122152201.GH21208@redhat.com> (raw)
In-Reply-To: <1353485379-6823-6-git-send-email-yang.z.zhang@intel.com>
On Wed, Nov 21, 2012 at 04:09:38PM +0800, Yang Zhang wrote:
> Ack interrupt on vmexit is required by Posted Interrupt. With it,
> when external interrupt caused vmexit, the cpu will acknowledge the
> interrupt controller and save the interrupt's vector in vmcs.
>
> There are several approaches to enable it. This patch uses a simply
> way: re-generate an interrupt via self ipi.
>
> Signed-off-by: Yang Zhang <yang.z.zhang@intel.com>
> ---
> arch/x86/kvm/vmx.c | 11 ++++++++++-
> 1 files changed, 10 insertions(+), 1 deletions(-)
>
> diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
> index 7949d21..f6ef090 100644
> --- a/arch/x86/kvm/vmx.c
> +++ b/arch/x86/kvm/vmx.c
> @@ -2525,7 +2525,8 @@ static __init int setup_vmcs_config(struct vmcs_config *vmcs_conf)
> #ifdef CONFIG_X86_64
> min |= VM_EXIT_HOST_ADDR_SPACE_SIZE;
> #endif
> - opt = VM_EXIT_SAVE_IA32_PAT | VM_EXIT_LOAD_IA32_PAT;
> + opt = VM_EXIT_SAVE_IA32_PAT | VM_EXIT_LOAD_IA32_PAT |
> + VM_EXIT_ACK_INTR_ON_EXIT;
Always? Do it only if posted interrupts are actually available
and going to be used.
> if (adjust_vmx_controls(min, opt, MSR_IA32_VMX_EXIT_CTLS,
> &_vmexit_control) < 0)
> return -EIO;
> @@ -4457,6 +4458,14 @@ static int handle_exception(struct kvm_vcpu *vcpu)
>
> static int handle_external_interrupt(struct kvm_vcpu *vcpu)
> {
> + unsigned int vector;
> +
> + vector = vmcs_read32(VM_EXIT_INTR_INFO);
> + vector &= INTR_INFO_VECTOR_MASK;
Valid bit is guarantied to be set here?
> +
> + apic_eoi();
This is way to late. handle_external_interrupt() is called longs after
preemption and local irqs are enabled. vcpu process may be scheduled out
and apic_eoi() will not be called for a long time leaving interrupt
stuck in ISR and blocking other interrupts.
> + apic->send_IPI_self(vector);
For level interrupt this is not needed, no?
> +
> ++vcpu->stat.irq_exits;
> return 1;
> }
> --
> 1.7.1
--
Gleb.
next prev parent reply other threads:[~2012-11-22 19:02 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-21 8:09 [PATCH v2 0/6] x86, apicv: Add APIC virtualizatin support Yang Zhang
2012-11-21 8:09 ` [PATCH v2 1/6] x86: PIT connects to pin 2 of IOAPIC Yang Zhang
2012-11-28 10:50 ` Gleb Natapov
2012-11-21 8:09 ` [PATCH v2 2/6] x86, apicv: add APICv register virtualization support Yang Zhang
2012-11-21 8:09 ` [PATCH v2 3/6] x86, apicv: add virtual interrupt delivery support Yang Zhang
2012-11-22 13:57 ` Gleb Natapov
2012-11-23 11:46 ` Zhang, Yang Z
2012-11-25 8:53 ` Gleb Natapov
2012-11-21 8:09 ` [PATCH v2 4/6] x86, apicv: add virtual x2apic support Yang Zhang
2012-11-21 8:09 ` [PATCH v2 5/6] x86: Enable ack interrupt on vmexit Yang Zhang
2012-11-22 15:22 ` Gleb Natapov [this message]
2012-11-23 5:41 ` Zhang, Yang Z
2012-11-25 13:30 ` Gleb Natapov
2012-11-25 12:55 ` Avi Kivity
2012-11-25 13:03 ` Gleb Natapov
2012-11-25 13:11 ` Avi Kivity
2012-11-26 5:44 ` Zhang, Yang Z
2012-11-26 9:17 ` Gleb Natapov
2012-11-21 8:09 ` [PATCH v2 6/6] x86, apicv: Add Posted Interrupt supporting Yang Zhang
2012-11-25 12:39 ` Gleb Natapov
2012-11-26 3:51 ` Zhang, Yang Z
2012-11-26 10:01 ` Gleb Natapov
2012-11-26 12:29 ` Zhang, Yang Z
2012-11-26 13:48 ` Gleb Natapov
2012-11-27 3:38 ` Zhang, Yang Z
2012-11-27 9:16 ` Gleb Natapov
2012-11-27 11:10 ` Zhang, Yang Z
2012-11-27 11:31 ` Veruca Salt
2012-11-27 11:46 ` Gleb Natapov
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=20121122152201.GH21208@redhat.com \
--to=gleb@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=mtosatti@redhat.com \
--cc=yang.z.zhang@intel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).