Hi, Avi Please help to apply this patch. It will fix kvm/ia64's networking issue. Thanks Xiantao >From fe6e28ce9295acba107438979fe6ead0d24f7e20 Mon Sep 17 00:00:00 2001 From: Xiantao Zhang <xiantao.zhang@xxxxxxxxx> Date: Fri, 22 Aug 2008 17:14:15 +0800 Subject: [PATCH] KVM: Qemu: Enable kvm/ia64's network. kvm/ia64's IRQ may >16, but current Qemu can't support it. Here we implment a IRQ map function to solve this issue to enable its networking. Signed-off-by: Anthony Xu <anthony.xu@xxxxxxxxx> Signed-off-by: Xiantao Zhang <xiantao.zhang@xxxxxxxxx> --- qemu/hw/ipf.c | 24 ++++++++++++++++++++++++ qemu/hw/pci.c | 9 +++++++++ 2 files changed, 33 insertions(+), 0 deletions(-) diff --git a/qemu/hw/ipf.c b/qemu/hw/ipf.c index b11e328..ffa7843 100644 --- a/qemu/hw/ipf.c +++ b/qemu/hw/ipf.c @@ -672,3 +672,27 @@ QEMUMachine ipf_machine = { ipf_init_pci, VGA_RAM_SIZE + VGA_RAM_SIZE, }; + +#define IOAPIC_NUM_PINS 48 + +static int ioapic_irq_count[IOAPIC_NUM_PINS]; + +int ioapic_map_irq(int devfn, int irq_num) +{ + int irq, dev; + dev = devfn >> 3; + irq = ((((dev << 2) + (dev >> 3) + irq_num) & 31) + 16); + return irq; +} + +void ioapic_set_irq(void *opaque, int vector, int level) +{ + if( level ) + ioapic_irq_count[vector] += 1; + else + ioapic_irq_count[vector] -= 1; + + if (kvm_enabled()) + if (kvm_set_irq(vector, ioapic_irq_count[vector] == 0)) + return; +} diff --git a/qemu/hw/pci.c b/qemu/hw/pci.c index 92683d1..fac58c5 100644 --- a/qemu/hw/pci.c +++ b/qemu/hw/pci.c @@ -544,6 +544,15 @@ static void pci_set_irq(void *opaque, int irq_num, int level) return; pci_dev->irq_state[irq_num] = level; +#if defined(TARGET_IA64) +{ int irq; + extern int ioapic_map_irq(int devfn, int irq_num); + extern void ioapic_set_irq(void *opaque, int vector, int level); + + irq = ioapic_map_irq(pci_dev->devfn, irq_num); + ioapic_set_irq(NULL, irq, level); +} +#endif for (;;) { bus = pci_dev->bus; irq_num = bus->map_irq(pci_dev, irq_num); -- 1.5.1
Attachment:
0001-KVM-Qemu-Enable-kvm-ia64-s-network.patch
Description: 0001-KVM-Qemu-Enable-kvm-ia64-s-network.patch