mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-01 00:58:39 +02:00 
			
		
		
		
	PCI: Remove legacy pcim_release()
Thanks to preceding cleanup steps, pcim_release() is now not needed anymore and can be replaced by pcim_disable_device(), which is the exact counterpart to pcim_enable_device(). This permits removing further parts of the old PCI devres implementation. Replace pcim_release() with pcim_disable_device(). Remove the now unused function get_pci_dr(). Remove the struct pci_devres from pci.h. Link: https://lore.kernel.org/r/20240613115032.29098-12-pstanner@redhat.com Signed-off-by: Philipp Stanner <pstanner@redhat.com> Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
This commit is contained in:
		
							parent
							
								
									25216afc9d
								
							
						
					
					
						commit
						f748a07a0b
					
				
					 2 changed files with 25 additions and 44 deletions
				
			
		|  | @ -477,48 +477,45 @@ int pcim_intx(struct pci_dev *pdev, int enable) | |||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static void pcim_release(struct device *gendev, void *res) | ||||
| static void pcim_disable_device(void *pdev_raw) | ||||
| { | ||||
| 	struct pci_dev *dev = to_pci_dev(gendev); | ||||
| 	struct pci_dev *pdev = pdev_raw; | ||||
| 
 | ||||
| 	if (pci_is_enabled(dev) && !dev->pinned) | ||||
| 		pci_disable_device(dev); | ||||
| } | ||||
| 
 | ||||
| static struct pci_devres *get_pci_dr(struct pci_dev *pdev) | ||||
| { | ||||
| 	struct pci_devres *dr, *new_dr; | ||||
| 
 | ||||
| 	dr = devres_find(&pdev->dev, pcim_release, NULL, NULL); | ||||
| 	if (dr) | ||||
| 		return dr; | ||||
| 
 | ||||
| 	new_dr = devres_alloc(pcim_release, sizeof(*new_dr), GFP_KERNEL); | ||||
| 	if (!new_dr) | ||||
| 		return NULL; | ||||
| 	return devres_get(&pdev->dev, new_dr, NULL, NULL); | ||||
| 	if (!pdev->pinned) | ||||
| 		pci_disable_device(pdev); | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * pcim_enable_device - Managed pci_enable_device() | ||||
|  * @pdev: PCI device to be initialized | ||||
|  * | ||||
|  * Managed pci_enable_device(). | ||||
|  * Returns: 0 on success, negative error code on failure. | ||||
|  * | ||||
|  * Managed pci_enable_device(). Device will automatically be disabled on | ||||
|  * driver detach. | ||||
|  */ | ||||
| int pcim_enable_device(struct pci_dev *pdev) | ||||
| { | ||||
| 	struct pci_devres *dr; | ||||
| 	int rc; | ||||
| 	int ret; | ||||
| 
 | ||||
| 	dr = get_pci_dr(pdev); | ||||
| 	if (unlikely(!dr)) | ||||
| 		return -ENOMEM; | ||||
| 	ret = devm_add_action(&pdev->dev, pcim_disable_device, pdev); | ||||
| 	if (ret != 0) | ||||
| 		return ret; | ||||
| 
 | ||||
| 	rc = pci_enable_device(pdev); | ||||
| 	if (!rc) | ||||
| 		pdev->is_managed = 1; | ||||
| 	/*
 | ||||
| 	 * We prefer removing the action in case of an error over | ||||
| 	 * devm_add_action_or_reset() because the latter could theoretically be | ||||
| 	 * disturbed by users having pinned the device too soon. | ||||
| 	 */ | ||||
| 	ret = pci_enable_device(pdev); | ||||
| 	if (ret != 0) { | ||||
| 		devm_remove_action(&pdev->dev, pcim_disable_device, pdev); | ||||
| 		return ret; | ||||
| 	} | ||||
| 
 | ||||
| 	return rc; | ||||
| 	pdev->is_managed = true; | ||||
| 
 | ||||
| 	return ret; | ||||
| } | ||||
| EXPORT_SYMBOL(pcim_enable_device); | ||||
| 
 | ||||
|  |  | |||
|  | @ -810,22 +810,6 @@ static inline pci_power_t mid_pci_get_power_state(struct pci_dev *pdev) | |||
| } | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * Managed PCI resources.  This manages device on/off, INTx/MSI/MSI-X | ||||
|  * on/off and BAR regions.  pci_dev itself records MSI/MSI-X status, so | ||||
|  * there's no need to track it separately.  pci_devres is initialized | ||||
|  * when a device is enabled using managed PCI device enable interface. | ||||
|  * | ||||
|  * TODO: Struct pci_devres only needs to be here because they're used in pci.c. | ||||
|  * Port or move these functions to devres.c and then remove them from here. | ||||
|  */ | ||||
| struct pci_devres { | ||||
| 	/*
 | ||||
| 	 * TODO: | ||||
| 	 * This struct is now surplus. Remove it by refactoring pci/devres.c | ||||
| 	 */ | ||||
| }; | ||||
| 
 | ||||
| int pcim_intx(struct pci_dev *dev, int enable); | ||||
| 
 | ||||
| int pcim_request_region(struct pci_dev *pdev, int bar, const char *name); | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Philipp Stanner
						Philipp Stanner