diff options
Diffstat (limited to 'kernel/irq/manage.c')
| -rw-r--r-- | kernel/irq/manage.c | 10 | 
1 files changed, 8 insertions, 2 deletions
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index d222515a5a0..0ec9ed83173 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c @@ -607,7 +607,6 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)  		 */  		get_task_struct(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));  	} +	new->irq = irq;  	*old_ptr = new;  	/* 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); -	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);  	new->dir = NULL;  	register_handler_proc(irq, new);  | 
