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.*/ |