[NET] drivers/net: statistics cleanup #1 -- save memory and shrink code
We now have struct net_device_stats embedded in struct net_device, and the default ->get_stats() hook does the obvious thing for us. Run through drivers/net/* and remove the driver-local storage of statistics, and driver-local ->get_stats() hook where applicable. This was just the low-hanging fruit in drivers/net; plenty more drivers remain to be updated. [ Resolved conflicts with napi_struct changes and fix sunqe build regression... -DaveM ] Signed-off-by: Jeff Garzik <jeff@garzik.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
ff8ac60948
commit
09f75cd7bf
@ -116,7 +116,6 @@ static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev);
|
||||
static void gfar_timeout(struct net_device *dev);
|
||||
static int gfar_close(struct net_device *dev);
|
||||
struct sk_buff *gfar_new_skb(struct net_device *dev, struct rxbd8 *bdp);
|
||||
static struct net_device_stats *gfar_get_stats(struct net_device *dev);
|
||||
static int gfar_set_mac_address(struct net_device *dev);
|
||||
static int gfar_change_mtu(struct net_device *dev, int new_mtu);
|
||||
static irqreturn_t gfar_error(int irq, void *dev_id);
|
||||
@ -266,7 +265,6 @@ static int gfar_probe(struct platform_device *pdev)
|
||||
dev->poll_controller = gfar_netpoll;
|
||||
#endif
|
||||
dev->stop = gfar_close;
|
||||
dev->get_stats = gfar_get_stats;
|
||||
dev->change_mtu = gfar_change_mtu;
|
||||
dev->mtu = 1500;
|
||||
dev->set_multicast_list = gfar_set_multi;
|
||||
@ -1013,7 +1011,7 @@ static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
unsigned long flags;
|
||||
|
||||
/* Update transmit stats */
|
||||
priv->stats.tx_bytes += skb->len;
|
||||
dev->stats.tx_bytes += skb->len;
|
||||
|
||||
/* Lock priv now */
|
||||
spin_lock_irqsave(&priv->txlock, flags);
|
||||
@ -1086,7 +1084,7 @@ static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
if (txbdp == priv->dirty_tx) {
|
||||
netif_stop_queue(dev);
|
||||
|
||||
priv->stats.tx_fifo_errors++;
|
||||
dev->stats.tx_fifo_errors++;
|
||||
}
|
||||
|
||||
/* Update the current txbd to the next one */
|
||||
@ -1119,14 +1117,6 @@ static int gfar_close(struct net_device *dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* returns a net_device_stats structure pointer */
|
||||
static struct net_device_stats * gfar_get_stats(struct net_device *dev)
|
||||
{
|
||||
struct gfar_private *priv = netdev_priv(dev);
|
||||
|
||||
return &(priv->stats);
|
||||
}
|
||||
|
||||
/* Changes the mac address if the controller is not running. */
|
||||
int gfar_set_mac_address(struct net_device *dev)
|
||||
{
|
||||
@ -1238,7 +1228,7 @@ static void gfar_timeout(struct net_device *dev)
|
||||
{
|
||||
struct gfar_private *priv = netdev_priv(dev);
|
||||
|
||||
priv->stats.tx_errors++;
|
||||
dev->stats.tx_errors++;
|
||||
|
||||
if (dev->flags & IFF_UP) {
|
||||
stop_gfar(dev);
|
||||
@ -1268,12 +1258,12 @@ static irqreturn_t gfar_transmit(int irq, void *dev_id)
|
||||
if ((bdp == priv->cur_tx) && (netif_queue_stopped(dev) == 0))
|
||||
break;
|
||||
|
||||
priv->stats.tx_packets++;
|
||||
dev->stats.tx_packets++;
|
||||
|
||||
/* Deferred means some collisions occurred during transmit, */
|
||||
/* but we eventually sent the packet. */
|
||||
if (bdp->status & TXBD_DEF)
|
||||
priv->stats.collisions++;
|
||||
dev->stats.collisions++;
|
||||
|
||||
/* Free the sk buffer associated with this TxBD */
|
||||
dev_kfree_skb_irq(priv->tx_skbuff[priv->skb_dirtytx]);
|
||||
@ -1345,7 +1335,7 @@ struct sk_buff * gfar_new_skb(struct net_device *dev, struct rxbd8 *bdp)
|
||||
|
||||
static inline void count_errors(unsigned short status, struct gfar_private *priv)
|
||||
{
|
||||
struct net_device_stats *stats = &priv->stats;
|
||||
struct net_device_stats *stats = &dev->stats;
|
||||
struct gfar_extra_stats *estats = &priv->extra_stats;
|
||||
|
||||
/* If the packet was truncated, none of the other errors
|
||||
@ -1470,7 +1460,7 @@ static int gfar_process_frame(struct net_device *dev, struct sk_buff *skb,
|
||||
if (NULL == skb) {
|
||||
if (netif_msg_rx_err(priv))
|
||||
printk(KERN_WARNING "%s: Missing skb!!.\n", dev->name);
|
||||
priv->stats.rx_dropped++;
|
||||
dev->stats.rx_dropped++;
|
||||
priv->extra_stats.rx_skbmissing++;
|
||||
} else {
|
||||
int ret;
|
||||
@ -1528,7 +1518,7 @@ int gfar_clean_rx_ring(struct net_device *dev, int rx_work_limit)
|
||||
(RXBD_LARGE | RXBD_SHORT | RXBD_NONOCTET
|
||||
| RXBD_CRCERR | RXBD_OVERRUN | RXBD_TRUNCATED))) {
|
||||
/* Increment the number of packets */
|
||||
priv->stats.rx_packets++;
|
||||
dev->stats.rx_packets++;
|
||||
howmany++;
|
||||
|
||||
/* Remove the FCS from the packet length */
|
||||
@ -1536,7 +1526,7 @@ int gfar_clean_rx_ring(struct net_device *dev, int rx_work_limit)
|
||||
|
||||
gfar_process_frame(dev, skb, pkt_len);
|
||||
|
||||
priv->stats.rx_bytes += pkt_len;
|
||||
dev->stats.rx_bytes += pkt_len;
|
||||
} else {
|
||||
count_errors(bdp->status, priv);
|
||||
|
||||
@ -1916,17 +1906,17 @@ static irqreturn_t gfar_error(int irq, void *dev_id)
|
||||
|
||||
/* Update the error counters */
|
||||
if (events & IEVENT_TXE) {
|
||||
priv->stats.tx_errors++;
|
||||
dev->stats.tx_errors++;
|
||||
|
||||
if (events & IEVENT_LC)
|
||||
priv->stats.tx_window_errors++;
|
||||
dev->stats.tx_window_errors++;
|
||||
if (events & IEVENT_CRL)
|
||||
priv->stats.tx_aborted_errors++;
|
||||
dev->stats.tx_aborted_errors++;
|
||||
if (events & IEVENT_XFUN) {
|
||||
if (netif_msg_tx_err(priv))
|
||||
printk(KERN_DEBUG "%s: TX FIFO underrun, "
|
||||
"packet dropped.\n", dev->name);
|
||||
priv->stats.tx_dropped++;
|
||||
dev->stats.tx_dropped++;
|
||||
priv->extra_stats.tx_underrun++;
|
||||
|
||||
/* Reactivate the Tx Queues */
|
||||
@ -1936,7 +1926,7 @@ static irqreturn_t gfar_error(int irq, void *dev_id)
|
||||
printk(KERN_DEBUG "%s: Transmit Error\n", dev->name);
|
||||
}
|
||||
if (events & IEVENT_BSY) {
|
||||
priv->stats.rx_errors++;
|
||||
dev->stats.rx_errors++;
|
||||
priv->extra_stats.rx_bsy++;
|
||||
|
||||
gfar_receive(irq, dev_id);
|
||||
@ -1951,7 +1941,7 @@ static irqreturn_t gfar_error(int irq, void *dev_id)
|
||||
dev->name, gfar_read(&priv->regs->rstat));
|
||||
}
|
||||
if (events & IEVENT_BABR) {
|
||||
priv->stats.rx_errors++;
|
||||
dev->stats.rx_errors++;
|
||||
priv->extra_stats.rx_babr++;
|
||||
|
||||
if (netif_msg_rx_err(priv))
|
||||
|
Reference in New Issue
Block a user