aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/intel/fm10k/fm10k_pci.c
diff options
context:
space:
mode:
authorJacob Keller <jacob.e.keller@intel.com>2016-06-23 13:31:01 -0700
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2016-08-29 01:31:03 -0700
commit18095937cb1c66b8ff944de02cf04d1497008352 (patch)
treec9ab1449f383ab1b2415efdc5b06855319f22f55 /drivers/net/ethernet/intel/fm10k/fm10k_pci.c
parentfm10k: print error code when pci_enable_device_mem fails during probe (diff)
downloadlinux-dev-18095937cb1c66b8ff944de02cf04d1497008352.tar.xz
linux-dev-18095937cb1c66b8ff944de02cf04d1497008352.zip
fm10k: don't continue probe if PCI device not in normal IO state
In the event of an uncorrectable AER error occurring when the driver has not loaded, the recovery routines are not done. This is done because future loads of the driver may not be aware of the IO state and may not be able to recover at all. In this case, when we next load the driver it fails due to what appears to be a surprise remove event. Instead, add a check to ensure that the device is in the normal IO state before continuing to probe. This allows us to give a more descriptive message of what is wrong. Without this change, the driver will attempt to probe up to our first call of .reset_hw() which will be unable to read registers and act as if a surprise remove event occurred. Signed-off-by: Jacob Keller <jacob.e.keller@intel.com> Tested-by: Krishneil Singh <Krishneil.k.singh@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to '')
-rw-r--r--drivers/net/ethernet/intel/fm10k/fm10k_pci.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/net/ethernet/intel/fm10k/fm10k_pci.c b/drivers/net/ethernet/intel/fm10k/fm10k_pci.c
index e5f37b788196..860fe04f4c72 100644
--- a/drivers/net/ethernet/intel/fm10k/fm10k_pci.c
+++ b/drivers/net/ethernet/intel/fm10k/fm10k_pci.c
@@ -1950,6 +1950,12 @@ static int fm10k_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
struct fm10k_intfc *interface;
int err;
+ if (pdev->error_state != pci_channel_io_normal) {
+ dev_err(&pdev->dev,
+ "PCI device still in an error state. Unable to load...\n");
+ return -EIO;
+ }
+
err = pci_enable_device_mem(pdev);
if (err) {
dev_err(&pdev->dev,