irqchip/armada-370-xp: Refactor handling IPI interrupts
authorMarek Behún <kabel@kernel.org>
Thu, 11 Jul 2024 11:57:48 +0000 (13:57 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Tue, 30 Jul 2024 11:35:47 +0000 (13:35 +0200)
Refactor the handling of IPI interrupts
- put into own function mpic_handle_ipi_irq(), similar to
  mpic_handle_msi_irq()
- rename the variable holding the doorbell cause register to "cause"
- retype and rename the variable holding the IPI HW IRQ number to
  "irq_hw_number_t i"

Signed-off-by: Marek Behún <kabel@kernel.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Link: https://lore.kernel.org/all/20240711115748.30268-11-kabel@kernel.org
drivers/irqchip/irq-armada-370-xp.c

index 5c2631f6f7b00496bec306565ce5c8b3f311bc2b..d42c7a1750ac7edeb8965b0c0c65bb12114c4061 100644 (file)
@@ -619,6 +619,22 @@ static void mpic_handle_msi_irq(void)
 static void mpic_handle_msi_irq(void) {}
 #endif
 
+#ifdef CONFIG_SMP
+static void mpic_handle_ipi_irq(void)
+{
+       unsigned long cause;
+       irq_hw_number_t i;
+
+       cause = readl_relaxed(per_cpu_int_base + MPIC_IN_DRBEL_CAUSE);
+       cause &= IPI_DOORBELL_MASK;
+
+       for_each_set_bit(i, &cause, IPI_DOORBELL_END)
+               generic_handle_domain_irq(mpic_ipi_domain, i);
+}
+#else
+static inline void mpic_handle_ipi_irq(void) {}
+#endif
+
 static void mpic_handle_cascade_irq(struct irq_desc *desc)
 {
        struct irq_chip *chip = irq_desc_get_chip(desc);
@@ -669,19 +685,9 @@ static void __exception_irq_entry mpic_handle_irq(struct pt_regs *regs)
                if (irqnr == 1)
                        mpic_handle_msi_irq();
 
-#ifdef CONFIG_SMP
                /* IPI Handling */
-               if (irqnr == 0) {
-                       unsigned long ipimask;
-                       int ipi;
-
-                       ipimask = readl_relaxed(per_cpu_int_base + MPIC_IN_DRBEL_CAUSE) &
-                                 IPI_DOORBELL_MASK;
-
-                       for_each_set_bit(ipi, &ipimask, IPI_DOORBELL_END)
-                               generic_handle_domain_irq(mpic_ipi_domain, ipi);
-               }
-#endif
+               if (irqnr == 0)
+                       mpic_handle_ipi_irq();
        } while (1);
 }