return 0;
 }
 
-static int pci_dev_reset(struct pci_dev *dev, int probe)
+static int __pci_dev_reset(struct pci_dev *dev, int probe)
 {
        int rc;
 
        might_sleep();
 
-       if (!probe) {
-               pci_cfg_access_lock(dev);
-               /* block PM suspend, driver probe, etc. */
-               device_lock(&dev->dev);
-       }
-
        rc = pci_dev_specific_reset(dev, probe);
        if (rc != -ENOTTY)
                goto done;
 
        rc = pci_parent_bus_reset(dev, probe);
 done:
+       return rc;
+}
+
+static int pci_dev_reset(struct pci_dev *dev, int probe)
+{
+       int rc;
+
+       if (!probe) {
+               pci_cfg_access_lock(dev);
+               /* block PM suspend, driver probe, etc. */
+               device_lock(&dev->dev);
+       }
+
+       rc = __pci_dev_reset(dev, probe);
+
        if (!probe) {
                device_unlock(&dev->dev);
                pci_cfg_access_unlock(dev);
        }
-
        return rc;
 }
-
 /**
  * __pci_reset_function - reset a PCI device function
  * @dev: PCI device to reset
  */
 int __pci_reset_function_locked(struct pci_dev *dev)
 {
-       return pci_dev_reset(dev, 1);
+       return __pci_dev_reset(dev, 0);
 }
 EXPORT_SYMBOL_GPL(__pci_reset_function_locked);