bnx2x: Recoverable and unrecoverable error statistics
Add statistics for tracking parity errors from which we successfully recovered and those which were deemed unrecoverable. Signed-off-by: Ariel Elior <ariele@broadcom.com> Signed-off-by: Eilon Greenstein <eilong@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
95c6c6165e
commit
7a752993fe
@@ -175,7 +175,11 @@ static const struct {
|
|||||||
{ STATS_OFFSET32(total_tpa_aggregated_frames_hi),
|
{ STATS_OFFSET32(total_tpa_aggregated_frames_hi),
|
||||||
8, STATS_FLAGS_FUNC, "tpa_aggregated_frames"},
|
8, STATS_FLAGS_FUNC, "tpa_aggregated_frames"},
|
||||||
{ STATS_OFFSET32(total_tpa_bytes_hi),
|
{ STATS_OFFSET32(total_tpa_bytes_hi),
|
||||||
8, STATS_FLAGS_FUNC, "tpa_bytes"}
|
8, STATS_FLAGS_FUNC, "tpa_bytes"},
|
||||||
|
{ STATS_OFFSET32(recoverable_error),
|
||||||
|
4, STATS_FLAGS_FUNC, "recoverable_errors" },
|
||||||
|
{ STATS_OFFSET32(unrecoverable_error),
|
||||||
|
4, STATS_FLAGS_FUNC, "unrecoverable_errors" },
|
||||||
};
|
};
|
||||||
|
|
||||||
#define BNX2X_NUM_STATS ARRAY_SIZE(bnx2x_stats_arr)
|
#define BNX2X_NUM_STATS ARRAY_SIZE(bnx2x_stats_arr)
|
||||||
@@ -1388,7 +1392,8 @@ static int bnx2x_set_ringparam(struct net_device *dev,
|
|||||||
struct bnx2x *bp = netdev_priv(dev);
|
struct bnx2x *bp = netdev_priv(dev);
|
||||||
|
|
||||||
if (bp->recovery_state != BNX2X_RECOVERY_DONE) {
|
if (bp->recovery_state != BNX2X_RECOVERY_DONE) {
|
||||||
pr_err("Handling parity error recovery. Try again later\n");
|
netdev_err(dev, "Handling parity error recovery. "
|
||||||
|
"Try again later\n");
|
||||||
return -EAGAIN;
|
return -EAGAIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2042,7 +2047,8 @@ static void bnx2x_self_test(struct net_device *dev,
|
|||||||
struct bnx2x *bp = netdev_priv(dev);
|
struct bnx2x *bp = netdev_priv(dev);
|
||||||
u8 is_serdes;
|
u8 is_serdes;
|
||||||
if (bp->recovery_state != BNX2X_RECOVERY_DONE) {
|
if (bp->recovery_state != BNX2X_RECOVERY_DONE) {
|
||||||
pr_err("Handling parity error recovery. Try again later\n");
|
netdev_err(bp->dev, "Handling parity error recovery. "
|
||||||
|
"Try again later\n");
|
||||||
etest->flags |= ETH_TEST_FL_FAILED;
|
etest->flags |= ETH_TEST_FL_FAILED;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@@ -784,6 +784,7 @@ void bnx2x_panic_dump(struct bnx2x *bp)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
bp->stats_state = STATS_STATE_DISABLED;
|
bp->stats_state = STATS_STATE_DISABLED;
|
||||||
|
bp->eth_stats.unrecoverable_error++;
|
||||||
DP(BNX2X_MSG_STATS, "stats_state - DISABLED\n");
|
DP(BNX2X_MSG_STATS, "stats_state - DISABLED\n");
|
||||||
|
|
||||||
BNX2X_ERR("begin crash dump -----------------\n");
|
BNX2X_ERR("begin crash dump -----------------\n");
|
||||||
@@ -5441,6 +5442,7 @@ static void bnx2x_init_eth_fp(struct bnx2x *bp, int fp_idx)
|
|||||||
|
|
||||||
/* init shortcut */
|
/* init shortcut */
|
||||||
fp->ustorm_rx_prods_offset = bnx2x_rx_ustorm_prods_offset(fp);
|
fp->ustorm_rx_prods_offset = bnx2x_rx_ustorm_prods_offset(fp);
|
||||||
|
|
||||||
/* Setup SB indicies */
|
/* Setup SB indicies */
|
||||||
fp->rx_cons_sb = BNX2X_RX_SB_INDEX;
|
fp->rx_cons_sb = BNX2X_RX_SB_INDEX;
|
||||||
|
|
||||||
@@ -8563,6 +8565,7 @@ static inline void bnx2x_recovery_failed(struct bnx2x *bp)
|
|||||||
static void bnx2x_parity_recover(struct bnx2x *bp)
|
static void bnx2x_parity_recover(struct bnx2x *bp)
|
||||||
{
|
{
|
||||||
bool global = false;
|
bool global = false;
|
||||||
|
u32 error_recovered, error_unrecovered;
|
||||||
bool is_parity;
|
bool is_parity;
|
||||||
|
|
||||||
DP(NETIF_MSG_HW, "Handling parity\n");
|
DP(NETIF_MSG_HW, "Handling parity\n");
|
||||||
@@ -8678,9 +8681,14 @@ static void bnx2x_parity_recover(struct bnx2x *bp)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
error_recovered =
|
||||||
|
bp->eth_stats.recoverable_error;
|
||||||
|
error_unrecovered =
|
||||||
|
bp->eth_stats.unrecoverable_error;
|
||||||
bp->recovery_state =
|
bp->recovery_state =
|
||||||
BNX2X_RECOVERY_NIC_LOADING;
|
BNX2X_RECOVERY_NIC_LOADING;
|
||||||
if (bnx2x_nic_load(bp, LOAD_NORMAL)) {
|
if (bnx2x_nic_load(bp, LOAD_NORMAL)) {
|
||||||
|
error_unrecovered++;
|
||||||
netdev_err(bp->dev,
|
netdev_err(bp->dev,
|
||||||
"Recovery failed. "
|
"Recovery failed. "
|
||||||
"Power cycle "
|
"Power cycle "
|
||||||
@@ -8694,8 +8702,13 @@ static void bnx2x_parity_recover(struct bnx2x *bp)
|
|||||||
} else {
|
} else {
|
||||||
bp->recovery_state =
|
bp->recovery_state =
|
||||||
BNX2X_RECOVERY_DONE;
|
BNX2X_RECOVERY_DONE;
|
||||||
|
error_recovered++;
|
||||||
smp_mb();
|
smp_mb();
|
||||||
}
|
}
|
||||||
|
bp->eth_stats.recoverable_error =
|
||||||
|
error_recovered;
|
||||||
|
bp->eth_stats.unrecoverable_error =
|
||||||
|
error_unrecovered;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@@ -199,6 +199,10 @@ struct bnx2x_eth_stats {
|
|||||||
u32 pfc_frames_received_lo;
|
u32 pfc_frames_received_lo;
|
||||||
u32 pfc_frames_sent_hi;
|
u32 pfc_frames_sent_hi;
|
||||||
u32 pfc_frames_sent_lo;
|
u32 pfc_frames_sent_lo;
|
||||||
|
|
||||||
|
/* Recovery */
|
||||||
|
u32 recoverable_error;
|
||||||
|
u32 unrecoverable_error;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user