From patchwork Fri May 13 12:14:09 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Kiszka X-Patchwork-Id: 782762 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id p4DCEJ81032223 for ; Fri, 13 May 2011 12:14:36 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932213Ab1EMMOb (ORCPT ); Fri, 13 May 2011 08:14:31 -0400 Received: from thoth.sbs.de ([192.35.17.2]:15263 "EHLO thoth.sbs.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753705Ab1EMMOV (ORCPT ); Fri, 13 May 2011 08:14:21 -0400 Received: from mail1.siemens.de (localhost [127.0.0.1]) by thoth.sbs.de (8.13.6/8.13.6) with ESMTP id p4DCEC1n031704; Fri, 13 May 2011 14:14:12 +0200 Received: from mchn199C.mchp.siemens.de ([139.25.109.49]) by mail1.siemens.de (8.13.6/8.13.6) with ESMTP id p4DCEAvK019933; Fri, 13 May 2011 14:14:12 +0200 From: Jan Kiszka To: Avi Kivity , Marcelo Tosatti Cc: kvm@vger.kernel.org Subject: [PATCH 15/16] qemu-kvm: Use KVM-optimized interrupt handler Date: Fri, 13 May 2011 14:14:09 +0200 Message-Id: X-Mailer: git-send-email 1.7.1 In-Reply-To: References: In-Reply-To: References: Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter1.kernel.org [140.211.167.41]); Fri, 13 May 2011 12:14:36 +0000 (UTC) Instead of hooking into tcg_handler_interrupt, set cpu_interrupt_handler just like upstream and move kvm_update_interrupt_request to kvm_handle_interrupt. It's not worth keeping the check for !irqchip, we will only rarely get here in the in-kernel irqchip case. Signed-off-by: Jan Kiszka --- exec.c | 2 -- kvm-all.c | 3 ++- qemu-kvm.c | 2 ++ 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/exec.c b/exec.c index 169f9f4..6c4b32b 100644 --- a/exec.c +++ b/exec.c @@ -1646,8 +1646,6 @@ static void tcg_handle_interrupt(CPUState *env, int mask) old_mask = env->interrupt_request; env->interrupt_request |= mask; - if (kvm_enabled() && !kvm_irqchip_in_kernel()) - kvm_update_interrupt_request(env); /* * If called from iothread context, wake the target cpu in diff --git a/kvm-all.c b/kvm-all.c index a2c517e..8ded95c 100644 --- a/kvm-all.c +++ b/kvm-all.c @@ -683,7 +683,6 @@ static CPUPhysMemoryClient kvm_cpu_phys_memory_client = { .log_stop = kvm_log_stop, }; -#ifdef OBSOLETE_KVM_IMPL static void kvm_handle_interrupt(CPUState *env, int mask) { env->interrupt_request |= mask; @@ -691,8 +690,10 @@ static void kvm_handle_interrupt(CPUState *env, int mask) if (!qemu_cpu_is_self(env)) { qemu_cpu_kick(env); } + kvm_update_interrupt_request(env); } +#ifdef OBSOLETE_KVM_IMPL int kvm_init(void) { static const char upgrade_note[] = diff --git a/qemu-kvm.c b/qemu-kvm.c index df8e817..5ba5b0a 100644 --- a/qemu-kvm.c +++ b/qemu-kvm.c @@ -1409,6 +1409,8 @@ static int kvm_create_context(void) kvm_init_ap(); + cpu_interrupt_handler = kvm_handle_interrupt; + return 0; }