summaryrefslogtreecommitdiff
path: root/drivers/sh
diff options
context:
space:
mode:
authorPaul Mundt <lethal@linux-sh.org>2009-05-22 13:29:37 +0900
committerPaul Mundt <lethal@linux-sh.org>2009-05-22 13:29:37 +0900
commit5f8371cec93b94a24a55ba1de642ce6eade6d62c (patch)
tree61b6d2acb10226b3c0f2d31bda3a49288e540eba /drivers/sh
parent8e9bb19ef97d6594e735bee64b6d72103e350854 (diff)
parentd8586ba6e1415150e1bab89f0a05447bb6f2d6d5 (diff)
Merge branches 'sh/stable-updates' and 'sh/sparseirq'
Diffstat (limited to 'drivers/sh')
-rw-r--r--drivers/sh/intc.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/drivers/sh/intc.c b/drivers/sh/intc.c
index 12d13d99b6f..098b767e9af 100644
--- a/drivers/sh/intc.c
+++ b/drivers/sh/intc.c
@@ -671,7 +671,7 @@ unsigned int intc_evt2irq(unsigned int vector)
void __init register_intc_controller(struct intc_desc *desc)
{
- unsigned int i, k, smp;
+ unsigned int i, k, smp, cpu = smp_processor_id();
struct intc_desc_int *d;
d = alloc_bootmem(sizeof(*d));
@@ -770,11 +770,19 @@ void __init register_intc_controller(struct intc_desc *desc)
/* register the vectors one by one */
for (i = 0; i < desc->nr_vectors; i++) {
struct intc_vect *vect = desc->vectors + i;
+ unsigned int irq = evt2irq(vect->vect);
+ struct irq_desc *irq_desc;
if (!vect->enum_id)
continue;
- intc_register_irq(desc, d, vect->enum_id, evt2irq(vect->vect));
+ irq_desc = irq_to_desc_alloc_cpu(irq, cpu);
+ if (unlikely(!irq_desc)) {
+ printk(KERN_INFO "can not get irq_desc for %d\n", irq);
+ continue;
+ }
+
+ intc_register_irq(desc, d, vect->enum_id, irq);
}
}