Commit 046a6ee2 authored by Marc Zyngier's avatar Marc Zyngier
Browse files

irqchip: Bulk conversion to generic_handle_domain_irq()



Wherever possible, replace constructs that match either
generic_handle_irq(irq_find_mapping()) or
generic_handle_irq(irq_linear_revmap()) to a single call to
generic_handle_domain_irq().

Reviewed-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
Acked-by: default avatarKrzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
parent e1c05491
Loading
Loading
Loading
Loading
+4 −6
Original line number Diff line number Diff line
@@ -66,8 +66,9 @@ static void combiner_handle_cascade_irq(struct irq_desc *desc)
{
	struct combiner_chip_data *chip_data = irq_desc_get_handler_data(desc);
	struct irq_chip *chip = irq_desc_get_chip(desc);
	unsigned int cascade_irq, combiner_irq;
	unsigned int combiner_irq;
	unsigned long status;
	int ret;

	chained_irq_enter(chip, desc);

@@ -80,12 +81,9 @@ static void combiner_handle_cascade_irq(struct irq_desc *desc)
		goto out;

	combiner_irq = chip_data->hwirq_offset + __ffs(status);
	cascade_irq = irq_find_mapping(combiner_irq_domain, combiner_irq);

	if (unlikely(!cascade_irq))
	ret = generic_handle_domain_irq(combiner_irq_domain, combiner_irq);
	if (unlikely(ret))
		handle_bad_irq(desc);
	else
		generic_handle_irq(cascade_irq);

 out:
	chained_irq_exit(chip, desc);
+2 −5
Original line number Diff line number Diff line
@@ -111,7 +111,6 @@ static void al_fic_irq_handler(struct irq_desc *desc)
	struct irq_chip *irqchip = irq_desc_get_chip(desc);
	struct irq_chip_generic *gc = irq_get_domain_generic_chip(domain, 0);
	unsigned long pending;
	unsigned int irq;
	u32 hwirq;

	chained_irq_enter(irqchip, desc);
@@ -119,10 +118,8 @@ static void al_fic_irq_handler(struct irq_desc *desc)
	pending = readl_relaxed(fic->base + AL_FIC_CAUSE);
	pending &= ~gc->mask_cache;

	for_each_set_bit(hwirq, &pending, NR_FIC_IRQS) {
		irq = irq_find_mapping(domain, hwirq);
		generic_handle_irq(irq);
	}
	for_each_set_bit(hwirq, &pending, NR_FIC_IRQS)
		generic_handle_domain_irq(domain, hwirq);

	chained_irq_exit(irqchip, desc);
}
+8 −11
Original line number Diff line number Diff line
@@ -582,22 +582,21 @@ static void armada_370_xp_handle_msi_irq(struct pt_regs *regs, bool is_chained)

	for (msinr = PCI_MSI_DOORBELL_START;
	     msinr < PCI_MSI_DOORBELL_END; msinr++) {
		int irq;
		unsigned int irq;

		if (!(msimask & BIT(msinr)))
			continue;

		if (is_chained) {
			irq = irq_find_mapping(armada_370_xp_msi_inner_domain,
					       msinr - PCI_MSI_DOORBELL_START);
			generic_handle_irq(irq);
		} else {
		irq = msinr - PCI_MSI_DOORBELL_START;

		if (is_chained)
			generic_handle_domain_irq(armada_370_xp_msi_inner_domain,
						  irq);
		else
			handle_domain_irq(armada_370_xp_msi_inner_domain,
					  irq, regs);
	}
}
}
#else
static void armada_370_xp_handle_msi_irq(struct pt_regs *r, bool b) {}
#endif
@@ -606,7 +605,6 @@ static void armada_370_xp_mpic_handle_cascade_irq(struct irq_desc *desc)
{
	struct irq_chip *chip = irq_desc_get_chip(desc);
	unsigned long irqmap, irqn, irqsrc, cpuid;
	unsigned int cascade_irq;

	chained_irq_enter(chip, desc);

@@ -628,8 +626,7 @@ static void armada_370_xp_mpic_handle_cascade_irq(struct irq_desc *desc)
			continue;
		}

		cascade_irq = irq_find_mapping(armada_370_xp_mpic_domain, irqn);
		generic_handle_irq(cascade_irq);
		generic_handle_domain_irq(armada_370_xp_mpic_domain, irqn);
	}

	chained_irq_exit(chip, desc);
+3 −5
Original line number Diff line number Diff line
@@ -34,14 +34,12 @@ static void aspeed_i2c_ic_irq_handler(struct irq_desc *desc)
	struct aspeed_i2c_ic *i2c_ic = irq_desc_get_handler_data(desc);
	struct irq_chip *chip = irq_desc_get_chip(desc);
	unsigned long bit, status;
	unsigned int bus_irq;

	chained_irq_enter(chip, desc);
	status = readl(i2c_ic->base);
	for_each_set_bit(bit, &status, ASPEED_I2C_IC_NUM_BUS) {
		bus_irq = irq_find_mapping(i2c_ic->irq_domain, bit);
		generic_handle_irq(bus_irq);
	}
	for_each_set_bit(bit, &status, ASPEED_I2C_IC_NUM_BUS)
		generic_handle_domain_irq(i2c_ic->irq_domain, bit);

	chained_irq_exit(chip, desc);
}

+2 −4
Original line number Diff line number Diff line
@@ -44,7 +44,6 @@ struct aspeed_scu_ic {

static void aspeed_scu_ic_irq_handler(struct irq_desc *desc)
{
	unsigned int irq;
	unsigned int sts;
	unsigned long bit;
	unsigned long enabled;
@@ -74,9 +73,8 @@ static void aspeed_scu_ic_irq_handler(struct irq_desc *desc)
	max = scu_ic->num_irqs + bit;

	for_each_set_bit_from(bit, &status, max) {
		irq = irq_find_mapping(scu_ic->irq_domain,
		generic_handle_domain_irq(scu_ic->irq_domain,
					  bit - scu_ic->irq_shift);
		generic_handle_irq(irq);

		regmap_update_bits(scu_ic->scu, scu_ic->reg, mask,
				   BIT(bit + ASPEED_SCU_IC_STATUS_SHIFT));
Loading