From: Christoph Hellwig <hch@lst.de>
To: Bjorn Helgaas <bhelgaas@google.com>,
Giovanni Cabiddu <giovanni.cabiddu@intel.com>,
Salvatore Benedetto <salvatore.benedetto@intel.com>,
Mike Marciniszyn <mike.marciniszyn@intel.com>,
Dennis Dalessandro <dennis.dalessandro@intel.com>,
Derek Chickles <derek.chickles@caviumnetworks.com>,
Satanand Burla <satananda.burla@caviumnetworks.com>,
Felix Manlunas <felix.manlunas@caviumnetworks.com>,
Raghu Vatsavayi <raghu.vatsavayi@caviumnetworks.com>,
Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Cc: linux-pci@vger.kernel.org, qat-linux@intel.com,
linux-crypto@vger.kernel.org, linux-rdma@vger.kernel.org,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH 1/7] PCI: export pcie_flr
Date: Thu, 13 Apr 2017 16:53:33 +0200 [thread overview]
Message-ID: <20170413145339.20186-2-hch@lst.de> (raw)
In-Reply-To: <20170413145339.20186-1-hch@lst.de>
Currently we opencode the FLR sequence in lots of place, export a core
helper instead. We split out the probing for FLR support as all the
non-core callers already know their hardware.
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
drivers/pci/pci.c | 34 +++++++++++++++++++++++++---------
include/linux/pci.h | 1 +
2 files changed, 26 insertions(+), 9 deletions(-)
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index 7904d02ffdb9..3256a63c5d08 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -3773,24 +3773,38 @@ static void pci_flr_wait(struct pci_dev *dev)
(i - 1) * 100);
}
-static int pcie_flr(struct pci_dev *dev, int probe)
+/**
+ * pcie_has_flr - check if a device supports function level resets
+ * @dev: device to check
+ *
+ * Returns true if the device advertises support for PCIe function level
+ * resets.
+ */
+static bool pcie_has_flr(struct pci_dev *dev)
{
u32 cap;
pcie_capability_read_dword(dev, PCI_EXP_DEVCAP, &cap);
- if (!(cap & PCI_EXP_DEVCAP_FLR))
- return -ENOTTY;
-
- if (probe)
- return 0;
+ return cap & PCI_EXP_DEVCAP_FLR;
+}
+/**
+ * pcie_flr - initiate a PCIe function level reset
+ * @dev: device to reset
+ *
+ * Initiate a function level reset on @dev. The caller should ensure the
+ * device supports FLR before calling this function, e.g. by using the
+ * pcie_has_flr helper.
+ */
+void pcie_flr(struct pci_dev *dev)
+{
if (!pci_wait_for_pending_transaction(dev))
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);
pci_flr_wait(dev);
- return 0;
}
+EXPORT_SYMBOL_GPL(pcie_flr);
static int pci_af_flr(struct pci_dev *dev, int probe)
{
@@ -3971,9 +3985,11 @@ static int __pci_dev_reset(struct pci_dev *dev, int probe)
if (rc != -ENOTTY)
goto done;
- rc = pcie_flr(dev, probe);
- if (rc != -ENOTTY)
+ if (pcie_has_flr(dev)) {
+ pcie_flr(dev);
+ rc = 0;
goto done;
+ }
rc = pci_af_flr(dev, probe);
if (rc != -ENOTTY)
diff --git a/include/linux/pci.h b/include/linux/pci.h
index eb3da1a04e6c..f35e51eddad0 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -1052,6 +1052,7 @@ int pcie_get_mps(struct pci_dev *dev);
int pcie_set_mps(struct pci_dev *dev, int mps);
int pcie_get_minimum_link(struct pci_dev *dev, enum pci_bus_speed *speed,
enum pcie_link_width *width);
+void pcie_flr(struct pci_dev *dev);
int __pci_reset_function(struct pci_dev *dev);
int __pci_reset_function_locked(struct pci_dev *dev);
int pci_reset_function(struct pci_dev *dev);
--
2.11.0
next prev parent reply other threads:[~2017-04-13 14:53 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-04-13 14:53 export pcie_flr and remove copies of it in drivers Christoph Hellwig
2017-04-13 14:53 ` Christoph Hellwig [this message]
2017-04-14 14:34 ` [PATCH 1/7] PCI: export pcie_flr Bjorn Helgaas
2017-04-14 15:56 ` Christoph Hellwig
[not found] ` <20170413145339.20186-1-hch-jcswGhMUV9g@public.gmane.org>
2017-04-13 14:53 ` [PATCH 2/7] PCI: call pcie_flr from reset_intel_82599_sfp_virtfn Christoph Hellwig
2017-04-13 14:53 ` Christoph Hellwig
2017-04-13 14:53 ` [PATCH 3/7] PCI: call pcie_flr from reset_chelsio_generic_dev Christoph Hellwig
2017-04-13 14:53 ` [PATCH 4/7] ixgbe: use pcie_flr instead of duplicating it Christoph Hellwig
2017-04-26 22:09 ` Jeff Kirsher
2017-04-13 14:53 ` [PATCH 5/7] IB/hfi1: " Christoph Hellwig
2017-04-13 14:53 ` [PATCH 6/7] crypto: qat: " Christoph Hellwig
2017-04-13 14:53 ` [PATCH 7/7] liquidio: " Christoph Hellwig
2017-04-14 14:41 ` export pcie_flr and remove copies of it in drivers Bjorn Helgaas
[not found] ` <20170414144108.GB29349-1RhO1Y9PlrlHTL0Zs8A6p5iNqAH0jzoTYJqu5kTmcBRl57MIdRCFDg@public.gmane.org>
2017-04-14 14:51 ` Bjorn Helgaas
2017-04-14 14:51 ` Bjorn Helgaas
2017-04-14 15:57 ` Christoph Hellwig
2017-04-14 15:57 ` Christoph Hellwig
-- strict thread matches above, loose matches on Subject: below --
2017-04-14 19:11 export pcie_flr and remove copies of it in drivers V2 Christoph Hellwig
2017-04-14 19:11 ` [PATCH 1/7] PCI: export pcie_flr Christoph Hellwig
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170413145339.20186-2-hch@lst.de \
--to=hch@lst.de \
--cc=bhelgaas@google.com \
--cc=dennis.dalessandro@intel.com \
--cc=derek.chickles@caviumnetworks.com \
--cc=felix.manlunas@caviumnetworks.com \
--cc=giovanni.cabiddu@intel.com \
--cc=jeffrey.t.kirsher@intel.com \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux-rdma@vger.kernel.org \
--cc=mike.marciniszyn@intel.com \
--cc=netdev@vger.kernel.org \
--cc=qat-linux@intel.com \
--cc=raghu.vatsavayi@caviumnetworks.com \
--cc=salvatore.benedetto@intel.com \
--cc=satananda.burla@caviumnetworks.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.