diff options
author | Bryan Cantrill <bryan@joyent.com> | 2019-07-08 15:03:04 +0000 |
---|---|---|
committer | Robert Mustacchi <rm@joyent.com> | 2019-08-19 17:40:33 +0000 |
commit | 20513f9e81064120c8e4353fad6cc93898f0bef9 (patch) | |
tree | cab963ff0e9a8a492858002290d08df30d257c93 | |
parent | 4c63bf63e4b7d55c99e024187bc355893f66c09c (diff) | |
download | illumos-joyent-20513f9e81064120c8e4353fad6cc93898f0bef9.tar.gz |
11366 disappearing ixgbe turns correctable error into panic
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Robert Mustacchi <rm@joyent.com>
Reviewed by: Andrew Stormont <andyjstormont@gmail.com>
Reviewed by: Toomas Soome <tsoome@me.com>
Reviewed by: Paul Winder <Paul.Winder@wdc.com>
Approved by: Richard Lowe <richlowe@richlowe.net>
-rw-r--r-- | usr/src/uts/common/io/pciex/pcie_fault.c | 16 | ||||
-rw-r--r-- | usr/src/uts/common/io/pciex/pciev.c | 6 | ||||
-rw-r--r-- | usr/src/uts/common/sys/pcie_impl.h | 6 |
3 files changed, 17 insertions, 11 deletions
diff --git a/usr/src/uts/common/io/pciex/pcie_fault.c b/usr/src/uts/common/io/pciex/pcie_fault.c index a8c02caa9c..c23d3557e2 100644 --- a/usr/src/uts/common/io/pciex/pcie_fault.c +++ b/usr/src/uts/common/io/pciex/pcie_fault.c @@ -20,6 +20,7 @@ */ /* * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, Joyent, Inc. */ #include <sys/sysmacros.h> @@ -919,10 +920,11 @@ pf_default_hdl(dev_info_t *dip, pf_impl_t *impl) } /* - * Read vendor/device ID and check with cached data, if it doesn't match - * could very well be a device that isn't responding anymore. Just - * stop. Save the basic info in the error q for post mortem debugging - * purposes. + * Read vendor/device ID and check with cached data; if it doesn't + * match, it could very well mean that the device is no longer + * responding. In this case, we return PF_SCAN_BAD_RESPONSE; should + * the caller choose to panic in this case, we will have the basic + * info in the error queue for the purposes of postmortem debugging. */ if (PCIE_GET(32, bus_p, PCI_CONF_VENID) != bus_p->bus_dev_ven_id) { char buf[FM_MAX_CLASS]; @@ -933,12 +935,12 @@ pf_default_hdl(dev_info_t *dip, pf_impl_t *impl) DDI_NOSLEEP, FM_VERSION, DATA_TYPE_UINT8, 0, NULL); /* - * For IOV/Hotplug purposes skip gathering info fo this device, + * For IOV/Hotplug purposes skip gathering info for this device, * but populate affected info and severity. Clear out any data * that maybe been saved in the last fabric scan. */ pf_reset_pfd(pfd_p); - pfd_p->pe_severity_flags = PF_ERR_PANIC_BAD_RESPONSE; + pfd_p->pe_severity_flags = PF_ERR_BAD_RESPONSE; PFD_AFFECTED_DEV(pfd_p)->pe_affected_flags = PF_AFFECTED_SELF; /* Add the snapshot to the error q */ @@ -1379,7 +1381,7 @@ pf_analyse_error(ddi_fm_error_t *derr, pf_impl_t *impl) sts_flags = 0; /* skip analysing error when no error info is gathered */ - if (pfd_p->pe_severity_flags == PF_ERR_PANIC_BAD_RESPONSE) + if (pfd_p->pe_severity_flags == PF_ERR_BAD_RESPONSE) goto done; switch (PCIE_PFD2BUS(pfd_p)->bus_dev_type) { diff --git a/usr/src/uts/common/io/pciex/pciev.c b/usr/src/uts/common/io/pciex/pciev.c index 18794318dd..da68026dcf 100644 --- a/usr/src/uts/common/io/pciex/pciev.c +++ b/usr/src/uts/common/io/pciex/pciev.c @@ -23,6 +23,10 @@ * Use is subject to license terms. */ +/* + * Copyright (c) 2017, Joyent, Inc. + */ + #include <sys/types.h> #include <sys/ddi.h> #include <sys/dditypes.h> @@ -302,7 +306,7 @@ pciev_eh(pf_data_t *pfd_p, pf_impl_t *impl) pcie_faulty_all = B_TRUE; } else if (severity & (PF_ERR_NO_PANIC | PF_ERR_MATCHED_DEVICE | - PF_ERR_PANIC | PF_ERR_PANIC_BAD_RESPONSE)) { + PF_ERR_PANIC | PF_ERR_BAD_RESPONSE)) { uint16_t affected_flag, dev_affected_flags; uint_t is_panic = 0, is_aff_dev_found = 0; diff --git a/usr/src/uts/common/sys/pcie_impl.h b/usr/src/uts/common/sys/pcie_impl.h index 1f08fad51d..01c9272da9 100644 --- a/usr/src/uts/common/sys/pcie_impl.h +++ b/usr/src/uts/common/sys/pcie_impl.h @@ -20,6 +20,7 @@ */ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, Joyent, Inc. */ /* @@ -421,11 +422,10 @@ typedef struct pf_impl { #define PF_ERR_MATCHED_PARENT (1 << 5) /* Error Handled By Parent */ #define PF_ERR_PANIC (1 << 6) /* Error should panic system */ #define PF_ERR_PANIC_DEADLOCK (1 << 7) /* deadlock detected */ -#define PF_ERR_PANIC_BAD_RESPONSE (1 << 8) /* Device no response */ +#define PF_ERR_BAD_RESPONSE (1 << 8) /* Device bad/no response */ #define PF_ERR_MATCH_DOM (1 << 9) /* Error Handled By IO domain */ -#define PF_ERR_FATAL_FLAGS \ - (PF_ERR_PANIC | PF_ERR_PANIC_DEADLOCK | PF_ERR_PANIC_BAD_RESPONSE) +#define PF_ERR_FATAL_FLAGS (PF_ERR_PANIC | PF_ERR_PANIC_DEADLOCK) #define PF_HDL_FOUND 1 #define PF_HDL_NOTFOUND 2 |