From 9c2433ce0ad5e850d6fca4980fc82f74660e3099 Mon Sep 17 00:00:00 2001 From: Avi Kivity <avi@redhat.com> Date: Thu, 21 May 2009 17:08:36 -0700 Subject: [PATCH 07/15] kvm: qemu: initialize irq routing table Signed-off-by: Avi Kivity <avi@redhat.com> (cherry picked from commit 30479349eae863705fbc9fb7d2542e64e3101bc7) Signed-off-by: Chris Wright <chrisw@redhat.com> Bugzilla: 498084 Message-Id: <1242950924-30161-6-git-send-email-chrisw@redhat.com> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> RH-Upstream-status: applied Acked-by: Juan Quintela <quintela@redhat.com> Acked-by: Marcelo Tosatti <mtosatti@redhat.com> Acked-by: Don Dutile <ddutile@redhat.com> --- qemu/qemu-kvm.c | 24 ++++++++++++++++++++++++ 1 files changed, 24 insertions(+), 0 deletions(-) diff --git a/qemu/qemu-kvm.c b/qemu/qemu-kvm.c index 143958a..e4124b8 100644 --- a/qemu/qemu-kvm.c +++ b/qemu/qemu-kvm.c @@ -778,6 +778,8 @@ static int destroy_region_works = 0; int kvm_qemu_create_context(void) { int r; + int i; + if (!kvm_irqchip) { kvm_disable_irqchip_creation(kvm_context); } @@ -800,6 +802,28 @@ int kvm_qemu_create_context(void) #ifdef TARGET_I386 destroy_region_works = kvm_destroy_memory_region_works(kvm_context); #endif + + if (kvm_irqchip && kvm_has_gsi_routing(kvm_context)) { + kvm_clear_gsi_routes(kvm_context); + for (i = 0; i < 8; ++i) { + if (i == 2) + continue; + r = kvm_add_irq_route(kvm_context, i, KVM_IRQCHIP_PIC_MASTER, i); + if (r < 0) + return r; + } + for (i = 8; i < 16; ++i) { + r = kvm_add_irq_route(kvm_context, i, KVM_IRQCHIP_PIC_SLAVE, i - 8); + if (r < 0) + return r; + } + for (i = 0; i < 24; ++i) { + r = kvm_add_irq_route(kvm_context, i, KVM_IRQCHIP_IOAPIC, i); + if (r < 0) + return r; + } + kvm_commit_irq_routes(kvm_context); + } return 0; } -- 1.6.3.rc4.29.g8146