All of lore.kernel.org
 help / color / mirror / Atom feed
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: Fri, 14 Apr 2017 21:11:25 +0200	[thread overview]
Message-ID: <20170414191131.14286-2-hch@lst.de> (raw)
In-Reply-To: <20170414191131.14286-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.

Note that in the new pci_has_flr function the quirk check has been moved
before the capability check as there is no point in reading the
capability in this case.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
---
 drivers/pci/pci.c   | 39 ++++++++++++++++++++++++++++-----------
 include/linux/pci.h |  1 +
 2 files changed, 29 insertions(+), 11 deletions(-)

diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index bef14777bb30..957a11a6a840 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -3773,27 +3773,41 @@ 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 (dev->dev_flags & PCI_DEV_FLAGS_NO_FLR_RESET)
-		return -ENOTTY;
+		return false;
 
-	if (probe)
-		return 0;
+	pcie_capability_read_dword(dev, PCI_EXP_DEVCAP, &cap);
+	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)
 {
@@ -3977,9 +3991,12 @@ 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)) {
+		if (!probe)
+			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 20e1865233a4..60162f51227a 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -1054,6 +1054,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

  reply	other threads:[~2017-04-14 19:11 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-14 19:11 export pcie_flr and remove copies of it in drivers V2 Christoph Hellwig
2017-04-14 19:11 ` Christoph Hellwig
2017-04-14 19:11 ` Christoph Hellwig [this message]
2017-04-14 19:11 ` [PATCH 2/7] PCI: call pcie_flr from reset_intel_82599_sfp_virtfn Christoph Hellwig
2017-04-14 19:11 ` [PATCH 3/7] PCI: call pcie_flr from reset_chelsio_generic_dev Christoph Hellwig
2017-04-14 19:11 ` [PATCH 4/7] ixgbe: use pcie_flr instead of duplicating it Christoph Hellwig
2017-04-14 19:11 ` [PATCH 5/7] IB/hfi1: " Christoph Hellwig
2017-04-24 14:16   ` Byczkowski, Jakub
2017-04-24 14:16     ` Byczkowski, Jakub
2017-04-24 14:35     ` Christoph Hellwig
2017-04-24 14:35       ` Christoph Hellwig
     [not found]       ` <20170424143507.GA28812-jcswGhMUV9g@public.gmane.org>
2017-04-24 20:00         ` Dennis Dalessandro
2017-04-24 20:00           ` Dennis Dalessandro
2017-04-25 17:00         ` Doug Ledford
2017-04-25 17:00           ` Doug Ledford
2017-04-25 17:00           ` Doug Ledford
2017-04-25 19:39         ` Bjorn Helgaas
2017-04-25 19:39           ` Bjorn Helgaas
     [not found]           ` <20170425193955.GC29024-1RhO1Y9PlrlHTL0Zs8A6p5iNqAH0jzoTYJqu5kTmcBRl57MIdRCFDg@public.gmane.org>
2017-04-26 22:10             ` Jeff Kirsher
2017-04-26 22:10               ` Jeff Kirsher
2017-04-26 22:10               ` Jeff Kirsher
2017-04-27  6:47           ` Christoph Hellwig
2017-04-27  6:47             ` Christoph Hellwig
2017-04-27  6:47             ` Christoph Hellwig
2017-04-27 16:49             ` Bjorn Helgaas
2017-04-27 16:49               ` Bjorn Helgaas
2017-04-27 16:49               ` Bjorn Helgaas
2017-04-14 19:11 ` [PATCH 6/7] crypto: qat: " Christoph Hellwig
2017-04-14 19:11 ` [PATCH 7/7] liquidio: " Christoph Hellwig
2017-04-25  1:53   ` Felix Manlunas
2017-04-18 18:36 ` export pcie_flr and remove copies of it in drivers V2 Bjorn Helgaas
2017-04-19  5:37   ` Leon Romanovsky
     [not found]     ` <20170419053737.GG14088-U/DQcQFIOTAAJjI8aNfphQ@public.gmane.org>
2017-04-19 16:40       ` Leon Romanovsky
2017-04-19 16:40         ` Leon Romanovsky
  -- strict thread matches above, loose matches on Subject: below --
2017-04-13 14:53 export pcie_flr and remove copies of it in drivers Christoph Hellwig
2017-04-13 14:53 ` [PATCH 1/7] PCI: export pcie_flr Christoph Hellwig
2017-04-14 14:34   ` Bjorn Helgaas
2017-04-14 15:56     ` 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=20170414191131.14286-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.