forked from mirrors/linux
		
	PCI: Remove __pci_dev_reset() and pci_dev_reset()
Implement the reset probing / reset chain directly in __pci_probe_reset_function() and __pci_reset_function_locked() respectively. Link: http://lkml.kernel.org/r/20170601111039.8913-4-hch@lst.de Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
This commit is contained in:
		
							parent
							
								
									775755ed3c
								
							
						
					
					
						commit
						52354b9d1f
					
				
					 1 changed files with 52 additions and 56 deletions
				
			
		|  | @ -4071,40 +4071,6 @@ static int pci_dev_reset_slot_function(struct pci_dev *dev, int probe) | |||
| 	return pci_reset_hotplug_slot(dev->slot->hotplug, probe); | ||||
| } | ||||
| 
 | ||||
| static int __pci_dev_reset(struct pci_dev *dev, int probe) | ||||
| { | ||||
| 	int rc; | ||||
| 
 | ||||
| 	might_sleep(); | ||||
| 
 | ||||
| 	rc = pci_dev_specific_reset(dev, probe); | ||||
| 	if (rc != -ENOTTY) | ||||
| 		goto done; | ||||
| 
 | ||||
| 	if (pcie_has_flr(dev)) { | ||||
| 		if (!probe) | ||||
| 			pcie_flr(dev); | ||||
| 		rc = 0; | ||||
| 		goto done; | ||||
| 	} | ||||
| 
 | ||||
| 	rc = pci_af_flr(dev, probe); | ||||
| 	if (rc != -ENOTTY) | ||||
| 		goto done; | ||||
| 
 | ||||
| 	rc = pci_pm_reset(dev, probe); | ||||
| 	if (rc != -ENOTTY) | ||||
| 		goto done; | ||||
| 
 | ||||
| 	rc = pci_dev_reset_slot_function(dev, probe); | ||||
| 	if (rc != -ENOTTY) | ||||
| 		goto done; | ||||
| 
 | ||||
| 	rc = pci_parent_bus_reset(dev, probe); | ||||
| done: | ||||
| 	return rc; | ||||
| } | ||||
| 
 | ||||
| static void pci_dev_lock(struct pci_dev *dev) | ||||
| { | ||||
| 	pci_cfg_access_lock(dev); | ||||
|  | @ -4177,21 +4143,6 @@ static void pci_dev_restore(struct pci_dev *dev) | |||
| 		err_handler->reset_done(dev); | ||||
| } | ||||
| 
 | ||||
