mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-05 08:26:59 +00:00
irqdomain: Fix disassociation race
commit3f883c38f5
upstream. The global irq_domain_mutex is held when mapping interrupts from non-hierarchical domains but currently not when disposing them. This specifically means that updates of the domain mapcount is racy (currently only used for statistics in debugfs). Make sure to hold the global irq_domain_mutex also when disposing mappings from non-hierarchical domains. Fixes:9dc6be3d41
("genirq/irqdomain: Add map counter") Cc: stable@vger.kernel.org # 4.13 Tested-by: Hsin-Yi Wang <hsinyi@chromium.org> Tested-by: Mark-PK Tsai <mark-pk.tsai@mediatek.com> Signed-off-by: Johan Hovold <johan+linaro@kernel.org> Signed-off-by: Marc Zyngier <maz@kernel.org> Link: https://lore.kernel.org/r/20230213104302.17307-3-johan+linaro@kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
33bf92b1d0
commit
deb243ca05
1 changed files with 5 additions and 0 deletions
|
@ -538,6 +538,9 @@ static void irq_domain_disassociate(struct irq_domain *domain, unsigned int irq)
|
|||
return;
|
||||
|
||||
hwirq = irq_data->hwirq;
|
||||
|
||||
mutex_lock(&irq_domain_mutex);
|
||||
|
||||
irq_set_status_flags(irq, IRQ_NOREQUEST);
|
||||
|
||||
/* remove chip and handler */
|
||||
|
@ -557,6 +560,8 @@ static void irq_domain_disassociate(struct irq_domain *domain, unsigned int irq)
|
|||
|
||||
/* Clear reverse map for this hwirq */
|
||||
irq_domain_clear_mapping(domain, hwirq);
|
||||
|
||||
mutex_unlock(&irq_domain_mutex);
|
||||
}
|
||||
|
||||
static int irq_domain_associate_locked(struct irq_domain *domain, unsigned int virq,
|
||||
|
|
Loading…
Reference in a new issue