From patchwork Fri Jun 12 01:46:43 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Beth Kon X-Patchwork-Id: 29674 Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id n5C1kTHk014554 for ; Fri, 12 Jun 2009 01:46:30 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753327AbZFLBpr (ORCPT ); Thu, 11 Jun 2009 21:45:47 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1757677AbZFLBpr (ORCPT ); Thu, 11 Jun 2009 21:45:47 -0400 Received: from e33.co.us.ibm.com ([32.97.110.151]:39771 "EHLO e33.co.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752994AbZFLBpp (ORCPT ); Thu, 11 Jun 2009 21:45:45 -0400 Received: from d03relay04.boulder.ibm.com (d03relay04.boulder.ibm.com [9.17.195.106]) by e33.co.us.ibm.com (8.13.1/8.13.1) with ESMTP id n5C1hlwa003943 for ; Thu, 11 Jun 2009 19:43:47 -0600 Received: from d03av03.boulder.ibm.com (d03av03.boulder.ibm.com [9.17.195.169]) by d03relay04.boulder.ibm.com (8.13.8/8.13.8/NCO v9.2) with ESMTP id n5C1jlgK227118 for ; Thu, 11 Jun 2009 19:45:47 -0600 Received: from d03av03.boulder.ibm.com (loopback [127.0.0.1]) by d03av03.boulder.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id n5C1jl5k025568 for ; Thu, 11 Jun 2009 19:45:47 -0600 Received: from localhost.localdomain (sig-9-65-123-8.mts.ibm.com [9.65.123.8]) by d03av03.boulder.ibm.com (8.12.11.20060308/8.12.11) with ESMTP id n5C1jjdc025531; Thu, 11 Jun 2009 19:45:46 -0600 From: Beth Kon To: avi@redhat.com Cc: kvm@vger.kernel.org, Beth Kon Subject: [PATCH 2/5] Userspace changes for configuring irq0->inti2 override (v6) Date: Thu, 11 Jun 2009 21:46:43 -0400 Message-Id: <1244771206-19872-2-git-send-email-eak@us.ibm.com> X-Mailer: git-send-email 1.5.4.3 In-Reply-To: <1244771206-19872-1-git-send-email-eak@us.ibm.com> References: <1244771206-19872-1-git-send-email-eak@us.ibm.com> Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Signed-off-by: Beth Kon --- hw/ioapic.c | 6 +++--- hw/pc.c | 2 ++ qemu-kvm-x86.c | 6 +++++- qemu-kvm.h | 2 ++ sysemu.h | 1 + vl.c | 11 +++++++++-- 6 files changed, 22 insertions(+), 6 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/hw/ioapic.c b/hw/ioapic.c index 6c178c7..a67b766 100644 --- a/hw/ioapic.c +++ b/hw/ioapic.c @@ -23,6 +23,7 @@ #include "hw.h" #include "pc.h" +#include "sysemu.h" #include "qemu-timer.h" #include "host-utils.h" @@ -95,14 +96,13 @@ void ioapic_set_irq(void *opaque, int vector, int level) { IOAPICState *s = opaque; -#if 0 /* ISA IRQs map to GSI 1-1 except for IRQ0 which maps * to GSI 2. GSI maps to ioapic 1-1. This is not * the cleanest way of doing it but it should work. */ - if (vector == 0) + if (vector == 0 && irq0override) { vector = 2; -#endif + } if (vector >= 0 && vector < IOAPIC_NUM_PINS) { uint32_t mask = 1 << vector; diff --git a/hw/pc.c b/hw/pc.c index 66f4635..1c068fb 100644 --- a/hw/pc.c +++ b/hw/pc.c @@ -55,6 +55,7 @@ #define BIOS_CFG_IOPORT 0x510 #define FW_CFG_ACPI_TABLES (FW_CFG_ARCH_LOCAL + 0) #define FW_CFG_SMBIOS_ENTRIES (FW_CFG_ARCH_LOCAL + 1) +#define FW_CFG_IRQ0_OVERRIDE (FW_CFG_ARCH_LOCAL + 2) #define MAX_IDE_BUS 2 @@ -476,6 +477,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); smbios_table = smbios_get_table(&smbios_len); if (smbios_table) diff --git a/qemu-kvm-x86.c b/qemu-kvm-x86.c index 5526d8f..89337e9 100644 --- a/qemu-kvm-x86.c +++ b/qemu-kvm-x86.c @@ -909,7 +909,11 @@ int kvm_arch_init_irq_routing(void) return r; } for (i = 0; i < 24; ++i) { - r = kvm_add_irq_route(kvm_context, i, KVM_IRQCHIP_IOAPIC, i); + if (i == 0) { + r = kvm_add_irq_route(kvm_context, i, KVM_IRQCHIP_IOAPIC, 2); + } else if (i != 2) { + r = kvm_add_irq_route(kvm_context, i, KVM_IRQCHIP_IOAPIC, i); + } if (r < 0) return r; } diff --git a/qemu-kvm.h b/qemu-kvm.h index fa40542..6bbafbc 100644 --- a/qemu-kvm.h +++ b/qemu-kvm.h @@ -169,6 +169,7 @@ int handle_tpr_access(void *opaque, kvm_vcpu_context_t vcpu, #define kvm_enabled() (kvm_allowed) #define qemu_kvm_irqchip_in_kernel() kvm_irqchip_in_kernel(kvm_context) #define qemu_kvm_pit_in_kernel() kvm_pit_in_kernel(kvm_context) +#define qemu_kvm_has_gsi_routing() kvm_has_gsi_routing(kvm_context) #define kvm_has_sync_mmu() qemu_kvm_has_sync_mmu() void kvm_init_vcpu(CPUState *env); void kvm_load_tsc(CPUState *env); @@ -177,6 +178,7 @@ void kvm_load_tsc(CPUState *env); #define kvm_nested 0 #define qemu_kvm_irqchip_in_kernel() (0) #define qemu_kvm_pit_in_kernel() (0) +#define qemu_kvm_has_gsi_routing() (0) #define kvm_has_sync_mmu() (0) #define kvm_load_registers(env) do {} while(0) #define kvm_save_registers(env) do {} while(0) diff --git a/sysemu.h b/sysemu.h index 47d001e..f78e974 100644 --- a/sysemu.h +++ b/sysemu.h @@ -108,6 +108,7 @@ extern int xenfb_enabled; 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 2fda17b..9b1d1ab 100644 --- a/vl.c +++ b/vl.c @@ -253,6 +253,7 @@ int no_reboot = 0; int no_shutdown = 0; int cursor_hide = 1; int graphic_rotate = 0; +uint8_t irq0override = 1; #ifndef _WIN32 int daemonize = 0; #endif @@ -6054,8 +6055,14 @@ int main(int argc, char **argv, char **envp) module_call_init(MODULE_INIT_DEVICE); - if (kvm_enabled()) - kvm_init_ap(); + if (kvm_enabled()) { + kvm_init_ap(); +#ifdef USE_KVM + if (kvm_irqchip && !qemu_kvm_has_gsi_routing()) { + irq0override = 0; + } +#endif + } machine->init(ram_size, boot_devices, kernel_filename, kernel_cmdline, initrd_filename, cpu_model);