Patch "PCI: Remove __pci_dev_reset() and pci_dev_reset()" has been added to the 4.12-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
PCI: Remove __pci_dev_reset() and pci_dev_reset()
to the 4.12-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
pci-remove-__pci_dev_reset-and-pci_dev_reset.patch
and it can be found in the queue-4.12 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
52354b9d1f46aae7386db7bb8ec8484b5488087fMon Sep 17 00:00:00 2001
From: Christoph Hellwig <[email protected]>
Date: Thu, 1 Jun 2017 13:10:39 +0200
Subject: PCI: Remove __pci_dev_reset() and pci_dev_reset()
From: Christoph Hellwig <[email protected]>
commit 52354b9d1f46aae7386db7bb8ec8484b5488087f upstream.
Implement the reset probing / reset chain directly in __pci_probe_reset_function() and __pci_reset_function_locked() respectively.
--- drivers/pci/pci.c | 108 ++++++++++++++++++++++++++---------------------------- 1 file changed, 52 insertions(+), 56 deletions(-)
drivers/pci/pci.c +52 -56
@@ -4069,40 +4069,6 @@ static int pci_dev_reset_slot_function(sreturn 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_dpci_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*/ 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_l*/ 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 *d {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_de {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_dereturn -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);
Patches currently in stable-queue which might be from [email protected] are
queue-4.12/pci-remove-__pci_dev_reset-and-pci_dev_reset.patch queue-4.12/usb-storage-fix-deadlock-involving-host-lock-and-scsi_done.patch queue-4.12/pci-protect-pci_error_handlers-reset_notify-usage-with-device_lock.patch