From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MsNZG-00005s-MY for qemu-devel@nongnu.org; Mon, 28 Sep 2009 17:15:34 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MsNZB-0008Uy-NV for qemu-devel@nongnu.org; Mon, 28 Sep 2009 17:15:33 -0400 Received: from [199.232.76.173] (port=49506 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MsNZB-0008Ut-F7 for qemu-devel@nongnu.org; Mon, 28 Sep 2009 17:15:29 -0400 Received: from mx1.redhat.com ([209.132.183.28]:14022) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MsNZB-0001xb-2z for qemu-devel@nongnu.org; Mon, 28 Sep 2009 17:15:29 -0400 From: Glauber Costa Date: Mon, 28 Sep 2009 18:15:16 -0300 Message-Id: <1254172517-28216-6-git-send-email-glommer@redhat.com> In-Reply-To: <1254172517-28216-5-git-send-email-glommer@redhat.com> References: <1254172517-28216-1-git-send-email-glommer@redhat.com> <1254172517-28216-2-git-send-email-glommer@redhat.com> <1254172517-28216-3-git-send-email-glommer@redhat.com> <1254172517-28216-4-git-send-email-glommer@redhat.com> <1254172517-28216-5-git-send-email-glommer@redhat.com> Subject: [Qemu-devel] [PATCH 5/6] initialize i8259 chip List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: aliguori@us.ibm.com If we have irqchip in kernel (which we currently do not), intialize the i8259 chip. This code is heavily inspirated by the one in qemu-kvm.git Note that we wire isa irqs trough it too. Signed-off-by: Glauber Costa --- hw/pc.c | 14 +++++++++++--- kvm-all.c | 2 +- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/hw/pc.c b/hw/pc.c index fa82b58..3049e67 100644 --- a/hw/pc.c +++ b/hw/pc.c @@ -39,6 +39,7 @@ #include "ide.h" #include "loader.h" #include "elf.h" +#include "kvm.h" /* output Bochs bios info messages */ //#define DEBUG_BIOS @@ -1284,10 +1285,17 @@ static void pc_init1(ram_addr_t ram_size, } cpu_irq = qemu_allocate_irqs(pic_irq_request, NULL, 1); - i8259 = i8259_init(cpu_irq[0]); isa_irq_state = qemu_mallocz(sizeof(*isa_irq_state)); - isa_irq_state->i8259 = i8259; - isa_irq = qemu_allocate_irqs(isa_irq_handler, isa_irq_state, 24); + +#ifdef KVM_CAP_IRQCHIP + if (kvm_enabled() && kvm_irqchip_in_kernel()) { + isa_irq = i8259 = kvm_i8259_init(cpu_irq[0]); + } else +#endif + { + isa_irq_state->i8259 = i8259 = i8259_init(cpu_irq[0]); + isa_irq = qemu_allocate_irqs(isa_irq_handler, isa_irq_state, 24); + } if (pci_enabled) { pci_bus = i440fx_init(&i440fx_state, &piix3_devfn, isa_irq); diff --git a/kvm-all.c b/kvm-all.c index 662017f..50616d1 100644 --- a/kvm-all.c +++ b/kvm-all.c @@ -429,7 +429,6 @@ int kvm_get_irqchip(struct kvm_irqchip *chip) return kvm_vm_ioctl(kvm_state, KVM_GET_IRQCHIP, chip); } -#endif int kvm_set_irq(int irq, int level, int *status) { @@ -454,6 +453,7 @@ int kvm_set_irq(int irq, int level, int *status) return 1; } +#endif int kvm_init(int smp_cpus) { -- 1.6.2.5