Unverified Commit 7c7ad035 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!5774 irqdomain: Fix driver re-inserting failures when IRQs not being freed

parents 8f7c77eb d5dc3ac1
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -1443,13 +1443,24 @@ static void irq_domain_free_irqs_hierarchy(struct irq_domain *domain,
					   unsigned int nr_irqs)
{
	unsigned int i;
	int n;

	if (!domain->ops->free)
		return;

	for (i = 0; i < nr_irqs; i++) {
		if (irq_domain_get_irq_data(domain, irq_base + i))
			domain->ops->free(domain, irq_base + i, 1);
		/* Find the largest possible span of IRQs to free in one go */
		for (n = 0;
			((i + n) < nr_irqs) &&
			 (irq_domain_get_irq_data(domain, irq_base + i + n));
			n++)
			;

		if (!n)
			continue;

		domain->ops->free(domain, irq_base + i, n);
		i += n;
	}
}