Commit 7a752993 authored by Ariel Elior's avatar Ariel Elior Committed by David S. Miller

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: default avatarAriel Elior <ariele@broadcom.com>
Signed-off-by: default avatarEilon Greenstein <eilong@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 95c6c616
...@@ -175,7 +175,11 @@ static const struct { ...@@ -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, ...@@ -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, ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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 { ...@@ -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;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment