Subject: Re: [PATCH net-next] via-rhine: add 64bit statistics.

From: Jamie Gloudon <[email-masked]>
Date: Wed, 23 Jan 2013 20:20:52 -0400

On Wed, Jan 23, 2013 at 04:02:52PM -0800, Eric Dumazet wrote:
> On Wed, 2013-01-23 at 19:55 -0400, Jamie Gloudon wrote:
> 
> > Eric, do you mean like this below? If not, please illustrate.
> > 
> > +       netdev_stats_to_stats64(stats, &dev->stats);
> > +
> > +       do {
> > +               start = u64_stats_fetch_begin_bh(&rp->rx_stats.syncp);
> > +               stats->rx_packets = rp->rx_stats.packets;
> > +               stats->rx_bytes = rp->rx_stats.bytes;
> > +       } while (u64_stats_fetch_retry_bh(&rp->rx_stats.syncp, start));
> > +
> > +       do {
> > +               start = u64_stats_fetch_begin_bh(&rp->tx_stats.syncp);
> > +               stats->tx_packets = rp->tx_stats.packets;
> > +               stats->tx_bytes = rp->tx_stats.bytes;
> > +       } while (u64_stats_fetch_retry_bh(&rp->tx_stats.syncp, start));
> > +
> > +       return stats;
> > 
> 
> Yes, this is exactly how you should do that, since
> netdev_stats_to_stats64(stats, &dev->stats); would overwrite
> {tr}x_packets, {tr}x_bytes anyway.
> 
>

Right. Also, I added rx_dropped to increment for oversize ethernet. Is
that valid?

@@ -1857,6 +1869,7 @@ static int rhine_rx(struct net_device *dev, int
limit)
	"Oversized Ethernet frame %p vs %p\n", rp->rx_head_desc,                        	&rp->rx_ring[entry]);
+	dev->stats.rx_dropped++;
	dev->stats.rx_length_errors++;