| static int pci_dev_reset(struct pci_dev *dev, int probe) | ||||
| { | ||||
| 	int rc; | ||||
| 
 | ||||
| 	if (!probe) | ||||
| 		pci_dev_lock(dev); | ||||
| 
 | ||||
| 	rc = __pci_dev_reset(dev, probe); | ||||
| 
 | ||||
| 	if (!probe) | ||||
| 		pci_dev_unlock(dev); | ||||
| 
 | ||||
| 	return rc; | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * __pci_reset_function - reset a PCI device function | ||||
|  * @dev: PCI device to reset | ||||
|  | @ -4211,7 +4162,13 @@ static int pci_dev_reset(struct pci_dev *dev, int probe) | |||
|  */ | ||||
| int __pci_reset_function(struct pci_dev *dev) | ||||
| { | ||||
| 	return pci_dev_reset(dev, 0); | ||||
| 	int ret; | ||||
| 
 | ||||
| 	pci_dev_lock(dev); | ||||
| 	ret = __pci_reset_function_locked(dev); | ||||
| 	pci_dev_unlock(dev); | ||||
| 
 | ||||
| 	return ret; | ||||
| } | ||||
| EXPORT_SYMBOL_GPL(__pci_reset_function); | ||||
| 
 | ||||
|  | @ -4236,7 +4193,27 @@ EXPORT_SYMBOL_GPL(__pci_reset_function); | |||
|  */ | ||||
| int __pci_reset_function_locked(struct pci_dev *dev) | ||||
| { | ||||
| 	return __pci_dev_reset(dev, 0); | ||||
| 	int rc; | ||||
| 
 | ||||
| 	might_sleep(); | ||||
| 
 | ||||
| 	rc = pci_dev_specific_reset(dev, 0); | ||||
| 	if (rc != -ENOTTY) | ||||
| 		return rc; | ||||
| 	if (pcie_has_flr(dev)) { | ||||
| 		pcie_flr(dev); | ||||
| 		return 0; | ||||
| 	} | ||||
| 	rc = pci_af_flr(dev, 0); | ||||
| 	if (rc != -ENOTTY) | ||||
| 		return rc; | ||||
| 	rc = pci_pm_reset(dev, 0); | ||||
| 	if (rc != -ENOTTY) | ||||
| 		return rc; | ||||
| 	rc = pci_dev_reset_slot_function(dev, 0); | ||||
| 	if (rc != -ENOTTY) | ||||
| 		return rc; | ||||
| 	return pci_parent_bus_reset(dev, 0); | ||||
| } | ||||
| EXPORT_SYMBOL_GPL(__pci_reset_function_locked); | ||||
| 
 | ||||
|  | @ -4253,7 +4230,26 @@ EXPORT_SYMBOL_GPL(__pci_reset_function_locked); | |||
|  */ | ||||
| int pci_probe_reset_function(struct pci_dev *dev) | ||||
| { | ||||
| 	return pci_dev_reset(dev, 1); | ||||
| 	int rc; | ||||
| 
 | ||||
| 	might_sleep(); | ||||
| 
 | ||||
| 	rc = pci_dev_specific_reset(dev, 1); | ||||
| 	if (rc != -ENOTTY) | ||||
| 		return rc; | ||||
| 	if (pcie_has_flr(dev)) | ||||
| 		return 0; | ||||
| 	rc = pci_af_flr(dev, 1); | ||||
| 	if (rc != -ENOTTY) | ||||
| 		return rc; | ||||
| 	rc = pci_pm_reset(dev, 1); | ||||
| 	if (rc != -ENOTTY) | ||||
| 		return rc; | ||||
| 	rc = pci_dev_reset_slot_function(dev, 1); | ||||
| 	if (rc != -ENOTTY) | ||||
| 		return rc; | ||||
| 
 | ||||
| 	return pci_parent_bus_reset(dev, 1); | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  | @ -4276,14 +4272,14 @@ int pci_reset_function(struct pci_dev *dev) | |||
| { | ||||
| 	int rc; | ||||
| 
 | ||||
| 	rc = pci_dev_reset(dev, 1); | ||||
| 	rc = pci_probe_reset_function(dev); | ||||
| 	if (rc) | ||||
| 		return rc; | ||||
| 
 | ||||
| 	pci_dev_lock(dev); | ||||
| 	pci_dev_save_and_disable(dev); | ||||
| 
 | ||||
| 	rc = __pci_dev_reset(dev, 0); | ||||
| 	rc = __pci_reset_function_locked(dev); | ||||
| 
 | ||||
| 	pci_dev_restore(dev); | ||||
| 	pci_dev_unlock(dev); | ||||
|  | @ -4302,7 +4298,7 @@ int pci_try_reset_function(struct pci_dev *dev) | |||
| { | ||||
| 	int rc; | ||||
| 
 | ||||
| 	rc = pci_dev_reset(dev, 1); | ||||
| 	rc = pci_probe_reset_function(dev); | ||||
| 	if (rc) | ||||
| 		return rc; | ||||
| 
 | ||||
|  | @ -4310,7 +4306,7 @@ int pci_try_reset_function(struct pci_dev *dev) | |||
| 		return -EAGAIN; | ||||
| 
 | ||||
| 	pci_dev_save_and_disable(dev); | ||||
| 	rc = __pci_dev_reset(dev, 0); | ||||
| 	rc = __pci_reset_function_locked(dev); | ||||
| 	pci_dev_unlock(dev); | ||||
| 
 | ||||
| 	pci_dev_restore(dev); | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Christoph Hellwig
						Christoph Hellwig