Misc irqchip driver fixes:

- Remove the MSI_CHIP_FLAG_SET_ACK flag from 5 irqchip drivers
    that did not require it.
 
  - Fix IRQ handling delays in the riscv-imsic irqchip driver
 
 Signed-off-by: Ingo Molnar <mingo@kernel.org>
 -----BEGIN PGP SIGNATURE-----
 
 iQJFBAABCgAvFiEEBpT5eoXrXCwVQwEKEnMQ0APhK1gFAmgokL4RHG1pbmdvQGtl
 cm5lbC5vcmcACgkQEnMQ0APhK1ifVQ/7BEeD/o6ePBH5wj0daB/1cLCn51bYm9f1
 ZGgKREt5cnqXvhWyoK1LJKcvica2lc4O69pAjdrEEnC1b18QzWDLgaUem4bxn+SJ
 WfaF/1KwHMOjaWy8DFaKagxUfq4b2c3STolTGov2rLVUdW8chKyhkL6xDcPls8Rp
 ThqVfgwU9enjS50bOPgmrRczWR03VJUXelJ6oow+0zj5WvUwlR3UoKj6vU4adpSt
 VGoVoXu3FTO3BPBOr24l3JhYBVRtGx9QAOpB0nUAOyfSbVaIWYxjHpmBn1KZZLFu
 ViBK2QJpZBngt/7O7bLZ7MDjtoZRKvsr4dWb1bUNK/LIZa3b7Lz1xTpNUVaRONTG
 jOSpKL6PE3ArYEVjYxvF9DnvhQhKNx9dqfFKOSqMO8MsMZYVZ4sBzv3qVLcR7Djp
 FO5Paij71j+jBrM9B6MrejRG6V6zNHlelg9Fvb0/ensIxMRn02ksDTd+fKT5PW2M
 fs3SC6+fsGS6azZndTjDMrDiCyCwHaRdwT9miUGPl/iZWMlj/mmCoX1VxHfYIqJY
 WO7847VBUTukxlOcOorobIW/RdJMHFFXUHMT6lAV1FmmLFnY10Bfd2U6YVvIP4do
 PeEff/+eyHOXJ7ENq37oGS1PZsEfRbYfs11wHC23x7soMhMwofyY05LgcOcTkvKI
 GSaYtEae1wU=
 =ODbQ
 -----END PGP SIGNATURE-----

Merge tag 'irq-urgent-2025-05-17' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull misc irqchip driver fixes from Ingo Molnar:

 - Remove the MSI_CHIP_FLAG_SET_ACK flag from 5 irqchip drivers
   that did not require it

 - Fix IRQ handling delays in the riscv-imsic irqchip driver

* tag 'irq-urgent-2025-05-17' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  irqchip/riscv-imsic: Start local sync timer on correct CPU
  irqchip: Drop MSI_CHIP_FLAG_SET_ACK from unsuspecting MSI drivers
This commit is contained in:
Linus Torvalds 2025-05-17 09:02:11 -07:00
commit 205b2bd793
6 changed files with 10 additions and 10 deletions

View File

