[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 2/2] xen/irq: Don't fall over when nr_irqs_gsi > nr_irqs.
This scenario where the nr_irq_gsi is greater than nr_irqs is rather strange but lets still try to survive. Make sure to print a warning so the user wouldn't be surprised in case things don't work. Solves a bootup-crash when booting Xen and Linux under QEMU. Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> --- drivers/xen/events.c | 9 +++++++++ 1 files changed, 9 insertions(+), 0 deletions(-) diff --git a/drivers/xen/events.c b/drivers/xen/events.c index 4d4a23d..11687dd 100644 --- a/drivers/xen/events.c +++ b/drivers/xen/events.c @@ -411,6 +411,7 @@ static int find_unbound_irq(void) if (bottom == nr_irqs) goto no_irqs; +retry: /* This loop starts from the top of IRQ space and goes down. * We need this b/c if we have a PCI device in a Xen PV guest * we do not have an IO-APIC (though the backend might have them) @@ -434,6 +435,14 @@ static int find_unbound_irq(void) goto no_irqs; res = irq_alloc_desc_at(irq, -1); + if (res == -EEXIST) { + top--; + if (bottom > top) + printk(KERN_ERR "Eating in GSI/MSI space (%ld)!" \ + " Your PCI device might not work!\n", top); + if (top > NR_IRQS_LEGACY) + goto retry; + } if (WARN_ON(res != irq)) return -1; -- 1.7.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |