diff options
Diffstat (limited to 'kernel/irq/manage.c')
-rw-r--r-- | kernel/irq/manage.c | 18 |
1 files changed, 5 insertions, 13 deletions
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index c3003e9d91a3..8533e32d91d2 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c @@ -755,6 +755,7 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new) irq_chip_set_defaults(desc->chip); init_waitqueue_head(&desc->wait_for_threads); + setup_timer(&desc->poll_timer, poll_irq, (unsigned long)desc); /* Setup the type (level, edge polarity) if configured: */ if (new->flags & IRQF_TRIGGER_MASK) { @@ -803,21 +804,10 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new) new->irq = irq; *old_ptr = new; - /* Reset broken irq detection when installing new handler */ - desc->irq_count = 0; - desc->irqs_unhandled = 0; - - /* - * Check whether we disabled the irq via the spurious handler - * before. Reenable it and give it another chance. - */ - if (shared && (desc->status & IRQ_SPURIOUS_DISABLED)) { - desc->status &= ~IRQ_SPURIOUS_DISABLED; - __enable_irq(desc, irq, false); - } - raw_spin_unlock_irqrestore(&desc->lock, flags); + irq_poll_action_added(desc, new); + /* * Strictly no need to wake it up, but hung_task complains * when no hard interrupt wakes the thread up. @@ -933,6 +923,8 @@ static struct irqaction *__free_irq(unsigned int irq, void *dev_id) raw_spin_unlock_irqrestore(&desc->lock, flags); + irq_poll_action_removed(desc, action); + unregister_handler_proc(irq, action); /* Make sure it's not being used on another CPU: */ |