diff options
Diffstat (limited to 'kernel/irq/chip.c')
| -rw-r--r-- | kernel/irq/chip.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c index 7de11bd64dfe..c687ba4363f2 100644 --- a/kernel/irq/chip.c +++ b/kernel/irq/chip.c | |||
| @@ -46,7 +46,10 @@ void dynamic_irq_init(unsigned int irq) | |||
| 46 | desc->irq_count = 0; | 46 | desc->irq_count = 0; |
| 47 | desc->irqs_unhandled = 0; | 47 | desc->irqs_unhandled = 0; |
| 48 | #ifdef CONFIG_SMP | 48 | #ifdef CONFIG_SMP |
| 49 | cpumask_setall(&desc->affinity); | 49 | cpumask_setall(desc->affinity); |
| 50 | #ifdef CONFIG_GENERIC_PENDING_IRQ | ||
| 51 | cpumask_clear(desc->pending_mask); | ||
| 52 | #endif | ||
| 50 | #endif | 53 | #endif |
| 51 | spin_unlock_irqrestore(&desc->lock, flags); | 54 | spin_unlock_irqrestore(&desc->lock, flags); |
| 52 | } | 55 | } |
| @@ -78,6 +81,7 @@ void dynamic_irq_cleanup(unsigned int irq) | |||
| 78 | desc->handle_irq = handle_bad_irq; | 81 | desc->handle_irq = handle_bad_irq; |
| 79 | desc->chip = &no_irq_chip; | 82 | desc->chip = &no_irq_chip; |
| 80 | desc->name = NULL; | 83 | desc->name = NULL; |
| 84 | clear_kstat_irqs(desc); | ||
| 81 | spin_unlock_irqrestore(&desc->lock, flags); | 85 | spin_unlock_irqrestore(&desc->lock, flags); |
| 82 | } | 86 | } |
| 83 | 87 | ||
| @@ -290,7 +294,8 @@ static inline void mask_ack_irq(struct irq_desc *desc, int irq) | |||
| 290 | desc->chip->mask_ack(irq); | 294 | desc->chip->mask_ack(irq); |
| 291 | else { | 295 | else { |
| 292 | desc->chip->mask(irq); | 296 | desc->chip->mask(irq); |
| 293 | desc->chip->ack(irq); | 297 | if (desc->chip->ack) |
| 298 | desc->chip->ack(irq); | ||
| 294 | } | 299 | } |
| 295 | } | 300 | } |
| 296 | 301 | ||
| @@ -476,7 +481,8 @@ handle_edge_irq(unsigned int irq, struct irq_desc *desc) | |||
| 476 | kstat_incr_irqs_this_cpu(irq, desc); | 481 | kstat_incr_irqs_this_cpu(irq, desc); |
| 477 | 482 | ||
| 478 | /* Start handling the irq */ | 483 | /* Start handling the irq */ |
| 479 | desc->chip->ack(irq); | 484 | if (desc->chip->ack) |
| 485 | desc->chip->ack(irq); | ||
| 480 | desc = irq_remap_to_desc(irq, desc); | 486 | desc = irq_remap_to_desc(irq, desc); |
| 481 | 487 | ||
| 482 | /* Mark the IRQ currently in progress.*/ | 488 | /* Mark the IRQ currently in progress.*/ |
