.. | .. |
---|
82 | 82 | }; |
---|
83 | 83 | |
---|
84 | 84 | struct bcm6345_l1_cpu { |
---|
| 85 | + struct bcm6345_l1_chip *intc; |
---|
85 | 86 | void __iomem *map_base; |
---|
86 | 87 | unsigned int parent_irq; |
---|
87 | 88 | u32 enable_cache[]; |
---|
.. | .. |
---|
115 | 116 | |
---|
116 | 117 | static void bcm6345_l1_irq_handle(struct irq_desc *desc) |
---|
117 | 118 | { |
---|
118 | | - struct bcm6345_l1_chip *intc = irq_desc_get_handler_data(desc); |
---|
119 | | - struct bcm6345_l1_cpu *cpu; |
---|
| 119 | + struct bcm6345_l1_cpu *cpu = irq_desc_get_handler_data(desc); |
---|
| 120 | + struct bcm6345_l1_chip *intc = cpu->intc; |
---|
120 | 121 | struct irq_chip *chip = irq_desc_get_chip(desc); |
---|
121 | 122 | unsigned int idx; |
---|
122 | | - |
---|
123 | | -#ifdef CONFIG_SMP |
---|
124 | | - cpu = intc->cpus[cpu_logical_map(smp_processor_id())]; |
---|
125 | | -#else |
---|
126 | | - cpu = intc->cpus[0]; |
---|
127 | | -#endif |
---|
128 | 123 | |
---|
129 | 124 | chained_irq_enter(chip, desc); |
---|
130 | 125 | |
---|
.. | .. |
---|
257 | 252 | if (!cpu) |
---|
258 | 253 | return -ENOMEM; |
---|
259 | 254 | |
---|
| 255 | + cpu->intc = intc; |
---|
260 | 256 | cpu->map_base = ioremap(res.start, sz); |
---|
261 | 257 | if (!cpu->map_base) |
---|
262 | 258 | return -ENOMEM; |
---|
.. | .. |
---|
272 | 268 | return -EINVAL; |
---|
273 | 269 | } |
---|
274 | 270 | irq_set_chained_handler_and_data(cpu->parent_irq, |
---|
275 | | - bcm6345_l1_irq_handle, intc); |
---|
| 271 | + bcm6345_l1_irq_handle, cpu); |
---|
276 | 272 | |
---|
277 | 273 | return 0; |
---|
278 | 274 | } |
---|