From patchwork Fri May 13 12:13:59 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Kiszka X-Patchwork-Id: 782692 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 p4DCEJ7s032223 for ; Fri, 13 May 2011 12:14:35 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758848Ab1EMMOR (ORCPT ); Fri, 13 May 2011 08:14:17 -0400 Received: from goliath.siemens.de ([192.35.17.28]:30164 "EHLO goliath.siemens.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758529Ab1EMMOP (ORCPT ); Fri, 13 May 2011 08:14:15 -0400 Received: from mail1.siemens.de (localhost [127.0.0.1]) by goliath.siemens.de (8.13.6/8.13.6) with ESMTP id p4DCEBAX028839; Fri, 13 May 2011 14:14:11 +0200 Received: from mchn199C.mchp.siemens.de ([139.25.109.49]) by mail1.siemens.de (8.13.6/8.13.6) with ESMTP id p4DCEAvA019933; Fri, 13 May 2011 14:14:11 +0200 From: Jan Kiszka To: Avi Kivity , Marcelo Tosatti Cc: kvm@vger.kernel.org Subject: [PATCH 05/16] qemu-kvm: Clean up IRQ0 override configuration Date: Fri, 13 May 2011 14:13:59 +0200 Message-Id: <70f3a2ad74cf9f36d0fc4803d610340789e52ec8.1305288845.git.jan.kiszka@siemens.com> 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:35 +0000 (UTC) Introduce kvm_allows_irq0_override to overcome the global irq0override variable and convert the BIOS initialization. Signed-off-by: Jan Kiszka --- hw/pc.c | 2 +- kvm-all.c | 5 +++++ kvm-stub.c | 5 +++++ kvm.h | 1 + qemu-kvm.c | 1 - sysemu.h | 1 - vl.c | 1 - 7 files changed, 12 insertions(+), 4 deletions(-) diff --git a/hw/pc.c b/hw/pc.c index 944f766..73398eb 100644 --- a/hw/pc.c +++ b/hw/pc.c @@ -605,7 +605,7 @@ static void *bochs_bios_init(void) fw_cfg_add_i64(fw_cfg, FW_CFG_RAM_SIZE, (uint64_t)ram_size); fw_cfg_add_bytes(fw_cfg, FW_CFG_ACPI_TABLES, (uint8_t *)acpi_tables, acpi_tables_len); - fw_cfg_add_bytes(fw_cfg, FW_CFG_IRQ0_OVERRIDE, &irq0override, 1); + fw_cfg_add_i32(fw_cfg, FW_CFG_IRQ0_OVERRIDE, kvm_allows_irq0_override()); smbios_table = smbios_get_table(&smbios_len); if (smbios_table) diff --git a/kvm-all.c b/kvm-all.c index d744cb2..d936d35 100644 --- a/kvm-all.c +++ b/kvm-all.c @@ -1121,6 +1121,11 @@ int kvm_has_many_ioeventfds(void) return kvm_state->many_ioeventfds; } +int kvm_allows_irq0_override(void) +{ + return !kvm_enabled() || !kvm_irqchip_in_kernel() || kvm_has_gsi_routing(); +} + void kvm_setup_guest_memory(void *start, size_t size) { if (!kvm_has_sync_mmu()) { diff --git a/kvm-stub.c b/kvm-stub.c index 31bd77b..4f1f7d3 100644 --- a/kvm-stub.c +++ b/kvm-stub.c @@ -93,6 +93,11 @@ int kvm_has_many_ioeventfds(void) return 0; } +int kvm_allows_irq0_override(void) +{ + return 1; +} + void kvm_setup_guest_memory(void *start, size_t size) { } diff --git a/kvm.h b/kvm.h index 2445d40..4ba5465 100644 --- a/kvm.h +++ b/kvm.h @@ -220,6 +220,7 @@ typedef struct KVMMsiMessage { } KVMMsiMessage; int kvm_has_gsi_routing(void); +int kvm_allows_irq0_override(void); int kvm_get_irq_route_gsi(void); int kvm_msi_message_add(KVMMsiMessage *msg); diff --git a/qemu-kvm.c b/qemu-kvm.c index 1f9ddea..fee6cdf 100644 --- a/qemu-kvm.c +++ b/qemu-kvm.c @@ -1426,7 +1426,6 @@ static int kvm_create_context(void) kvm_init_ap(); if (kvm_irqchip) { if (!qemu_kvm_has_gsi_routing()) { - irq0override = 0; #ifdef TARGET_I386 /* if kernel can't do irq routing, interrupt source * override 0->2 can not be set up as required by hpet, diff --git a/sysemu.h b/sysemu.h index d58bec1..69e2e7e 100644 --- a/sysemu.h +++ b/sysemu.h @@ -102,7 +102,6 @@ extern int vga_interface_type; extern int graphic_width; extern int graphic_height; extern int graphic_depth; -extern uint8_t irq0override; extern DisplayType display_type; extern const char *keyboard_layout; extern int win2k_install_hack; diff --git a/vl.c b/vl.c index a143250..501d52c 100644 --- a/vl.c +++ b/vl.c @@ -217,7 +217,6 @@ int no_reboot = 0; int no_shutdown = 0; int cursor_hide = 1; int graphic_rotate = 0; -uint8_t irq0override = 1; const char *watchdog; QEMUOptionRom option_rom[MAX_OPTION_ROMS]; int nb_option_roms;