Browse Source

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>
Christoph Hellwig 8 years ago
parent
commit
52354b9d1f
1 changed files with 52 additions and 56 deletions
  1. 52 56
      drivers/pci/pci.c

+ 52 - 56
drivers/pci/pci.c

@@ -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);
 	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)
 static void pci_dev_lock(struct pci_dev *dev)
 {
 {
 	pci_cfg_access_lock(dev);
 	pci_cfg_access_lock(dev);
@@ -4177,21 +4143,6 @@ static void pci_dev_restore(struct pci_dev *dev)
 		err_handler->reset_done(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
  * __pci_reset_function - reset a PCI device function
  * @dev: PCI device to reset
  * @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)
 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);
 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)
 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);
 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)
 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;
 	int rc;
 
 
-	rc = pci_dev_reset(dev, 1);
+	rc = pci_probe_reset_function(dev);
 	if (rc)
 	if (rc)
 		return rc;
 		return rc;
 
 
 	pci_dev_lock(dev);
 	pci_dev_lock(dev);
 	pci_dev_save_and_disable(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_restore(dev);
 	pci_dev_unlock(dev);
 	pci_dev_unlock(dev);
@@ -4302,7 +4298,7 @@ int pci_try_reset_function(struct pci_dev *dev)
 {
 {
 	int rc;
 	int rc;
 
 
-	rc = pci_dev_reset(dev, 1);
+	rc = pci_probe_reset_function(dev);
 	if (rc)
 	if (rc)
 		return rc;
 		return rc;
 
 
@@ -4310,7 +4306,7 @@ int pci_try_reset_function(struct pci_dev *dev)
 		return -EAGAIN;
 		return -EAGAIN;
 
 
 	pci_dev_save_and_disable(dev);
 	pci_dev_save_and_disable(dev);
-	rc = __pci_dev_reset(dev, 0);
+	rc = __pci_reset_function_locked(dev);
 	pci_dev_unlock(dev);
 	pci_dev_unlock(dev);
 
 
 	pci_dev_restore(dev);
 	pci_dev_restore(dev);