From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: [PATCH] KVM: Qemu: Enable kvm/ia64's network. Date: Sun, 24 Aug 2008 12:22:10 +0300 Message-ID: <48B12842.5090308@qumranet.com> References: <42DFA526FC41B1429CE7279EF83C6BDC01845A2E@pdsmsx415.ccr.corp.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: kvm-ia64@vger.kernel.org, kvm@vger.kernel.org To: "Zhang, Xiantao" Return-path: Received: from il.qumranet.com ([212.179.150.194]:20345 "EHLO il.qumranet.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751455AbYHXJWM (ORCPT ); Sun, 24 Aug 2008 05:22:12 -0400 In-Reply-To: <42DFA526FC41B1429CE7279EF83C6BDC01845A2E@pdsmsx415.ccr.corp.intel.com> Sender: kvm-owner@vger.kernel.org List-ID: Zhang, Xiantao wrote: > 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 > 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 > Signed-off-by: Xiantao Zhang > --- > 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 ) > 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; > +} > Please move this to pci.c. This can be made to work for x86 too. > 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); > Use headers instead (or move the functions here). > + > + 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); > -- error compiling committee.c: too many arguments to function