diff options
-rw-r--r-- | kernel/irq/manage.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index df69993d6030..e4a6ba9786bf 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c @@ -537,6 +537,14 @@ static void preempt_hardirq_setup(struct irqaction *new) new->thread_fn = new->handler; new->handler = preempt_hardirq_handler; } + +static inline void +preempt_hardirq_cleanup(struct irq_desc *desc, struct irqaction *action) +{ + clear_bit(IRQTF_RUNTHREAD, &action->thread_flags); + preempt_hardirq_thread_done(desc, action); +} + #else static inline void preempt_hardirq_setup(struct irqaction *new) { } static inline int @@ -544,6 +552,8 @@ preempt_hardirq_thread_done(struct irq_desc *d, struct irqaction *a) { return 0; } +static inline void +preempt_hardirq_cleanup(struct irq_desc *d, struct irqaction *a) { } #endif static int @@ -639,6 +649,8 @@ static int irq_thread(void *data) wake_up(&desc->wait_for_threads); } + preempt_hardirq_cleanup(desc, action); + /* * Clear irqaction. Otherwise exit_irq_thread() would make * fuzz about an active irq thread going into nirvana. |