]> git.baikalelectronics.ru Git - kernel.git/commit
genirq/msi: Activate Multi-MSI early when MSI_FLAG_ACTIVATE_EARLY is set
authorMarc Zyngier <maz@kernel.org>
Sat, 23 Jan 2021 12:27:59 +0000 (12:27 +0000)
committerThomas Gleixner <tglx@linutronix.de>
Sat, 30 Jan 2021 00:22:31 +0000 (01:22 +0100)
commit35126cb18a8652bf88035027d3e2265d9e404018
treeb67981767bff8adf88f41e9759944f894a2187eb
parentc8d4b05b0e0f99dcae6bb046585e664df3f0b86b
genirq/msi: Activate Multi-MSI early when MSI_FLAG_ACTIVATE_EARLY is set

When MSI_FLAG_ACTIVATE_EARLY is set (which is the case for PCI),
__msi_domain_alloc_irqs() performs the activation of the interrupt (which
in the case of PCI results in the endpoint being programmed) as soon as the
interrupt is allocated.

But it appears that this is only done for the first vector, introducing an
inconsistent behaviour for PCI Multi-MSI.

Fix it by iterating over the number of vectors allocated to each MSI
descriptor. This is easily achieved by introducing a new
"for_each_msi_vector" iterator, together with a tiny bit of refactoring.

Fixes: 61afac8049bc ("genirq/msi: Make sure PCI MSIs are activated early")
Reported-by: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20210123122759.1781359-1-maz@kernel.org
include/linux/msi.h
kernel/irq/msi.c