From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marcelo Tosatti Subject: Re: [PATCH 03/15] kvm: Install optimized interrupt handlers Date: Sat, 5 Mar 2011 12:37:59 -0300 Message-ID: <20110305153759.GA2692@amt.cnet> References: <29e857949ee4ff738c7c2f27063ee945a1af4875.1299233998.git.jan.kiszka@siemens.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: Avi Kivity , kvm@vger.kernel.org, qemu-devel@nongnu.org To: Jan Kiszka Return-path: Received: from mx1.redhat.com ([209.132.183.28]:57237 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753269Ab1CERGs (ORCPT ); Sat, 5 Mar 2011 12:06:48 -0500 Content-Disposition: inline In-Reply-To: <29e857949ee4ff738c7c2f27063ee945a1af4875.1299233998.git.jan.kiszka@siemens.com> Sender: kvm-owner@vger.kernel.org List-ID: On Fri, Mar 04, 2011 at 11:20:00AM +0100, Jan Kiszka wrote: > KVM only requires to set the raised IRQ in CPUState and, if the user > space irqchip is used, to kick the receiving vcpu if it is remote. > > Signed-off-by: Jan Kiszka > --- > kvm-all.c | 17 +++++++++++++++++ > 1 files changed, 17 insertions(+), 0 deletions(-) > > diff --git a/kvm-all.c b/kvm-all.c > index 226843c..c460d45 100644 > --- a/kvm-all.c > +++ b/kvm-all.c > @@ -650,6 +650,20 @@ static CPUPhysMemoryClient kvm_cpu_phys_memory_client = { > .log_stop = kvm_log_stop, > }; > > +static void kvm_handle_interrupt(CPUState *env, int mask) > +{ > + env->interrupt_request |= mask; > + If the env->interrupt_request request is processed in userspace, such as MCE, the kick is still necessary for irqchip case. CPU_INTERRUPT_DEBUG is another example, no? > + if (!qemu_cpu_self(env)) { > + qemu_cpu_kick(env); > + } > +} > + > +static void kvm_handle_interrupt_kernel_irqchip(CPUState *env, int mask) > +{ > + env->interrupt_request |= mask; > +} > + From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=40309 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Pvuwo-0004zj-8G for qemu-devel@nongnu.org; Sat, 05 Mar 2011 12:07:20 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PvuwI-0002Xr-L6 for qemu-devel@nongnu.org; Sat, 05 Mar 2011 12:06:47 -0500 Received: from mx1.redhat.com ([209.132.183.28]:25454) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PvuwI-0002Xj-9F for qemu-devel@nongnu.org; Sat, 05 Mar 2011 12:06:46 -0500 Resent-Message-ID: <20110305170541.GA5205@amt.cnet> Resent-To: jan.kiszka@siemens.com, avi@redhat.com, kvm@vger.kernel.org, qemu-devel@nongnu.org Date: Sat, 5 Mar 2011 12:37:59 -0300 From: Marcelo Tosatti Message-ID: <20110305153759.GA2692@amt.cnet> References: <29e857949ee4ff738c7c2f27063ee945a1af4875.1299233998.git.jan.kiszka@siemens.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <29e857949ee4ff738c7c2f27063ee945a1af4875.1299233998.git.jan.kiszka@siemens.com> Subject: [Qemu-devel] Re: [PATCH 03/15] kvm: Install optimized interrupt handlers List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Jan Kiszka Cc: Avi Kivity , kvm@vger.kernel.org, qemu-devel@nongnu.org On Fri, Mar 04, 2011 at 11:20:00AM +0100, Jan Kiszka wrote: > KVM only requires to set the raised IRQ in CPUState and, if the user > space irqchip is used, to kick the receiving vcpu if it is remote. > > Signed-off-by: Jan Kiszka > --- > kvm-all.c | 17 +++++++++++++++++ > 1 files changed, 17 insertions(+), 0 deletions(-) > > diff --git a/kvm-all.c b/kvm-all.c > index 226843c..c460d45 100644 > --- a/kvm-all.c > +++ b/kvm-all.c > @@ -650,6 +650,20 @@ static CPUPhysMemoryClient kvm_cpu_phys_memory_client = { > .log_stop = kvm_log_stop, > }; > > +static void kvm_handle_interrupt(CPUState *env, int mask) > +{ > + env->interrupt_request |= mask; > + If the env->interrupt_request request is processed in userspace, such as MCE, the kick is still necessary for irqchip case. CPU_INTERRUPT_DEBUG is another example, no? > + if (!qemu_cpu_self(env)) { > + qemu_cpu_kick(env); > + } > +} > + > +static void kvm_handle_interrupt_kernel_irqchip(CPUState *env, int mask) > +{ > + env->interrupt_request |= mask; > +} > +