summaryrefslogtreecommitdiff
path: root/drivers/pci
diff options
context:
space:
mode:
authorBjorn Helgaas <bhelgaas@google.com>2015-07-17 20:43:27 (GMT)
committerBjorn Helgaas <bhelgaas@google.com>2015-08-13 20:57:30 (GMT)
commita021f3019db7b40f0fe85b0a64c6be21e3665fbf (patch)
treef08e6bd7d8d473719fc2b7bfbe5dbe2b787f2cec /drivers/pci
parentc39127dbaf6c267f18d1cac14e2b0ecbfaa52d63 (diff)
downloadlinux-a021f3019db7b40f0fe85b0a64c6be21e3665fbf.tar.xz
PCI: Clean up ATS error handling
There's no need to BUG() if we enable ATS when it's already enabled. We don't need to BUG() when disabling ATS on a device that doesn't support ATS or if it's already disabled. If ATS is enabled, certainly we found an ATS capability in the past, so it should still be there now. Clean up these error paths. Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Joerg Roedel <jroedel@suse.de>
Diffstat (limited to 'drivers/pci')
-rw-r--r--drivers/pci/ats.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/pci/ats.c b/drivers/pci/ats.c
index 0b5b0ed..9355f75 100644
--- a/drivers/pci/ats.c
+++ b/drivers/pci/ats.c
@@ -44,11 +44,12 @@ int pci_enable_ats(struct pci_dev *dev, int ps)
u16 ctrl;
struct pci_dev *pdev;
- BUG_ON(dev->ats_cap && dev->ats_enabled);
-
if (!dev->ats_cap)
return -EINVAL;
+ if (WARN_ON(pci_ats_enabled(dev)))
+ return -EBUSY;
+
if (ps < PCI_ATS_MIN_STU)
return -EINVAL;
@@ -83,7 +84,8 @@ void pci_disable_ats(struct pci_dev *dev)
struct pci_dev *pdev;
u16 ctrl;
- BUG_ON(!dev->ats_cap || !dev->ats_enabled);
+ if (WARN_ON(!pci_ats_enabled(dev)))
+ return;
if (atomic_read(&dev->ats_ref_cnt))
return; /* VFs still enabled */
@@ -107,8 +109,6 @@ void pci_restore_ats_state(struct pci_dev *dev)
if (!pci_ats_enabled(dev))
return;
- if (!pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ATS))
- BUG();
ctrl = PCI_ATS_CTRL_ENABLE;
if (!dev->is_virtfn)