Commit ddee0fb4 authored by Nishanth Menon's avatar Nishanth Menon Committed by Jason Cooper

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: default avatarNishanth Menon <nm@ti.com>
Signed-off-by: default avatarSricharan R <r.sricharan@ti.com>
Acked-by: default avatarSantosh Shilimkar <santosh.shilimkar@ti.com>
Link: https://lkml.kernel.org/r/1403766634-18543-6-git-send-email-r.sricharan@ti.comSigned-off-by: default avatarJason Cooper <jason@lakedaemon.net>
parent a35057d1
...@@ -58,7 +58,7 @@ static inline int get_prev_map_irq(int cb_no) ...@@ -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) ...@@ -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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment