|
@@ -607,7 +607,6 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)
|
|
*/
|
|
*/
|
|
get_task_struct(t);
|
|
get_task_struct(t);
|
|
new->thread = t;
|
|
new->thread = t;
|
|
- wake_up_process(t);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -690,6 +689,7 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)
|
|
(int)(new->flags & IRQF_TRIGGER_MASK));
|
|
(int)(new->flags & IRQF_TRIGGER_MASK));
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ new->irq = irq;
|
|
*old_ptr = new;
|
|
*old_ptr = new;
|
|
|
|
|
|
/* Reset broken irq detection when installing new handler */
|
|
/* Reset broken irq detection when installing new handler */
|
|
@@ -707,7 +707,13 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)
|
|
|
|
|
|
spin_unlock_irqrestore(&desc->lock, flags);
|
|
spin_unlock_irqrestore(&desc->lock, flags);
|
|
|
|
|
|
- new->irq = irq;
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Strictly no need to wake it up, but hung_task complains
|
|
|
|
+ * when no hard interrupt wakes the thread up.
|
|
|
|
+ */
|
|
|
|
+ if (new->thread)
|
|
|
|
+ wake_up_process(new->thread);
|
|
|
|
+
|
|
register_irq_proc(irq, desc);
|
|
register_irq_proc(irq, desc);
|
|
new->dir = NULL;
|
|
new->dir = NULL;
|
|
register_handler_proc(irq, new);
|
|
register_handler_proc(irq, new);
|