]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
PCI: Remove __pci_dev_reset() and pci_dev_reset()
authorChristoph Hellwig <hch@lst.de>
Thu, 1 Jun 2017 11:10:39 +0000 (13:10 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 16 Aug 2017 20:46:59 +0000 (13:46 -0700)
commit 52354b9d1f46aae7386db7bb8ec8484b5488087f upstream.

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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/pci/pci.c

index b6c1dd4c7bb61c1eb280b12349c3b952c9c440a6..f4d39aac74d21104179f04e3a2d608136f663742 100644 (file)
@@ -4069,40 +4069,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);
@@ -4179,21 +4145,6 @@ static void pci_dev_restore(struct pci_dev *dev)
        pci_reset_notify(dev, false);
 }
 
-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
@@ -4213,7 +4164,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);
 
@@ -4238,7 +4195,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);
 
@@ -4255,7 +4232,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);
 }
 
 /**
@@ -4278,14 +4274,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);
@@ -4304,7 +4300,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;
 
@@ -4312,7 +4308,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);