fix irq routing by moving it to the correct place
PATCH 1/1 fix irq routing by moving it to the correct place
Hi,
Some freak :-) put x86 specific irq routing into the generic code path, which obviously won't work on non-x86 systems.
This patch creates kvm_arch_init_irq_routing() and moves the x86 gibberish to it's correct location :-)
Now I have networking again!
Cheers,
Jes
Platform specific IRQ routing doesn't belong in the generic codepath. Create kvm_arch_init_irq_routing() and move the x86 specific routing setup to the appropriate place.
With this interrupts are delivered again on ia64.
--- qemu-kvm-ia64.c | 4 ++++ qemu-kvm-x86.c | 30 ++++++++++++++++++++++++++++++ qemu-kvm.c | 23 ++--------------------- qemu-kvm.h | 2 ++ 4 files changed, 38 insertions(+), 21 deletions(-)
qemu-kvm-ia64.c +4 -0
@@ -144,3 +144,7 @@struct ioperm_data *data = _data;ioperm (data->start_port, data->num, data->turn_on); } + +void kvm_arch_init_irq_routing (void ) +{ +}
qemu-kvm-x86.c +30 -0
@@ -879,3 +879,33 @@return true;return false; } + +/* +* Setup x86 specific IRQ routing +*/ +void kvm_arch_init_irq_routing (void ) +{ +int i; + +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); + } +}
qemu-kvm.c +2 -21
@@ -792,27 +792,8 @@ } } -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); - } +kvm_arch_init_irq_routing (); +return 0 ; }
qemu-kvm.h +2 -0
@@ -126,6 +126,8 @@int kvm_coalesce_mmio_region (target_phys_addr_t start,ram_addr_t size);int kvm_uncoalesce_mmio_region (target_phys_addr_t start,ram_addr_t size); +void kvm_arch_init_irq_routing (void ); +#ifdef USE_KVM_DEVICE_ASSIGNMENT struct ioperm_data ;
Aha, good catch! I think it should fix irq routting for pci irq of ia64 ? Xiantao
-----Original Message-----
From: Jes Sorensen [mailto:[email protected]]
Sent: Wednesday, May 06, 2009 10:12 PM
To: Avi Kivity
Cc: Zhang, Xiantao; [email protected]; [email protected]
Subject: [patch] fix irq routing by moving it to the correct place
Hi,
Some freak :-) put x86 specific irq routing into the generic code path, which obviously won't work on non-x86 systems.
This patch creates kvm_arch_init_irq_routing() and moves the x86 gibberish to it's correct location :-)
Now I have networking again!
Cheers,
Jes
Avi Kivity
AppliedQuoted 8 lines · Jes Sorensen
Hi,
Some freak :-) put x86 specific irq routing into the generic code path, which obviously won't work on non-x86 systems.
This patch creates
kvm_arch_init_irq_routing()and moves the x86 gibberish to it's correct location :-)
Applied, thanks.
Signature · 1 line
error compiling committee.c: too many arguments to function
Quoted 12 lines · Avi Kivity
Quoted 8 lines · Jes Sorensen
Hi,
Some freak :-) put x86 specific irq routing into the generic code path, which obviously won't work on non-x86 systems.
This patch creates
kvm_arch_init_irq_routing()and moves the x86 gibberish to it's correct location :-)Applied, thanks.
Argh, that didn't build on x86. I fixed it up.
Signature · 1 line
error compiling committee.c: too many arguments to function