irqchip: crossbar: Change allocation logic by reversing search for free irqs
Reverse the search algorithm to ensure that address mapping and IRQ allocation logics are proper. This makes the below bugs visible sooner. class 1. address space errors -> example: reg = <a size_b> ti,max-irqs = is a wrong parameter class 2: irq-reserved list - which decides which entries in the address space is not actually wired in class 3: wrong list of routable-irqs. In general allocating from max to min tends to have benefits in ensuring the different issues that may be present in dts is easily caught at definition time, rather than at a later point in time. Signed-off-by: Nishanth Menon <nm@ti.com> Signed-off-by: Sricharan R <r.sricharan@ti.com> Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com> Link: https://lkml.kernel.org/r/1403766634-18543-6-git-send-email-r.sricharan@ti.com Signed-off-by: Jason Cooper <jason@lakedaemon.net>
This commit is contained in:
parent
a35057d1dc
commit
ddee0fb46d
|
@ -58,7 +58,7 @@ static inline int get_prev_map_irq(int cb_no)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < cb->int_max; i++)
|
for (i = cb->int_max - 1; i >= 0; i--)
|
||||||
if (cb->irq_map[i] == cb_no)
|
if (cb->irq_map[i] == cb_no)
|
||||||
return i;
|
return i;
|
||||||
|
|
||||||
|
@ -69,7 +69,7 @@ static inline int allocate_free_irq(int cb_no)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < cb->int_max; i++) {
|
for (i = cb->int_max - 1; i >= 0; i--) {
|
||||||
if (cb->irq_map[i] == IRQ_FREE) {
|
if (cb->irq_map[i] == IRQ_FREE) {
|
||||||
cb->irq_map[i] = cb_no;
|
cb->irq_map[i] = cb_no;
|
||||||
return i;
|
return i;
|
||||||
|
|
Loading…
Reference in New Issue