Module Name: src
Committed By: msaitoh
Date: Sat Dec 26 06:10:17 UTC 2020
Modified Files:
src/sys/dev/pci/ixgbe: ixgbe.c ixgbe_type.h
Log Message:
Disable some interrupt in ixgbe_{legacy_irq,msix_admin}() to prevent log spam.
To generate a diff of this commit:
cvs rdiff -u -r1.273 -r1.274 src/sys/dev/pci/ixgbe/ixgbe.c
cvs rdiff -u -r1.47 -r1.48 src/sys/dev/pci/ixgbe/ixgbe_type.h
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.273 src/sys/dev/pci/ixgbe/ixgbe.c:1.274
--- src/sys/dev/pci/ixgbe/ixgbe.c:1.273 Sat Dec 26 06:07:16 2020
+++ src/sys/dev/pci/ixgbe/ixgbe.c Sat Dec 26 06:10:17 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe.c,v 1.273 2020/12/26 06:07:16 msaitoh Exp $ */
+/* $NetBSD: ixgbe.c,v 1.274 2020/12/26 06:10:17 msaitoh Exp $ */
/******************************************************************************
@@ -175,7 +175,7 @@ static void ixgbe_init_locked(struct ada
static void ixgbe_ifstop(struct ifnet *, int);
static void ixgbe_stop_locked(void *);
static void ixgbe_init_device_features(struct adapter *);
-static void ixgbe_check_fan_failure(struct adapter *, u32, bool);
+static int ixgbe_check_fan_failure(struct adapter *, u32, bool);
static void ixgbe_add_media_types(struct adapter *);
static void ixgbe_media_status(struct ifnet *, struct ifmediareq *);
static int ixgbe_media_change(struct ifnet *);
@@ -3162,6 +3162,8 @@ ixgbe_msix_admin(void *arg)
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 */
@@ -3170,6 +3172,8 @@ ixgbe_msix_admin(void *arg)
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)
@@ -3180,6 +3184,8 @@ ixgbe_msix_admin(void *arg)
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)
@@ -3200,7 +3206,11 @@ ixgbe_msix_admin(void *arg)
/* Check for fan failure */
if (adapter->feat_en & IXGBE_FEATURE_FAN_FAIL) {
- ixgbe_check_fan_failure(adapter, eicr, true);
+ retval = ixgbe_check_fan_failure(adapter, eicr, true);
+ if (retval == IXGBE_ERR_FAN_FAILURE) {
+ /* Disable interrupt to prevent log spam */
+ eims_disable |= IXGBE_EIMS_GPI_SDP1_BY_MAC(hw);
+ }
}
/* External PHY interrupt */
@@ -5185,6 +5195,7 @@ ixgbe_legacy_irq(void *arg)
u32 eims_enable = 0;
u32 eims_disable = 0;
u32 task_requests = 0;
+ s32 retval;
eims_orig = IXGBE_READ_REG(hw, IXGBE_EIMS);
/*
@@ -5264,7 +5275,11 @@ ixgbe_legacy_irq(void *arg)
/* Check for fan failure */
if (adapter->feat_en & IXGBE_FEATURE_FAN_FAIL) {
- ixgbe_check_fan_failure(adapter, eicr, true);
+ retval = ixgbe_check_fan_failure(adapter, eicr, true);
+ if (retval == IXGBE_ERR_FAN_FAILURE) {
+ /* Disable interrupt to prevent log spam */
+ eims_disable |= IXGBE_EIMS_GPI_SDP1_BY_MAC(hw);
+ }
}
/* External PHY interrupt */
@@ -6539,7 +6554,7 @@ ixgbe_ioctl(struct ifnet *ifp, u_long co
/************************************************************************
* ixgbe_check_fan_failure
************************************************************************/
-static void
+static int
ixgbe_check_fan_failure(struct adapter *adapter, u32 reg, bool in_interrupt)
{
u32 mask;
@@ -6547,8 +6562,12 @@ ixgbe_check_fan_failure(struct adapter *
mask = (in_interrupt) ? IXGBE_EICR_GPI_SDP1_BY_MAC(&adapter->hw) :
IXGBE_ESDP_SDP1;
- if (reg & mask)
+ if (reg & mask) {
device_printf(adapter->dev, "\nCRITICAL: FAN FAILURE!! REPLACE IMMEDIATELY!!\n");
+ return IXGBE_ERR_FAN_FAILURE;
+ }
+
+ return IXGBE_SUCCESS;
} /* ixgbe_check_fan_failure */
/************************************************************************
Index: src/sys/dev/pci/ixgbe/ixgbe_type.h
diff -u src/sys/dev/pci/ixgbe/ixgbe_type.h:1.47 src/sys/dev/pci/ixgbe/ixgbe_type.h:1.48
--- src/sys/dev/pci/ixgbe/ixgbe_type.h:1.47 Sat Dec 26 06:07:16 2020
+++ src/sys/dev/pci/ixgbe/ixgbe_type.h Sat Dec 26 06:10:17 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe_type.h,v 1.47 2020/12/26 06:07:16 msaitoh Exp $ */
+/* $NetBSD: ixgbe_type.h,v 1.48 2020/12/26 06:10:17 msaitoh Exp $ */
/******************************************************************************
SPDX-License-Identifier: BSD-3-Clause
@@ -4324,7 +4324,7 @@ struct ixgbe_hw {
#define IXGBE_ERR_NOT_TRUSTED -50 /* XXX NetBSD */
#define IXGBE_ERR_NOT_IN_PROMISC -51 /* XXX NetBSD */
-
+#define IXGBE_ERR_FAN_FAILURE -52 /* XXX NetBSD */
#define IXGBE_NOT_IMPLEMENTED 0x7FFFFFFF