lkml.org 
[lkml]   [2010]   [Dec]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 2/2] xen/irq: Don't fall over when nr_irqs_gsi > nr_irqs.
    Date
    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@oracle.com>
    ---
    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


    \
     
     \ /
      Last update: 2010-12-09 22:03    [W:0.039 / U:0.016 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site