Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull irq fix from Ingo Molnar:
"A fix for an MSI regression"

* 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
genirq/msi: Make sure PCI MSIs are activated early

+15
+2
drivers/pci/msi.c
··· 1411 1411 if (info->flags & MSI_FLAG_USE_DEF_CHIP_OPS) 1412 1412 pci_msi_domain_update_chip_ops(info); 1413 1413 1414 + info->flags |= MSI_FLAG_ACTIVATE_EARLY; 1415 + 1414 1416 domain = msi_create_irq_domain(fwnode, info, parent); 1415 1417 if (!domain) 1416 1418 return NULL;
+2
include/linux/msi.h
··· 270 270 MSI_FLAG_MULTI_PCI_MSI = (1 << 2), 271 271 /* Support PCI MSIX interrupts */ 272 272 MSI_FLAG_PCI_MSIX = (1 << 3), 273 + /* Needs early activate, required for PCI */ 274 + MSI_FLAG_ACTIVATE_EARLY = (1 << 4), 273 275 }; 274 276 275 277 int msi_domain_set_affinity(struct irq_data *data, const struct cpumask *mask,
+11
kernel/irq/msi.c
··· 359 359 else 360 360 dev_dbg(dev, "irq [%d-%d] for MSI\n", 361 361 virq, virq + desc->nvec_used - 1); 362 + /* 363 + * This flag is set by the PCI layer as we need to activate 364 + * the MSI entries before the PCI layer enables MSI in the 365 + * card. Otherwise the card latches a random msi message. 366 + */ 367 + if (info->flags & MSI_FLAG_ACTIVATE_EARLY) { 368 + struct irq_data *irq_data; 369 + 370 + irq_data = irq_domain_get_irq_data(domain, desc->irq); 371 + irq_domain_activate_irq(irq_data); 372 + } 362 373 } 363 374 364 375 return 0;