[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.