summaryrefslogtreecommitdiffstats
path: root/drivers/pci/pci.c
diff options
context:
space:
mode:
authorGavin Shan <gwshan@linux.vnet.ibm.com>2014-11-12 13:41:51 +1100
committerBjorn Helgaas <bhelgaas@google.com>2014-11-13 10:28:02 -0700
commitbb383e283b2c2dca8eb5152a1a2477efcc469431 (patch)
tree52bd8117cbeac08ea590ff267e77a9ed60d2daca /drivers/pci/pci.c
parent754834b9caae8d1380f66a5f0337547e9361094d (diff)
downloadlinux-bb383e283b2c2dca8eb5152a1a2477efcc469431.tar.bz2
PCI: Make FLR and AF FLR reset warning messages different
We have same warning message for FLR and AF FLR and users can't know which type of resets the PCI device is taking when there are pending transactions. Print different messages for FLR and AF FLR cases. [bhelgaas: make code structure parallel, add "anyway" to suggest risk] Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Diffstat (limited to 'drivers/pci/pci.c')
-rw-r--r--drivers/pci/pci.c12
1 files changed, 3 insertions, 9 deletions
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index 9a5871f530a7..e8b3627e5474 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -3140,12 +3140,10 @@ static int pcie_flr(struct pci_dev *dev, int probe)
return 0;
if (!pci_wait_for_pending_transaction(dev))
- dev_err(&dev->dev, "transaction is not cleared; proceeding with reset anyway\n");
+ dev_err(&dev->dev, "timed out waiting for pending transaction; performing function level reset anyway\n");
pcie_capability_set_word(dev, PCI_EXP_DEVCTL, PCI_EXP_DEVCTL_BCR_FLR);
-
msleep(100);
-
return 0;
}
@@ -3170,16 +3168,12 @@ static int pci_af_flr(struct pci_dev *dev, int probe)
* is used, so we use the conrol offset rather than status and shift
* the test bit to match.
*/
- if (pci_wait_for_pending(dev, pos + PCI_AF_CTRL,
+ if (!pci_wait_for_pending(dev, pos + PCI_AF_CTRL,
PCI_AF_STATUS_TP << 8))
- goto clear;
+ dev_err(&dev->dev, "timed out waiting for pending transaction; performing AF function level reset anyway\n");
- dev_err(&dev->dev, "transaction is not cleared; proceeding with reset anyway\n");
-
-clear:
pci_write_config_byte(dev, pos + PCI_AF_CTRL, PCI_AF_CTRL_FLR);
msleep(100);
-
return 0;
}