[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
@@ -204,7 +204,6 @@ struct fec_enet_private {
|
||||
cbd_t *tx_bd_base;
|
||||
cbd_t *cur_rx, *cur_tx; /* The next free ring entry */
|
||||
cbd_t *dirty_tx; /* The ring entries to be free()ed. */
|
||||
struct net_device_stats stats;
|
||||
uint tx_full;
|
||||
spinlock_t lock;
|
||||
|
||||
@@ -234,7 +233,6 @@ static irqreturn_t fec_enet_interrupt(int irq, void * dev_id);
|
||||
static void fec_enet_tx(struct net_device *dev);
|
||||
static void fec_enet_rx(struct net_device *dev);
|
||||
static int fec_enet_close(struct net_device *dev);
|
||||
static struct net_device_stats *fec_enet_get_stats(struct net_device *dev);
|
||||
static void set_multicast_list(struct net_device *dev);
|
||||
static void fec_restart(struct net_device *dev, int duplex);
|
||||
static void fec_stop(struct net_device *dev);
|
||||
@@ -359,7 +357,7 @@ fec_enet_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
*/
|
||||
fep->tx_skbuff[fep->skb_cur] = skb;
|
||||
|
||||
fep->stats.tx_bytes += skb->len;
|
||||
dev->stats.tx_bytes += skb->len;
|
||||
fep->skb_cur = (fep->skb_cur+1) & TX_RING_MOD_MASK;
|
||||
|
||||
/* Push the data cache so the CPM does not get stale memory
|
||||
@@ -409,7 +407,7 @@ fec_timeout(struct net_device *dev)
|
||||
struct fec_enet_private *fep = netdev_priv(dev);
|
||||
|
||||
printk("%s: transmit timed out.\n", dev->name);
|
||||
fep->stats.tx_errors++;
|
||||
dev->stats.tx_errors++;
|
||||
#ifndef final_version
|
||||
{
|
||||
int i;
|
||||
@@ -511,19 +509,19 @@ fec_enet_tx(struct net_device *dev)
|
||||
if (status & (BD_ENET_TX_HB | BD_ENET_TX_LC |
|
||||
BD_ENET_TX_RL | BD_ENET_TX_UN |
|
||||
BD_ENET_TX_CSL)) {
|
||||
fep->stats.tx_errors++;
|
||||
dev->stats.tx_errors++;
|
||||
if (status & BD_ENET_TX_HB) /* No heartbeat */
|
||||
fep->stats.tx_heartbeat_errors++;
|
||||
dev->stats.tx_heartbeat_errors++;
|
||||
if (status & BD_ENET_TX_LC) /* Late collision */
|
||||
fep->stats.tx_window_errors++;
|
||||
dev->stats.tx_window_errors++;
|
||||
if (status & BD_ENET_TX_RL) /* Retrans limit */
|
||||
fep->stats.tx_aborted_errors++;
|
||||
dev->stats.tx_aborted_errors++;
|
||||
if (status & BD_ENET_TX_UN) /* Underrun */
|
||||
fep->stats.tx_fifo_errors++;
|
||||
dev->stats.tx_fifo_errors++;
|
||||
if (status & BD_ENET_TX_CSL) /* Carrier lost */
|
||||
fep->stats.tx_carrier_errors++;
|
||||
dev->stats.tx_carrier_errors++;
|
||||
} else {
|
||||
fep->stats.tx_packets++;
|
||||
dev->stats.tx_packets++;
|
||||
}
|
||||
|
||||
#ifndef final_version
|
||||
@@ -534,7 +532,7 @@ fec_enet_tx(struct net_device *dev)
|
||||
* but we eventually sent the packet OK.
|
||||
*/
|
||||
if (status & BD_ENET_TX_DEF)
|
||||
fep->stats.collisions++;
|
||||
dev->stats.collisions++;
|
||||
|
||||
/* Free the sk buffer associated with this last transmit.
|
||||
*/
|
||||
@@ -607,17 +605,17 @@ while (!((status = bdp->cbd_sc) & BD_ENET_RX_EMPTY)) {
|
||||
/* Check for errors. */
|
||||
if (status & (BD_ENET_RX_LG | BD_ENET_RX_SH | BD_ENET_RX_NO |
|
||||
BD_ENET_RX_CR | BD_ENET_RX_OV)) {
|
||||
fep->stats.rx_errors++;
|
||||
dev->stats.rx_errors++;
|
||||
if (status & (BD_ENET_RX_LG | BD_ENET_RX_SH)) {
|
||||
/* Frame too long or too short. */
|
||||
fep->stats.rx_length_errors++;
|
||||
dev->stats.rx_length_errors++;
|
||||
}
|
||||
if (status & BD_ENET_RX_NO) /* Frame alignment */
|
||||
fep->stats.rx_frame_errors++;
|
||||
dev->stats.rx_frame_errors++;
|
||||
if (status & BD_ENET_RX_CR) /* CRC Error */
|
||||
fep->stats.rx_crc_errors++;
|
||||
dev->stats.rx_crc_errors++;
|
||||
if (status & BD_ENET_RX_OV) /* FIFO overrun */
|
||||
fep->stats.rx_fifo_errors++;
|
||||
dev->stats.rx_fifo_errors++;
|
||||
}
|
||||
|
||||
/* Report late collisions as a frame error.
|
||||
@@ -625,16 +623,16 @@ while (!((status = bdp->cbd_sc) & BD_ENET_RX_EMPTY)) {
|
||||
* have in the buffer. So, just drop this frame on the floor.
|
||||
*/
|
||||
if (status & BD_ENET_RX_CL) {
|
||||
fep->stats.rx_errors++;
|
||||
fep->stats.rx_frame_errors++;
|
||||
dev->stats.rx_errors++;
|
||||
dev->stats.rx_frame_errors++;
|
||||
goto rx_processing_done;
|
||||
}
|
||||
|
||||
/* Process the incoming frame.
|
||||
*/
|
||||
fep->stats.rx_packets++;
|
||||
dev->stats.rx_packets++;
|
||||
pkt_len = bdp->cbd_datlen;
|
||||
fep->stats.rx_bytes += pkt_len;
|
||||
dev->stats.rx_bytes += pkt_len;
|
||||
data = (__u8*)__va(bdp->cbd_bufaddr);
|
||||
|
||||
/* This does 16 byte alignment, exactly what we need.
|
||||
@@ -646,7 +644,7 @@ while (!((status = bdp->cbd_sc) & BD_ENET_RX_EMPTY)) {
|
||||
|
||||
if (skb == NULL) {
|
||||
printk("%s: Memory squeeze, dropping packet.\n", dev->name);
|
||||
fep->stats.rx_dropped++;
|
||||
dev->stats.rx_dropped++;
|
||||
} else {
|
||||
skb_put(skb,pkt_len-4); /* Make room */
|
||||
skb_copy_to_linear_data(skb, data, pkt_len-4);
|
||||
@@ -2220,13 +2218,6 @@ fec_enet_close(struct net_device *dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct net_device_stats *fec_enet_get_stats(struct net_device *dev)
|
||||
{
|
||||
struct fec_enet_private *fep = netdev_priv(dev);
|
||||
|
||||
return &fep->stats;
|
||||
}
|
||||
|
||||
/* Set or clear the multicast filter for this adaptor.
|
||||
* Skeleton taken from sunlance driver.
|
||||
* The CPM Ethernet implementation allows Multicast as well as individual
|
||||
@@ -2462,7 +2453,6 @@ int __init fec_enet_init(struct net_device *dev)
|
||||
dev->tx_timeout = fec_timeout;
|
||||
dev->watchdog_timeo = TX_TIMEOUT;
|
||||
dev->stop = fec_enet_close;
|
||||
dev->get_stats = fec_enet_get_stats;
|
||||
dev->set_multicast_list = set_multicast_list;
|
||||
|
||||
for (i=0; i<NMII-1; i++)
|
||||
|
Reference in New Issue
Block a user