From patchwork Wed May 4 19:43:47 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Kiszka X-Patchwork-Id: 754612 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter2.kernel.org (8.14.4/8.14.3) with ESMTP id p44JiN7A024029 for ; Wed, 4 May 2011 19:44:23 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755591Ab1EDToT (ORCPT ); Wed, 4 May 2011 15:44:19 -0400 Received: from fmmailgate02.web.de ([217.72.192.227]:51121 "EHLO fmmailgate02.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755556Ab1EDToR (ORCPT ); Wed, 4 May 2011 15:44:17 -0400 Received: from smtp04.web.de ( [172.20.0.225]) by fmmailgate02.web.de (Postfix) with ESMTP id E6D3719EB2A72; Wed, 4 May 2011 21:44:15 +0200 (CEST) Received: from [88.64.22.120] (helo=localhost.localdomain) by smtp04.web.de with asmtp (TLSv1:AES256-SHA:256) (WEB.DE 4.110 #2) id 1QHhzb-0006mo-01; Wed, 04 May 2011 21:44:15 +0200 From: Jan Kiszka To: Avi Kivity , Marcelo Tosatti Cc: kvm@vger.kernel.org Subject: [PATCH 13/19] qemu-kvm: Refactor in-kernel irqchip and pit control Date: Wed, 4 May 2011 21:43:47 +0200 Message-Id: X-Mailer: git-send-email 1.7.1 In-Reply-To: References: In-Reply-To: References: X-Sender: jan.kiszka@web.de X-Provags-ID: V01U2FsdGVkX193yuCYDo1ObuHJHAiNly6V2zuwHAl9GMxc1U8/ oufY2L5b0gFVmbKChOmNGjwUqAPsINBZgAXGJbfRjQQ7vzMcWL KH/tQ2004= 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 (demeter2.kernel.org [140.211.167.43]); Wed, 04 May 2011 19:44:23 +0000 (UTC) From: Jan Kiszka Simplify the logic for detecting and querying if in-kernel irqchip and pit should be created. This also allows to drop two further fields from kvm_context. Signed-off-by: Jan Kiszka --- qemu-kvm-x86.c | 16 +++++----------- qemu-kvm.c | 20 +++----------------- qemu-kvm.h | 24 ------------------------ 3 files changed, 8 insertions(+), 52 deletions(-) diff --git a/qemu-kvm-x86.c b/qemu-kvm-x86.c index 6d3a243..a88f8be 100644 --- a/qemu-kvm-x86.c +++ b/qemu-kvm-x86.c @@ -105,17 +105,11 @@ static int kvm_create_pit(kvm_context_t kvm) #ifdef KVM_CAP_PIT int r; - kvm_state->pit_in_kernel = 0; - if (!kvm->no_pit_creation) { - r = kvm_ioctl(kvm_state, KVM_CHECK_EXTENSION, KVM_CAP_PIT); - if (r > 0) { - r = kvm_vm_ioctl(kvm_state, KVM_CREATE_PIT); - if (r >= 0) { - kvm_state->pit_in_kernel = 1; - } else { - fprintf(stderr, "Create kernel PIC irqchip failed\n"); - return r; - } + if (kvm_pit_in_kernel()) { + r = kvm_vm_ioctl(kvm_state, KVM_CREATE_PIT); + if (r < 0) { + fprintf(stderr, "Create kernel PIC irqchip failed\n"); + return r; } } #endif diff --git a/qemu-kvm.c b/qemu-kvm.c index e846f1c..e03b3d5 100644 --- a/qemu-kvm.c +++ b/qemu-kvm.c @@ -199,16 +199,6 @@ static void kvm_finalize(KVMState *s) free(s); } -void kvm_disable_irqchip_creation(kvm_context_t kvm) -{ - kvm->no_irqchip_creation = 1; -} - -void kvm_disable_pit_creation(kvm_context_t kvm) -{ - kvm->no_pit_creation = 1; -} - static int kvm_set_boot_vcpu_id(kvm_context_t kvm, uint32_t id) { #ifdef KVM_CAP_SET_BOOT_CPU_ID @@ -260,7 +250,7 @@ void kvm_create_irqchip(kvm_context_t kvm) int r; #ifdef KVM_CAP_IRQCHIP - if (!kvm->no_irqchip_creation) { + if (kvm_irqchip) { r = kvm_ioctl(kvm_state, KVM_CHECK_EXTENSION, KVM_CAP_IRQCHIP); if (r > 0) { /* kernel irqchip supported */ r = kvm_vm_ioctl(kvm_state, KVM_CREATE_IRQCHIP); @@ -1437,12 +1427,8 @@ static int kvm_create_context(void) int r; - if (!kvm_irqchip) { - kvm_disable_irqchip_creation(kvm_context); - } - if (!kvm_pit) { - kvm_disable_pit_creation(kvm_context); - } + kvm_state->pit_in_kernel = kvm_pit; + if (kvm_create(kvm_context, 0, NULL) < 0) { kvm_finalize(kvm_state); return -1; diff --git a/qemu-kvm.h b/qemu-kvm.h index 3db0484..409809e 100644 --- a/qemu-kvm.h +++ b/qemu-kvm.h @@ -50,12 +50,8 @@ */ struct kvm_context { - /// do not create in-kernel irqchip if set - int no_irqchip_creation; /// ioctl to use to inject interrupts int irqchip_inject_ioctl; - /// do not create in-kernel pit if set - int no_pit_creation; #ifdef KVM_CAP_IRQ_ROUTING struct kvm_irq_routing *irq_routes; int nr_allocated_irq_routes; @@ -85,26 +81,6 @@ int handle_io_window(kvm_context_t kvm); int try_push_interrupts(kvm_context_t kvm); /*! - * \brief Disable the in-kernel IRQCHIP creation - * - * In-kernel irqchip is enabled by default. If userspace irqchip is to be used, - * this should be called prior to kvm_create(). - * - * \param kvm Pointer to the kvm_context - */ -void kvm_disable_irqchip_creation(kvm_context_t kvm); - -/*! - * \brief Disable the in-kernel PIT creation - * - * In-kernel pit is enabled by default. If userspace pit is to be used, - * this should be called prior to kvm_create(). - * - * \param kvm Pointer to the kvm_context - */ -void kvm_disable_pit_creation(kvm_context_t kvm); - -/*! * \brief Create new virtual machine * * This creates a new virtual machine, maps physical RAM to it, and creates a