|
@@ -761,7 +761,6 @@ static struct irqaction *__free_irq(unsigned int irq, void *dev_id)
|
|
{
|
|
{
|
|
struct irq_desc *desc = irq_to_desc(irq);
|
|
struct irq_desc *desc = irq_to_desc(irq);
|
|
struct irqaction *action, **action_ptr;
|
|
struct irqaction *action, **action_ptr;
|
|
- struct task_struct *irqthread;
|
|
|
|
unsigned long flags;
|
|
unsigned long flags;
|
|
|
|
|
|
WARN(in_interrupt(), "Trying to free IRQ %d from IRQ context!\n", irq);
|
|
WARN(in_interrupt(), "Trying to free IRQ %d from IRQ context!\n", irq);
|
|
@@ -809,9 +808,6 @@ static struct irqaction *__free_irq(unsigned int irq, void *dev_id)
|
|
desc->chip->disable(irq);
|
|
desc->chip->disable(irq);
|
|
}
|
|
}
|
|
|
|
|
|
- irqthread = action->thread;
|
|
|
|
- action->thread = NULL;
|
|
|
|
-
|
|
|
|
spin_unlock_irqrestore(&desc->lock, flags);
|
|
spin_unlock_irqrestore(&desc->lock, flags);
|
|
|
|
|
|
unregister_handler_proc(irq, action);
|
|
unregister_handler_proc(irq, action);
|
|
@@ -819,12 +815,6 @@ static struct irqaction *__free_irq(unsigned int irq, void *dev_id)
|
|
/* Make sure it's not being used on another CPU: */
|
|
/* Make sure it's not being used on another CPU: */
|
|
synchronize_irq(irq);
|
|
synchronize_irq(irq);
|
|
|
|
|
|
- if (irqthread) {
|
|
|
|
- if (!test_bit(IRQTF_DIED, &action->thread_flags))
|
|
|
|
- kthread_stop(irqthread);
|
|
|
|
- put_task_struct(irqthread);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
#ifdef CONFIG_DEBUG_SHIRQ
|
|
#ifdef CONFIG_DEBUG_SHIRQ
|
|
/*
|
|
/*
|
|
* It's a shared IRQ -- the driver ought to be prepared for an IRQ
|
|
* It's a shared IRQ -- the driver ought to be prepared for an IRQ
|
|
@@ -840,6 +830,13 @@ static struct irqaction *__free_irq(unsigned int irq, void *dev_id)
|
|
local_irq_restore(flags);
|
|
local_irq_restore(flags);
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|
|
|
|
+
|
|
|
|
+ if (action->thread) {
|
|
|
|
+ if (!test_bit(IRQTF_DIED, &action->thread_flags))
|
|
|
|
+ kthread_stop(action->thread);
|
|
|
|
+ put_task_struct(action->thread);
|
|
|
|
+ }
|
|
|
|
+
|
|
return action;
|
|
return action;
|
|
}
|
|
}
|
|
|
|
|