Skip to content

Commit

Permalink
bnx2x: Recoverable and unrecoverable error statistics
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Ariel Elior authored and David S. Miller committed Jan 26, 2012
1 parent 95c6c61 commit 7a75299
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 3 deletions.
12 changes: 9 additions & 3 deletions drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,11 @@ static const struct {
{ STATS_OFFSET32(total_tpa_aggregated_frames_hi),
8, STATS_FLAGS_FUNC, "tpa_aggregated_frames"},
{ 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)
Expand Down Expand Up @@ -1388,7 +1392,8 @@ static int bnx2x_set_ringparam(struct net_device *dev,
struct bnx2x *bp = netdev_priv(dev);

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;
}

Expand Down Expand Up @@ -2042,7 +2047,8 @@ static void bnx2x_self_test(struct net_device *dev,
struct bnx2x *bp = netdev_priv(dev);
u8 is_serdes;
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;
return;
}
Expand Down
13 changes: 13 additions & 0 deletions drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -784,6 +784,7 @@ void bnx2x_panic_dump(struct bnx2x *bp)
#endif

bp->stats_state = STATS_STATE_DISABLED;
bp->eth_stats.unrecoverable_error++;
DP(BNX2X_MSG_STATS, "stats_state - DISABLED\n");

BNX2X_ERR("begin crash dump -----------------\n");
Expand Down Expand Up @@ -5441,6 +5442,7 @@ static void bnx2x_init_eth_fp(struct bnx2x *bp, int fp_idx)

/* init shortcut */
fp->ustorm_rx_prods_offset = bnx2x_rx_ustorm_prods_offset(fp);

/* Setup SB indicies */
fp->rx_cons_sb = BNX2X_RX_SB_INDEX;

Expand Down Expand Up @@ -8563,6 +8565,7 @@ static inline void bnx2x_recovery_failed(struct bnx2x *bp)
static void bnx2x_parity_recover(struct bnx2x *bp)
{
bool global = false;
u32 error_recovered, error_unrecovered;
bool is_parity;

DP(NETIF_MSG_HW, "Handling parity\n");
Expand Down Expand Up @@ -8678,9 +8681,14 @@ static void bnx2x_parity_recover(struct bnx2x *bp)
return;
}

error_recovered =
bp->eth_stats.recoverable_error;
error_unrecovered =
bp->eth_stats.unrecoverable_error;
bp->recovery_state =
BNX2X_RECOVERY_NIC_LOADING;
if (bnx2x_nic_load(bp, LOAD_NORMAL)) {
error_unrecovered++;
netdev_err(bp->dev,
"Recovery failed. "
"Power cycle "
Expand All @@ -8694,8 +8702,13 @@ static void bnx2x_parity_recover(struct bnx2x *bp)
} else {
bp->recovery_state =
BNX2X_RECOVERY_DONE;
error_recovered++;
smp_mb();
}
bp->eth_stats.recoverable_error =
error_recovered;
bp->eth_stats.unrecoverable_error =
error_unrecovered;

return;
}
Expand Down
4 changes: 4 additions & 0 deletions drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.h
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,10 @@ struct bnx2x_eth_stats {
u32 pfc_frames_received_lo;
u32 pfc_frames_sent_hi;
u32 pfc_frames_sent_lo;

/* Recovery */
u32 recoverable_error;
u32 unrecoverable_error;
};


Expand Down

0 comments on commit 7a75299

Please sign in to comment.