Skip to content

Commit

Permalink
tg3: Save stats across chip resets
Browse files Browse the repository at this point in the history
Tg3 has a place to store stats, but doesn't really use it.  This patch
modifies the driver so that stats are saved across chip resets and gets
cleared across close / open calls.

Signed-off-by: Matt Carlson <mcarlson@broadcom.com>
Reviewed-by: Michael Chan <mchan@broadcom.com>
Reviewed-by: Ben Hutchings <bhutchings@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Matt Carlson authored and David S. Miller committed Dec 9, 2011
1 parent 0e6c9da commit 92feeab
Showing 1 changed file with 17 additions and 9 deletions.
26 changes: 17 additions & 9 deletions drivers/net/ethernet/broadcom/tg3.c
Original file line number Diff line number Diff line change
Expand Up @@ -7588,8 +7588,6 @@ static int tg3_abort_hw(struct tg3 *tp, int silent)
if (tnapi->hw_status)
memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
}
if (tp->hw_stats)
memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats));

return err;
}
Expand Down Expand Up @@ -7905,6 +7903,11 @@ static int tg3_chip_reset(struct tg3 *tp)
return 0;
}

static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *,
struct rtnl_link_stats64 *);
static struct tg3_ethtool_stats *tg3_get_estats(struct tg3 *,
struct tg3_ethtool_stats *);

/* tp->lock is held. */
static int tg3_halt(struct tg3 *tp, int kind, int silent)
{
Expand All @@ -7922,6 +7925,15 @@ static int tg3_halt(struct tg3 *tp, int kind, int silent)
tg3_write_sig_legacy(tp, kind);
tg3_write_sig_post_reset(tp, kind);

if (tp->hw_stats) {
/* Save the stats across chip resets... */
tg3_get_stats64(tp->dev, &tp->net_stats_prev),
tg3_get_estats(tp, &tp->estats_prev);

/* And make sure the next sample is new data */
memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats));
}

if (err)
return err;

Expand Down Expand Up @@ -9768,11 +9780,6 @@ static int tg3_open(struct net_device *dev)
return err;
}

static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *,
struct rtnl_link_stats64 *);
static struct tg3_ethtool_stats *tg3_get_estats(struct tg3 *,
struct tg3_ethtool_stats *);

static int tg3_close(struct net_device *dev)
{
int i;
Expand Down Expand Up @@ -9804,8 +9811,9 @@ static int tg3_close(struct net_device *dev)

tg3_ints_fini(tp);

tg3_get_stats64(tp->dev, &tp->net_stats_prev);
tg3_get_estats(tp, &tp->estats_prev);
/* Clear stats across close / open calls */
memset(&tp->net_stats_prev, 0, sizeof(tp->net_stats_prev));
memset(&tp->estats_prev, 0, sizeof(tp->estats_prev));

tg3_napi_fini(tp);

Expand Down

0 comments on commit 92feeab

Please sign in to comment.