@ -252,7 +252,7 @@ static void __init gicv2m_teardown(void)
static struct msi_parent_ops gicv2m_msi_parent_ops = {
.supported_flags = GICV2M_MSI_FLAGS_SUPPORTED,
.required_flags = GICV2M_MSI_FLAGS_REQUIRED,
.chip_flags = MSI_CHIP_FLAG_SET_EOI | MSI_CHIP_FLAG_SET_ACK,
.chip_flags = MSI_CHIP_FLAG_SET_EOI,
.bus_select_token = DOMAIN_BUS_NEXUS,
.bus_select_mask = MATCH_PCI_MSI | MATCH_PLATFORM_MSI,
.prefix = "GICv2m-",

View File

@ -203,7 +203,7 @@ static bool its_init_dev_msi_info(struct device *dev, struct irq_domain *domain,
const struct msi_parent_ops gic_v3_its_msi_parent_ops = {
.supported_flags = ITS_MSI_FLAGS_SUPPORTED,
.required_flags = ITS_MSI_FLAGS_REQUIRED,
.chip_flags = MSI_CHIP_FLAG_SET_EOI | MSI_CHIP_FLAG_SET_ACK,
.chip_flags = MSI_CHIP_FLAG_SET_EOI,
.bus_select_token = DOMAIN_BUS_NEXUS,
.bus_select_mask = MATCH_PCI_MSI | MATCH_PLATFORM_MSI,
.prefix = "ITS-",

View File

@ -197,7 +197,7 @@ static bool mbi_init_dev_msi_info(struct device *dev, struct irq_domain *domain,
static const struct msi_parent_ops gic_v3_mbi_msi_parent_ops = {
.supported_flags = MBI_MSI_FLAGS_SUPPORTED,
.required_flags = MBI_MSI_FLAGS_REQUIRED,
.chip_flags = MSI_CHIP_FLAG_SET_EOI | MSI_CHIP_FLAG_SET_ACK,
.chip_flags = MSI_CHIP_FLAG_SET_EOI,
.bus_select_token = DOMAIN_BUS_NEXUS,
.bus_select_mask = MATCH_PCI_MSI | MATCH_PLATFORM_MSI,
.prefix = "MBI-",

View File

@ -161,7 +161,7 @@ static const struct irq_domain_ops gicp_domain_ops = {
static const struct msi_parent_ops gicp_msi_parent_ops = {
.supported_flags = GICP_MSI_FLAGS_SUPPORTED,
.required_flags = GICP_MSI_FLAGS_REQUIRED,
.chip_flags = MSI_CHIP_FLAG_SET_EOI | MSI_CHIP_FLAG_SET_ACK,
.chip_flags = MSI_CHIP_FLAG_SET_EOI,
.bus_select_token = DOMAIN_BUS_GENERIC_MSI,
.bus_select_mask = MATCH_PLATFORM_MSI,
.prefix = "GICP-",

View File

@ -157,7 +157,7 @@ static const struct irq_domain_ops odmi_domain_ops = {
static const struct msi_parent_ops odmi_msi_parent_ops = {
.supported_flags = ODMI_MSI_FLAGS_SUPPORTED,
.required_flags = ODMI_MSI_FLAGS_REQUIRED,
.chip_flags = MSI_CHIP_FLAG_SET_EOI | MSI_CHIP_FLAG_SET_ACK,
.chip_flags = MSI_CHIP_FLAG_SET_EOI,
.bus_select_token = DOMAIN_BUS_GENERIC_MSI,
.bus_select_mask = MATCH_PLATFORM_MSI,
.prefix = "ODMI-",

View File

@ -208,17 +208,17 @@ static bool __imsic_local_sync(struct imsic_local_priv *lpriv)
}
#ifdef CONFIG_SMP
static void __imsic_local_timer_start(struct imsic_local_priv *lpriv)
static void __imsic_local_timer_start(struct imsic_local_priv *lpriv, unsigned int cpu)
{
lockdep_assert_held(&lpriv->lock);
if (!timer_pending(&lpriv->timer)) {
lpriv->timer.expires = jiffies + 1;
add_timer_on(&lpriv->timer, smp_processor_id());
add_timer_on(&lpriv->timer, cpu);
}
}
#else
static inline void __imsic_local_timer_start(struct imsic_local_priv *lpriv)
static inline void __imsic_local_timer_start(struct imsic_local_priv *lpriv, unsigned int cpu)
{
}
#endif
@ -233,7 +233,7 @@ void imsic_local_sync_all(bool force_all)
if (force_all)
bitmap_fill(lpriv->dirty_bitmap, imsic->global.nr_ids + 1);
if (!__imsic_local_sync(lpriv))
__imsic_local_timer_start(lpriv);
__imsic_local_timer_start(lpriv, smp_processor_id());
raw_spin_unlock_irqrestore(&lpriv->lock, flags);
}
@ -278,7 +278,7 @@ static void __imsic_remote_sync(struct imsic_local_priv *lpriv, unsigned int cpu
return;
}
__imsic_local_timer_start(lpriv);
__imsic_local_timer_start(lpriv, cpu);
}
}
#else