]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
genirq: Move irq_thread_fn() further up in the code
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Tue, 19 Nov 2024 10:42:34 +0000 (12:42 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Tue, 3 Dec 2024 10:59:10 +0000 (11:59 +0100)
In a preparation to reuse irq_thread_fn() move it further up in the
code. No functional change intended.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/all/20241119104339.2112455-2-andriy.shevchenko@linux.intel.com
kernel/irq/manage.c

index f0803d6bd2969820443f25b5b508ec553f4cb9a2..230f4701f18e1ef6f2a3119ddd1d159ab85c866e 100644 (file)
@@ -1182,45 +1182,42 @@ out_unlock:
 }
 
 /*
- * Interrupts which are not explicitly requested as threaded
- * interrupts rely on the implicit bh/preempt disable of the hard irq
- * context. So we need to disable bh here to avoid deadlocks and other
- * side effects.
+ * Interrupts explicitly requested as threaded interrupts want to be
+ * preemptible - many of them need to sleep and wait for slow busses to
+ * complete.
  */
-static irqreturn_t
-irq_forced_thread_fn(struct irq_desc *desc, struct irqaction *action)
+static irqreturn_t irq_thread_fn(struct irq_desc *desc,        struct irqaction *action)
 {
-       irqreturn_t ret;
+       irqreturn_t ret = action->thread_fn(action->irq, action->dev_id);
 
-       local_bh_disable();
-       if (!IS_ENABLED(CONFIG_PREEMPT_RT))
-               local_irq_disable();
-       ret = action->thread_fn(action->irq, action->dev_id);
        if (ret == IRQ_HANDLED)
                atomic_inc(&desc->threads_handled);
 
        irq_finalize_oneshot(desc, action);
-       if (!IS_ENABLED(CONFIG_PREEMPT_RT))
-               local_irq_enable();
-       local_bh_enable();
        return ret;
 }
 
 /*
- * Interrupts explicitly requested as threaded interrupts want to be
- * preemptible - many of them need to sleep and wait for slow busses to
- * complete.
+ * Interrupts which are not explicitly requested as threaded
+ * interrupts rely on the implicit bh/preempt disable of the hard irq
+ * context. So we need to disable bh here to avoid deadlocks and other
+ * side effects.
  */
-static irqreturn_t irq_thread_fn(struct irq_desc *desc,
-               struct irqaction *action)
+static irqreturn_t irq_forced_thread_fn(struct irq_desc *desc, struct irqaction *action)
 {
        irqreturn_t ret;
 
+       local_bh_disable();
+       if (!IS_ENABLED(CONFIG_PREEMPT_RT))
+               local_irq_disable();
        ret = action->thread_fn(action->irq, action->dev_id);
        if (ret == IRQ_HANDLED)
                atomic_inc(&desc->threads_handled);
 
        irq_finalize_oneshot(desc, action);
+       if (!IS_ENABLED(CONFIG_PREEMPT_RT))
+               local_irq_enable();
+       local_bh_enable();
        return ret;
 }