Skip to content

Commit

Permalink
PCI/MSI: Let core code free MSI descriptors
Browse files Browse the repository at this point in the history
Set the domain info flag which tells the core code to free the MSI
descriptors from msi_domain_free_irqs() and add an explicit call to the
core function into the legacy code.

Signed-off-by: Thomas Gleixner <[email protected]>
Tested-by: Michael Kelley <[email protected]>
Tested-by: Nishanth Menon <[email protected]>
Reviewed-by: Jason Gunthorpe <[email protected]>
Acked-by: Bjorn Helgaas <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
  • Loading branch information
KAGA-KOKO committed Dec 16, 2021
1 parent 71020a3 commit 9fb9eb4
Show file tree
Hide file tree
Showing 3 changed files with 3 additions and 15 deletions.
3 changes: 2 additions & 1 deletion drivers/pci/msi/irqdomain.c
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,8 @@ struct irq_domain *pci_msi_create_irq_domain(struct fwnode_handle *fwnode,
if (info->flags & MSI_FLAG_USE_DEF_CHIP_OPS)
pci_msi_domain_update_chip_ops(info);

info->flags |= MSI_FLAG_ACTIVATE_EARLY | MSI_FLAG_DEV_SYSFS;
info->flags |= MSI_FLAG_ACTIVATE_EARLY | MSI_FLAG_DEV_SYSFS |
MSI_FLAG_FREE_MSI_DESCS;
if (IS_ENABLED(CONFIG_GENERIC_IRQ_RESERVATION_MODE))
info->flags |= MSI_FLAG_MUST_REACTIVATE;

Expand Down
1 change: 1 addition & 0 deletions drivers/pci/msi/legacy.c
Original file line number Diff line number Diff line change
Expand Up @@ -80,4 +80,5 @@ void pci_msi_legacy_teardown_msi_irqs(struct pci_dev *dev)
{
msi_device_destroy_sysfs(&dev->dev);
arch_teardown_msi_irqs(dev);
msi_free_msi_descs(&dev->dev);
}
14 changes: 0 additions & 14 deletions drivers/pci/msi/msi.c
Original file line number Diff line number Diff line change
Expand Up @@ -224,22 +224,8 @@ EXPORT_SYMBOL_GPL(pci_write_msi_msg);

static void free_msi_irqs(struct pci_dev *dev)
{
struct list_head *msi_list = dev_to_msi_list(&dev->dev);
struct msi_desc *entry, *tmp;
int i;

for_each_pci_msi_entry(entry, dev)
if (entry->irq)
for (i = 0; i < entry->nvec_used; i++)
BUG_ON(irq_has_action(entry->irq + i));

pci_msi_teardown_msi_irqs(dev);

list_for_each_entry_safe(entry, tmp, msi_list, list) {
list_del(&entry->list);
free_msi_entry(entry);
}

if (dev->msix_base) {
iounmap(dev->msix_base);
dev->msix_base = NULL;
Expand Down

0 comments on commit 9fb9eb4

Please sign in to comment.