Module Name: src
Committed By: msaitoh
Date: Sat Dec 26 06:27:38 UTC 2020
Modified Files:
src/sys/dev/pci/ixgbe: ixgbe.c
Log Message:
Copy & paste some missing part (flow director, ECC and temp sensor) from
ixgbe_msix_admin() to ixgbe_legacy_irq(). Now it's ready to make a new
function to share the common part. It'll be done in near future.
To generate a diff of this commit:
cvs rdiff -u -r1.275 -r1.276 src/sys/dev/pci/ixgbe/ixgbe.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/pci/ixgbe/ixgbe.c
diff -u src/sys/dev/pci/ixgbe/ixgbe.c:1.275 src/sys/dev/pci/ixgbe/ixgbe.c:1.276
--- src/sys/dev/pci/ixgbe/ixgbe.c:1.275 Sat Dec 26 06:17:55 2020
+++ src/sys/dev/pci/ixgbe/ixgbe.c Sat Dec 26 06:27:38 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe.c,v 1.275 2020/12/26 06:17:55 msaitoh Exp $ */
+/* $NetBSD: ixgbe.c,v 1.276 2020/12/26 06:27:38 msaitoh Exp $ */
/******************************************************************************
@@ -5272,6 +5272,61 @@ ixgbe_legacy_irq(void *arg)
}
}
+ if (adapter->hw.mac.type != ixgbe_mac_82598EB) {
+ if ((adapter->feat_en & IXGBE_FEATURE_FDIR) &&
+ (eicr & IXGBE_EICR_FLOW_DIR)) {
+ if (!atomic_cas_uint(&adapter->fdir_reinit, 0, 1)) {
+ task_requests |= IXGBE_REQUEST_TASK_FDIR;
+ /* Disable the interrupt */
+ eims_disable |= IXGBE_EIMS_FLOW_DIR;
+ }
+ }
+
+ if (eicr & IXGBE_EICR_ECC) {
+ device_printf(adapter->dev,
+ "CRITICAL: ECC ERROR!! Please Reboot!!\n");
+ /* Disable interrupt to prevent log spam */
+ eims_disable |= IXGBE_EICR_ECC;
+ }
+
+ /* Check for over temp condition */
+ if (adapter->feat_en & IXGBE_FEATURE_TEMP_SENSOR) {
+ switch (adapter->hw.mac.type) {
+ case ixgbe_mac_X550EM_a:
+ if (!(eicr & IXGBE_EICR_GPI_SDP0_X550EM_a))
+ break;
+ /* Disable interrupt to prevent log spam */
+ eims_disable |= IXGBE_EICR_GPI_SDP0_X550EM_a;
+
+ retval = hw->phy.ops.check_overtemp(hw);
+ if (retval != IXGBE_ERR_OVERTEMP)
+ break;
+ device_printf(adapter->dev, "CRITICAL: OVER TEMP!! PHY IS SHUT DOWN!!\n");
+ device_printf(adapter->dev, "System shutdown required!\n");
+ break;
+ default:
+ if (!(eicr & IXGBE_EICR_TS))
+ break;
+ /* Disable interrupt to prevent log spam */
+ eims_disable |= IXGBE_EIMS_TS;
+
+ retval = hw->phy.ops.check_overtemp(hw);
+ if (retval != IXGBE_ERR_OVERTEMP)
+ break;
+ device_printf(adapter->dev, "CRITICAL: OVER TEMP!! PHY IS SHUT DOWN!!\n");
+ device_printf(adapter->dev, "System shutdown required!\n");
+ break;
+ }
+ }
+
+ /* Check for VF message */
+ if ((adapter->feat_en & IXGBE_FEATURE_SRIOV) &&
+ (eicr & IXGBE_EICR_MAILBOX)) {
+ task_requests |= IXGBE_REQUEST_TASK_MBX;
+ eims_disable |= IXGBE_EIMS_MAILBOX;
+ }
+ }
+
/* Check for fan failure */
if (adapter->feat_en & IXGBE_FEATURE_FAN_FAIL) {
retval = ixgbe_check_fan_failure(adapter, eicr, true);