From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gleb Natapov Subject: Re: [PATCH v2 5/6] x86: Enable ack interrupt on vmexit Date: Sun, 25 Nov 2012 15:03:03 +0200 Message-ID: <20121125130303.GC17625@redhat.com> References: <1353485379-6823-1-git-send-email-yang.z.zhang@intel.com> <1353485379-6823-6-git-send-email-yang.z.zhang@intel.com> <20121122152201.GH21208@redhat.com> <50B2153E.2040003@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: Yang Zhang , kvm@vger.kernel.org, mtosatti@redhat.com To: Avi Kivity Return-path: Received: from mx1.redhat.com ([209.132.183.28]:31395 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752830Ab2KYNDF (ORCPT ); Sun, 25 Nov 2012 08:03:05 -0500 Content-Disposition: inline In-Reply-To: <50B2153E.2040003@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: On Sun, Nov 25, 2012 at 02:55:26PM +0200, Avi Kivity wrote: > On 11/22/2012 05:22 PM, Gleb Natapov wrote: > > 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. > >> > >> > >> 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. > > Why not always? Better to have a single code path for host interrupts > (and as Yang notes, the new path is faster as well). > Is it? The current path is: vm exit -> KVM vmexit handler(interrupt disabled) -> KVM re-enable interrupt -> cpu ack the interrupt and interrupt deliver through the host IDT. The proposed path is: CPU acks interrupt -> vm exit -> KVM vmexit handler(interrupt disabled) -> eoi -> self IPI -> KVM re-enable interrupt -> cpu ack the interrupt and interrupt deliver through the host IDT. Am I missing something? -- Gleb.