diff options
Diffstat (limited to 'kernel/irq/chip.c')
| -rw-r--r-- | kernel/irq/chip.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c index 122fef4b0bd..c687ba4363f 100644 --- a/kernel/irq/chip.c +++ b/kernel/irq/chip.c | |||
| @@ -81,6 +81,7 @@ void dynamic_irq_cleanup(unsigned int irq) | |||
| 81 | desc->handle_irq = handle_bad_irq; | 81 | desc->handle_irq = handle_bad_irq; |
| 82 | desc->chip = &no_irq_chip; | 82 | desc->chip = &no_irq_chip; |
| 83 | desc->name = NULL; | 83 | desc->name = NULL; |
| 84 | clear_kstat_irqs(desc); | ||
| 84 | spin_unlock_irqrestore(&desc->lock, flags); | 85 | spin_unlock_irqrestore(&desc->lock, flags); |
| 85 | } | 86 | } |
| 86 | 87 | ||
| @@ -293,7 +294,8 @@ static inline void mask_ack_irq(struct irq_desc *desc, int irq) | |||
| 293 | desc->chip->mask_ack(irq); | 294 | desc->chip->mask_ack(irq); |
| 294 | else { | 295 | else { |
| 295 | desc->chip->mask(irq); | 296 | desc->chip->mask(irq); |
| 296 | desc->chip->ack(irq); | 297 | if (desc->chip->ack) |
| 298 | desc->chip->ack(irq); | ||
| 297 | } | 299 | } |
| 298 | } | 300 | } |
| 299 | 301 | ||
| @@ -479,7 +481,8 @@ handle_edge_irq(unsigned int irq, struct irq_desc *desc) | |||
| 479 | kstat_incr_irqs_this_cpu(irq, desc); | 481 | kstat_incr_irqs_this_cpu(irq, desc); |
| 480 | 482 | ||
| 481 | /* Start handling the irq */ | 483 | /* Start handling the irq */ |
| 482 | desc->chip->ack(irq); | 484 | if (desc->chip->ack) |
| 485 | desc->chip->ack(irq); | ||
| 483 | desc = irq_remap_to_desc(irq, desc); | 486 | desc = irq_remap_to_desc(irq, desc); |
| 484 | 487 | ||
| 485 | /* Mark the IRQ currently in progress.*/ | 488 | /* Mark the IRQ currently in progress.*/ |
