https://bugzilla.kernel.org/show_bug.cgi?id=68291

--- Comment #32 from Jin Yao <[email protected]> ---
I think the issue is at the "__irq_alloc_descs()".

__irq_alloc_descs(int irq, unsigned int from, unsigned int cnt, int node,
          struct module *owner)
{
    int start, ret;

    if (!cnt)
        return -EINVAL;

    if (irq >= 0) {
        if (from > irq)
            return -EINVAL;
        from = irq;
    }

    mutex_lock(&sparse_irq_lock);

    start = bitmap_find_next_zero_area(allocated_irqs, IRQ_BITMAP_BITS,
                       from, cnt, 0);
    ret = -EEXIST;

    /* Jin Yao: irq = 16, start = 17 */
/* A */ if (irq >=0 && start != irq)
        goto err;

    if (start + cnt > nr_irqs) {
        ret = irq_expand_nr_irqs(start + cnt);
        if (ret)
            goto err;
    }

    bitmap_set(allocated_irqs, start, cnt);
    mutex_unlock(&sparse_irq_lock);
    return alloc_descs(start, cnt, node, owner);

err:
    mutex_unlock(&sparse_irq_lock);
    return ret;
}

At the case of i915 driver probing, the irq is 16 and
bitmap_find_next_zero_area() returns 17. That's correct, because 16 is occupied
by GPIO pin. The problem is at the line A, the checking is failed and goto
"err:" directly.

Line A should be buggy code for this case, but I'm not sure if other code may
be impacted if I just removed the line A here.

-- 
You are receiving this mail because:
You are watching the assignee of the bug.

------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book
"Graph Databases" is the definitive new guide to graph databases and their
applications. Written by three acclaimed leaders in the field,
this first edition is now available. Download your free book today!
http://p.sf.net/sfu/13534_NeoTech
_______________________________________________
acpi-bugzilla mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/acpi-bugzilla

Reply via email to