[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
@@ -258,8 +258,6 @@ struct lance_private {
|
||||
int rx_new, tx_new;
|
||||
int rx_old, tx_old;
|
||||
|
||||
struct net_device_stats stats;
|
||||
|
||||
unsigned short busmaster_regval;
|
||||
|
||||
struct timer_list multicast_timer;
|
||||
@@ -583,22 +581,22 @@ static int lance_rx(struct net_device *dev)
|
||||
|
||||
/* We got an incomplete frame? */
|
||||
if ((bits & LE_R1_POK) != LE_R1_POK) {
|
||||
lp->stats.rx_over_errors++;
|
||||
lp->stats.rx_errors++;
|
||||
dev->stats.rx_over_errors++;
|
||||
dev->stats.rx_errors++;
|
||||
} else if (bits & LE_R1_ERR) {
|
||||
/* Count only the end frame as a rx error,
|
||||
* not the beginning
|
||||
*/
|
||||
if (bits & LE_R1_BUF)
|
||||
lp->stats.rx_fifo_errors++;
|
||||
dev->stats.rx_fifo_errors++;
|
||||
if (bits & LE_R1_CRC)
|
||||
lp->stats.rx_crc_errors++;
|
||||
dev->stats.rx_crc_errors++;
|
||||
if (bits & LE_R1_OFL)
|
||||
lp->stats.rx_over_errors++;
|
||||
dev->stats.rx_over_errors++;
|
||||
if (bits & LE_R1_FRA)
|
||||
lp->stats.rx_frame_errors++;
|
||||
dev->stats.rx_frame_errors++;
|
||||
if (bits & LE_R1_EOP)
|
||||
lp->stats.rx_errors++;
|
||||
dev->stats.rx_errors++;
|
||||
} else {
|
||||
len = (*rds_ptr(rd, mblength, lp->type) & 0xfff) - 4;
|
||||
skb = dev_alloc_skb(len + 2);
|
||||
@@ -606,7 +604,7 @@ static int lance_rx(struct net_device *dev)
|
||||
if (skb == 0) {
|
||||
printk("%s: Memory squeeze, deferring packet.\n",
|
||||
dev->name);
|
||||
lp->stats.rx_dropped++;
|
||||
dev->stats.rx_dropped++;
|
||||
*rds_ptr(rd, mblength, lp->type) = 0;
|
||||
*rds_ptr(rd, rmd1, lp->type) =
|
||||
((lp->rx_buf_ptr_lnc[entry] >> 16) &
|
||||
@@ -614,7 +612,7 @@ static int lance_rx(struct net_device *dev)
|
||||
lp->rx_new = (entry + 1) & RX_RING_MOD_MASK;
|
||||
return 0;
|
||||
}
|
||||
lp->stats.rx_bytes += len;
|
||||
dev->stats.rx_bytes += len;
|
||||
|
||||
skb_reserve(skb, 2); /* 16 byte align */
|
||||
skb_put(skb, len); /* make room */
|
||||
@@ -625,7 +623,7 @@ static int lance_rx(struct net_device *dev)
|
||||
skb->protocol = eth_type_trans(skb, dev);
|
||||
netif_rx(skb);
|
||||
dev->last_rx = jiffies;
|
||||
lp->stats.rx_packets++;
|
||||
dev->stats.rx_packets++;
|
||||
}
|
||||
|
||||
/* Return the packet to the pool */
|
||||
@@ -660,14 +658,14 @@ static void lance_tx(struct net_device *dev)
|
||||
if (*tds_ptr(td, tmd1, lp->type) & LE_T1_ERR) {
|
||||
status = *tds_ptr(td, misc, lp->type);
|
||||
|
||||
lp->stats.tx_errors++;
|
||||
dev->stats.tx_errors++;
|
||||
if (status & LE_T3_RTY)
|
||||
lp->stats.tx_aborted_errors++;
|
||||
dev->stats.tx_aborted_errors++;
|
||||
if (status & LE_T3_LCOL)
|
||||
lp->stats.tx_window_errors++;
|
||||
dev->stats.tx_window_errors++;
|
||||
|
||||
if (status & LE_T3_CLOS) {
|
||||
lp->stats.tx_carrier_errors++;
|
||||
dev->stats.tx_carrier_errors++;
|
||||
printk("%s: Carrier Lost\n", dev->name);
|
||||
/* Stop the lance */
|
||||
writereg(&ll->rap, LE_CSR0);
|
||||
@@ -681,7 +679,7 @@ static void lance_tx(struct net_device *dev)
|
||||
* transmitter, restart the adapter.
|
||||
*/
|
||||
if (status & (LE_T3_BUF | LE_T3_UFL)) {
|
||||
lp->stats.tx_fifo_errors++;
|
||||
dev->stats.tx_fifo_errors++;
|
||||
|
||||
printk("%s: Tx: ERR_BUF|ERR_UFL, restarting\n",
|
||||
dev->name);
|
||||
@@ -702,13 +700,13 @@ static void lance_tx(struct net_device *dev)
|
||||
|
||||
/* One collision before packet was sent. */
|
||||
if (*tds_ptr(td, tmd1, lp->type) & LE_T1_EONE)
|
||||
lp->stats.collisions++;
|
||||
dev->stats.collisions++;
|
||||
|
||||
/* More than one collision, be optimistic. */
|
||||
if (*tds_ptr(td, tmd1, lp->type) & LE_T1_EMORE)
|
||||
lp->stats.collisions += 2;
|
||||
dev->stats.collisions += 2;
|
||||
|
||||
lp->stats.tx_packets++;
|
||||
dev->stats.tx_packets++;
|
||||
}
|
||||
j = (j + 1) & TX_RING_MOD_MASK;
|
||||
}
|
||||
@@ -754,10 +752,10 @@ static irqreturn_t lance_interrupt(const int irq, void *dev_id)
|
||||
lance_tx(dev);
|
||||
|
||||
if (csr0 & LE_C0_BABL)
|
||||
lp->stats.tx_errors++;
|
||||
dev->stats.tx_errors++;
|
||||
|
||||
if (csr0 & LE_C0_MISS)
|
||||
lp->stats.rx_errors++;
|
||||
dev->stats.rx_errors++;
|
||||
|
||||
if (csr0 & LE_C0_MERR) {
|
||||
printk("%s: Memory error, status %04x\n", dev->name, csr0);
|
||||
@@ -912,7 +910,7 @@ static int lance_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
len = ETH_ZLEN;
|
||||
}
|
||||
|
||||
lp->stats.tx_bytes += len;
|
||||
dev->stats.tx_bytes += len;
|
||||
|
||||
entry = lp->tx_new;
|
||||
*lib_ptr(ib, btx_ring[entry].length, lp->type) = (-len);
|
||||
@@ -938,13 +936,6 @@ static int lance_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct net_device_stats *lance_get_stats(struct net_device *dev)
|
||||
{
|
||||
struct lance_private *lp = netdev_priv(dev);
|
||||
|
||||
return &lp->stats;
|
||||
}
|
||||
|
||||
static void lance_load_multicast(struct net_device *dev)
|
||||
{
|
||||
struct lance_private *lp = netdev_priv(dev);
|
||||
@@ -1244,7 +1235,6 @@ static int __init dec_lance_probe(struct device *bdev, const int type)
|
||||
dev->hard_start_xmit = &lance_start_xmit;
|
||||
dev->tx_timeout = &lance_tx_timeout;
|
||||
dev->watchdog_timeo = 5*HZ;
|
||||
dev->get_stats = &lance_get_stats;
|
||||
dev->set_multicast_list = &lance_set_multicast;
|
||||
|
||||
/* lp->ll is the location of the registers for lance card */
|
||||
|
Reference in New Issue
Block a user