diff options
| -rw-r--r-- | arch/sparc/kernel/leon_kernel.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/arch/sparc/kernel/leon_kernel.c b/arch/sparc/kernel/leon_kernel.c index 87f60ee65433..7c0231dabe44 100644 --- a/arch/sparc/kernel/leon_kernel.c +++ b/arch/sparc/kernel/leon_kernel.c | |||
| @@ -213,6 +213,7 @@ unsigned int leon_build_device_irq(unsigned int real_irq, | |||
| 213 | { | 213 | { |
| 214 | unsigned int irq; | 214 | unsigned int irq; |
| 215 | unsigned long mask; | 215 | unsigned long mask; |
| 216 | struct irq_desc *desc; | ||
| 216 | 217 | ||
| 217 | irq = 0; | 218 | irq = 0; |
| 218 | mask = leon_get_irqmask(real_irq); | 219 | mask = leon_get_irqmask(real_irq); |
| @@ -226,9 +227,12 @@ unsigned int leon_build_device_irq(unsigned int real_irq, | |||
| 226 | if (do_ack) | 227 | if (do_ack) |
| 227 | mask |= LEON_DO_ACK_HW; | 228 | mask |= LEON_DO_ACK_HW; |
| 228 | 229 | ||
| 229 | irq_set_chip_and_handler_name(irq, &leon_irq, | 230 | desc = irq_to_desc(irq); |
| 230 | flow_handler, name); | 231 | if (!desc || !desc->handle_irq || desc->handle_irq == handle_bad_irq) { |
| 231 | irq_set_chip_data(irq, (void *)mask); | 232 | irq_set_chip_and_handler_name(irq, &leon_irq, |
| 233 | flow_handler, name); | ||
| 234 | irq_set_chip_data(irq, (void *)mask); | ||
| 235 | } | ||
| 232 | 236 | ||
| 233 | out: | 237 | out: |
| 234 | return irq; | 238 | return irq; |
