Message ID | 20221111122014.409654736@linutronix.de (mailing list archive) |
---|---|
State | Handled Elsewhere |
Headers | show |
Series | genirq, PCI/MSI: Support for per device MSI and PCI/IMS - Part 1 cleanups | expand |
On Fri, Nov 11, 2022 at 02:54:37PM +0100, Thomas Gleixner wrote: > From: Ahmed S. Darwish <darwi@linutronix.de> > > Let the core do the freeing of descriptors and just keep it around for the > legacy case. > > Signed-off-by: Ahmed S. Darwish <darwi@linutronix.de> > Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Acked-by: Bjorn Helgaas <bhelgaas@google.com> > --- > drivers/pci/msi/irqdomain.c | 10 +++++++--- > 1 file changed, 7 insertions(+), 3 deletions(-) > > --- a/drivers/pci/msi/irqdomain.c > +++ b/drivers/pci/msi/irqdomain.c > @@ -24,11 +24,12 @@ void pci_msi_teardown_msi_irqs(struct pc > struct irq_domain *domain; > > domain = dev_get_msi_domain(&dev->dev); > - if (domain && irq_domain_is_hierarchy(domain)) > + if (domain && irq_domain_is_hierarchy(domain)) { > msi_domain_free_irqs_descs_locked(domain, &dev->dev); > - else > + } else { > pci_msi_legacy_teardown_msi_irqs(dev); > - msi_free_msi_descs(&dev->dev); > + msi_free_msi_descs(&dev->dev); > + } > } > > /** > @@ -170,6 +171,9 @@ struct irq_domain *pci_msi_create_irq_do > if (info->flags & MSI_FLAG_USE_DEF_CHIP_OPS) > pci_msi_domain_update_chip_ops(info); > > + /* Let the core code free MSI descriptors when freeing interrupts */ > + info->flags |= MSI_FLAG_FREE_MSI_DESCS; > + > info->flags |= MSI_FLAG_ACTIVATE_EARLY | MSI_FLAG_DEV_SYSFS; > if (IS_ENABLED(CONFIG_GENERIC_IRQ_RESERVATION_MODE)) > info->flags |= MSI_FLAG_MUST_REACTIVATE; >
On Fri, Nov 11, 2022 at 02:54:37PM +0100, Thomas Gleixner wrote: > From: Ahmed S. Darwish <darwi@linutronix.de> > > Let the core do the freeing of descriptors and just keep it around for the > legacy case. > > Signed-off-by: Ahmed S. Darwish <darwi@linutronix.de> > Signed-off-by: Thomas Gleixner <tglx@linutronix.de> > --- > drivers/pci/msi/irqdomain.c | 10 +++++++--- > 1 file changed, 7 insertions(+), 3 deletions(-) > > --- a/drivers/pci/msi/irqdomain.c > +++ b/drivers/pci/msi/irqdomain.c > @@ -24,11 +24,12 @@ void pci_msi_teardown_msi_irqs(struct pc > struct irq_domain *domain; > > domain = dev_get_msi_domain(&dev->dev); > - if (domain && irq_domain_is_hierarchy(domain)) > + if (domain && irq_domain_is_hierarchy(domain)) { > msi_domain_free_irqs_descs_locked(domain, &dev->dev); > - else > + } else { > pci_msi_legacy_teardown_msi_irqs(dev); > - msi_free_msi_descs(&dev->dev); > + msi_free_msi_descs(&dev->dev); > + } > } > > /** > @@ -170,6 +171,9 @@ struct irq_domain *pci_msi_create_irq_do > if (info->flags & MSI_FLAG_USE_DEF_CHIP_OPS) > pci_msi_domain_update_chip_ops(info); > > + /* Let the core code free MSI descriptors when freeing interrupts */ > + info->flags |= MSI_FLAG_FREE_MSI_DESCS; Comment repeats the one on the enum declaration? Reviewed-by: Jason Gunthorpe <jgg@nvidia.com> Jason
--- a/drivers/pci/msi/irqdomain.c +++ b/drivers/pci/msi/irqdomain.c @@ -24,11 +24,12 @@ void pci_msi_teardown_msi_irqs(struct pc struct irq_domain *domain; domain = dev_get_msi_domain(&dev->dev); - if (domain && irq_domain_is_hierarchy(domain)) + if (domain && irq_domain_is_hierarchy(domain)) { msi_domain_free_irqs_descs_locked(domain, &dev->dev); - else + } else { pci_msi_legacy_teardown_msi_irqs(dev); - msi_free_msi_descs(&dev->dev); + msi_free_msi_descs(&dev->dev); + } } /** @@ -170,6 +171,9 @@ struct irq_domain *pci_msi_create_irq_do if (info->flags & MSI_FLAG_USE_DEF_CHIP_OPS) pci_msi_domain_update_chip_ops(info); + /* Let the core code free MSI descriptors when freeing interrupts */ + info->flags |= MSI_FLAG_FREE_MSI_DESCS; + info->flags |= MSI_FLAG_ACTIVATE_EARLY | MSI_FLAG_DEV_SYSFS; if (IS_ENABLED(CONFIG_GENERIC_IRQ_RESERVATION_MODE)) info->flags |= MSI_FLAG_MUST_REACTIVATE;