forked from mirrors/linux
		
	PCI/MSI: Let the irq code handle sysfs groups
Set the domain info flag which makes the core code handle sysfs groups and put an explicit invocation into the legacy code. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Tested-by: Michael Kelley <mikelley@microsoft.com> Tested-by: Nishanth Menon <nm@ti.com> Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Reviewed-by: Jason Gunthorpe <jgg@nvidia.com> Acked-by: Bjorn Helgaas <bhelgaas@google.com> Link: https://lore.kernel.org/r/20211210221814.048612053@linutronix.de
This commit is contained in:
		
							parent
							
								
									bf6e054e0e
								
							
						
					
					
						commit
						ffd84485e6
					
				
					 4 changed files with 6 additions and 26 deletions
				
			
		|  | @ -159,7 +159,7 @@ 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; | ||||
| 	info->flags |= MSI_FLAG_ACTIVATE_EARLY | MSI_FLAG_DEV_SYSFS; | ||||
| 	if (IS_ENABLED(CONFIG_GENERIC_IRQ_RESERVATION_MODE)) | ||||
| 		info->flags |= MSI_FLAG_MUST_REACTIVATE; | ||||
| 
 | ||||
|  |  | |||
|  | @ -70,10 +70,14 @@ int pci_msi_legacy_setup_msi_irqs(struct pci_dev *dev, int nvec, int type) | |||
| { | ||||
| 	int ret = arch_setup_msi_irqs(dev, nvec, type); | ||||
| 
 | ||||
| 	return pci_msi_setup_check_result(dev, type, ret); | ||||
| 	ret = pci_msi_setup_check_result(dev, type, ret); | ||||
| 	if (!ret) | ||||
| 		ret = msi_device_populate_sysfs(&dev->dev); | ||||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
| void pci_msi_legacy_teardown_msi_irqs(struct pci_dev *dev) | ||||
| { | ||||
| 	msi_device_destroy_sysfs(&dev->dev); | ||||
| 	arch_teardown_msi_irqs(dev); | ||||
| } | ||||
|  |  | |||
|  | @ -233,11 +233,6 @@ static void free_msi_irqs(struct pci_dev *dev) | |||
| 			for (i = 0; i < entry->nvec_used; i++) | ||||
| 				BUG_ON(irq_has_action(entry->irq + i)); | ||||
| 
 | ||||
| 	if (dev->msi_irq_groups) { | ||||
| 		msi_destroy_sysfs(&dev->dev, dev->msi_irq_groups); | ||||
| 		dev->msi_irq_groups = NULL; | ||||
| 	} | ||||
| 
 | ||||
| 	pci_msi_teardown_msi_irqs(dev); | ||||
| 
 | ||||
| 	list_for_each_entry_safe(entry, tmp, msi_list, list) { | ||||
|  | @ -455,7 +450,6 @@ static int msi_verify_entries(struct pci_dev *dev) | |||
| static int msi_capability_init(struct pci_dev *dev, int nvec, | ||||
| 			       struct irq_affinity *affd) | ||||
| { | ||||
| 	const struct attribute_group **groups; | ||||
| 	struct msi_desc *entry; | ||||
| 	int ret; | ||||
| 
 | ||||
|  | @ -486,14 +480,6 @@ static int msi_capability_init(struct pci_dev *dev, int nvec, | |||
| 	if (ret) | ||||
| 		goto err; | ||||
| 
 | ||||
| 	groups = msi_populate_sysfs(&dev->dev); | ||||
| 	if (IS_ERR(groups)) { | ||||
| 		ret = PTR_ERR(groups); | ||||
| 		goto err; | ||||
| 	} | ||||
| 
 | ||||
| 	dev->msi_irq_groups = groups; | ||||
| 
 | ||||
| 	/* Set MSI enabled bits	*/ | ||||
| 	pci_intx_for_msi(dev, 0); | ||||
| 	pci_msi_set_enable(dev, 1); | ||||
|  | @ -622,7 +608,6 @@ static void msix_mask_all(void __iomem *base, int tsize) | |||
| static int msix_capability_init(struct pci_dev *dev, struct msix_entry *entries, | ||||
| 				int nvec, struct irq_affinity *affd) | ||||
| { | ||||
| 	const struct attribute_group **groups; | ||||
| 	void __iomem *base; | ||||
| 	int ret, tsize; | ||||
| 	u16 control; | ||||
|  | @ -664,14 +649,6 @@ static int msix_capability_init(struct pci_dev *dev, struct msix_entry *entries, | |||
| 
 | ||||
| 	msix_update_entries(dev, entries); | ||||
| 
 | ||||
| 	groups = msi_populate_sysfs(&dev->dev); | ||||
| 	if (IS_ERR(groups)) { | ||||
| 		ret = PTR_ERR(groups); | ||||
| 		goto out_free; | ||||
| 	} | ||||
| 
 | ||||
| 	dev->msi_irq_groups = groups; | ||||
| 
 | ||||
| 	/* Disable INTX */ | ||||
| 	pci_intx_for_msi(dev, 0); | ||||
| 
 | ||||
|  |  | |||
|  | @ -476,7 +476,6 @@ struct pci_dev { | |||
| #ifdef CONFIG_PCI_MSI | ||||
| 	void __iomem	*msix_base; | ||||
| 	raw_spinlock_t	msi_lock; | ||||
| 	const struct attribute_group **msi_irq_groups; | ||||
| #endif | ||||
| 	struct pci_vpd	vpd; | ||||
| #ifdef CONFIG_PCIE_DPC | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Thomas Gleixner
						Thomas Gleixner