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 Original line 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 combiner_chip_data *chip_data = irq_desc_get_handler_data(desc);
	struct irq_chip *chip = irq_desc_get_chip(desc);
	struct irq_chip *chip = irq_desc_get_chip(desc);
	unsigned int cascade_irq, combiner_irq;
	unsigned int combiner_irq;
	unsigned long status;
	unsigned long status;
	int ret;


	chained_irq_enter(chip, desc);
	chained_irq_enter(chip, desc);


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


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

	if (unlikely(ret))
	if (unlikely(!cascade_irq))
		handle_bad_irq(desc);
		handle_bad_irq(desc);
	else
		generic_handle_irq(cascade_irq);


 out:
 out:
	chained_irq_exit(chip, desc);
	chained_irq_exit(chip, desc);
+2 −5
Original line number Original line 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 *irqchip = irq_desc_get_chip(desc);
	struct irq_chip_generic *gc = irq_get_domain_generic_chip(domain, 0);
	struct irq_chip_generic *gc = irq_get_domain_generic_chip(domain, 0);
	unsigned long pending;
	unsigned long pending;
	unsigned int irq;
	u32 hwirq;
	u32 hwirq;


	chained_irq_enter(irqchip, desc);
	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 = readl_relaxed(fic->base + AL_FIC_CAUSE);
	pending &= ~gc->mask_cache;
	pending &= ~gc->mask_cache;


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


	chained_irq_exit(irqchip, desc);
	chained_irq_exit(irqchip, desc);
}
}
+8 −11
Original line number Original line 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;
	for (msinr = PCI_MSI_DOORBELL_START;
	     msinr < PCI_MSI_DOORBELL_END; msinr++) {
	     msinr < PCI_MSI_DOORBELL_END; msinr++) {
		int irq;
		unsigned int irq;


		if (!(msimask & BIT(msinr)))
		if (!(msimask & BIT(msinr)))
			continue;
			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;
		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,
			handle_domain_irq(armada_370_xp_msi_inner_domain,
					  irq, regs);
					  irq, regs);
	}
	}
}
}
}
#else
#else
static void armada_370_xp_handle_msi_irq(struct pt_regs *r, bool b) {}
static void armada_370_xp_handle_msi_irq(struct pt_regs *r, bool b) {}
#endif
#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);
	struct irq_chip *chip = irq_desc_get_chip(desc);
	unsigned long irqmap, irqn, irqsrc, cpuid;
	unsigned long irqmap, irqn, irqsrc, cpuid;
	unsigned int cascade_irq;


	chained_irq_enter(chip, desc);
	chained_irq_enter(chip, desc);


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


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


	chained_irq_exit(chip, desc);
	chained_irq_exit(chip, desc);
+3 −5
Original line number Original line 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 aspeed_i2c_ic *i2c_ic = irq_desc_get_handler_data(desc);
	struct irq_chip *chip = irq_desc_get_chip(desc);
	struct irq_chip *chip = irq_desc_get_chip(desc);
	unsigned long bit, status;
	unsigned long bit, status;
	unsigned int bus_irq;


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

	}
	chained_irq_exit(chip, desc);
	chained_irq_exit(chip, desc);
}
}


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


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


	for_each_set_bit_from(bit, &status, max) {
	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);
					  bit - scu_ic->irq_shift);
		generic_handle_irq(irq);


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