[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
@ -190,13 +190,6 @@ static struct devlist smc_devlist[] __initdata = {
|
||||
|
||||
/* store this information for the driver.. */
|
||||
struct smc_local {
|
||||
/*
|
||||
these are things that the kernel wants me to keep, so users
|
||||
can find out semi-useless statistics of how well the card is
|
||||
performing
|
||||
*/
|
||||
struct net_device_stats stats;
|
||||
|
||||
/*
|
||||
If I have to wait until memory is available to send
|
||||
a packet, I will store the skbuff here, until I get the
|
||||
@ -248,12 +241,6 @@ static void smc_timeout(struct net_device *dev);
|
||||
*/
|
||||
static int smc_close(struct net_device *dev);
|
||||
|
||||
/*
|
||||
. This routine allows the proc file system to query the driver's
|
||||
. statistics.
|
||||
*/
|
||||
static struct net_device_stats * smc_query_statistics( struct net_device *dev);
|
||||
|
||||
/*
|
||||
. Finally, a call to set promiscuous mode ( for TCPDUMP and related
|
||||
. programs ) and multicast modes.
|
||||
@ -514,7 +501,7 @@ static int smc_wait_to_send_packet( struct sk_buff * skb, struct net_device * de
|
||||
|
||||
if ( lp->saved_skb) {
|
||||
/* THIS SHOULD NEVER HAPPEN. */
|
||||
lp->stats.tx_aborted_errors++;
|
||||
dev->stats.tx_aborted_errors++;
|
||||
printk(CARDNAME": Bad Craziness - sent packet while busy.\n" );
|
||||
return 1;
|
||||
}
|
||||
@ -1065,7 +1052,6 @@ static int __init smc_probe(struct net_device *dev, int ioaddr)
|
||||
dev->hard_start_xmit = smc_wait_to_send_packet;
|
||||
dev->tx_timeout = smc_timeout;
|
||||
dev->watchdog_timeo = HZ/20;
|
||||
dev->get_stats = smc_query_statistics;
|
||||
dev->set_multicast_list = smc_set_multicast_list;
|
||||
|
||||
return 0;
|
||||
@ -1199,7 +1185,6 @@ static void smc_timeout(struct net_device *dev)
|
||||
*/
|
||||
static void smc_rcv(struct net_device *dev)
|
||||
{
|
||||
struct smc_local *lp = netdev_priv(dev);
|
||||
int ioaddr = dev->base_addr;
|
||||
int packet_number;
|
||||
word status;
|
||||
@ -1243,13 +1228,13 @@ static void smc_rcv(struct net_device *dev)
|
||||
|
||||
/* set multicast stats */
|
||||
if ( status & RS_MULTICAST )
|
||||
lp->stats.multicast++;
|
||||
dev->stats.multicast++;
|
||||
|
||||
skb = dev_alloc_skb( packet_length + 5);
|
||||
|
||||
if ( skb == NULL ) {
|
||||
printk(KERN_NOTICE CARDNAME ": Low memory, packet dropped.\n");
|
||||
lp->stats.rx_dropped++;
|
||||
dev->stats.rx_dropped++;
|
||||
goto done;
|
||||
}
|
||||
|
||||
@ -1289,16 +1274,16 @@ static void smc_rcv(struct net_device *dev)
|
||||
skb->protocol = eth_type_trans(skb, dev );
|
||||
netif_rx(skb);
|
||||
dev->last_rx = jiffies;
|
||||
lp->stats.rx_packets++;
|
||||
lp->stats.rx_bytes += packet_length;
|
||||
dev->stats.rx_packets++;
|
||||
dev->stats.rx_bytes += packet_length;
|
||||
} else {
|
||||
/* error ... */
|
||||
lp->stats.rx_errors++;
|
||||
dev->stats.rx_errors++;
|
||||
|
||||
if ( status & RS_ALGNERR ) lp->stats.rx_frame_errors++;
|
||||
if ( status & RS_ALGNERR ) dev->stats.rx_frame_errors++;
|
||||
if ( status & (RS_TOOSHORT | RS_TOOLONG ) )
|
||||
lp->stats.rx_length_errors++;
|
||||
if ( status & RS_BADCRC) lp->stats.rx_crc_errors++;
|
||||
dev->stats.rx_length_errors++;
|
||||
if ( status & RS_BADCRC) dev->stats.rx_crc_errors++;
|
||||
}
|
||||
|
||||
done:
|
||||
@ -1346,12 +1331,12 @@ static void smc_tx( struct net_device * dev )
|
||||
tx_status = inw( ioaddr + DATA_1 );
|
||||
PRINTK3((CARDNAME": TX DONE STATUS: %4x \n", tx_status ));
|
||||
|
||||
lp->stats.tx_errors++;
|
||||
if ( tx_status & TS_LOSTCAR ) lp->stats.tx_carrier_errors++;
|
||||
dev->stats.tx_errors++;
|
||||
if ( tx_status & TS_LOSTCAR ) dev->stats.tx_carrier_errors++;
|
||||
if ( tx_status & TS_LATCOL ) {
|
||||
printk(KERN_DEBUG CARDNAME
|
||||
": Late collision occurred on last xmit.\n");
|
||||
lp->stats.tx_window_errors++;
|
||||
dev->stats.tx_window_errors++;
|
||||
}
|
||||
#if 0
|
||||
if ( tx_status & TS_16COL ) { ... }
|
||||
@ -1446,10 +1431,10 @@ static irqreturn_t smc_interrupt(int irq, void * dev_id)
|
||||
SMC_SELECT_BANK( 0 );
|
||||
card_stats = inw( ioaddr + COUNTER );
|
||||
/* single collisions */
|
||||
lp->stats.collisions += card_stats & 0xF;
|
||||
dev->stats.collisions += card_stats & 0xF;
|
||||
card_stats >>= 4;
|
||||
/* multiple collisions */
|
||||
lp->stats.collisions += card_stats & 0xF;
|
||||
dev->stats.collisions += card_stats & 0xF;
|
||||
|
||||
/* these are for when linux supports these statistics */
|
||||
|
||||
@ -1458,7 +1443,7 @@ static irqreturn_t smc_interrupt(int irq, void * dev_id)
|
||||
": TX_BUFFER_EMPTY handled\n"));
|
||||
outb( IM_TX_EMPTY_INT, ioaddr + INTERRUPT );
|
||||
mask &= ~IM_TX_EMPTY_INT;
|
||||
lp->stats.tx_packets += lp->packets_waiting;
|
||||
dev->stats.tx_packets += lp->packets_waiting;
|
||||
lp->packets_waiting = 0;
|
||||
|
||||
} else if (status & IM_ALLOC_INT ) {
|
||||
@ -1477,8 +1462,8 @@ static irqreturn_t smc_interrupt(int irq, void * dev_id)
|
||||
|
||||
PRINTK2((CARDNAME": Handoff done successfully.\n"));
|
||||
} else if (status & IM_RX_OVRN_INT ) {
|
||||
lp->stats.rx_errors++;
|
||||
lp->stats.rx_fifo_errors++;
|
||||
dev->stats.rx_errors++;
|
||||
dev->stats.rx_fifo_errors++;
|
||||
outb( IM_RX_OVRN_INT, ioaddr + INTERRUPT );
|
||||
} else if (status & IM_EPH_INT ) {
|
||||
PRINTK((CARDNAME ": UNSUPPORTED: EPH INTERRUPT \n"));
|
||||
@ -1521,16 +1506,6 @@ static int smc_close(struct net_device *dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------
|
||||
. Get the current statistics.
|
||||
. This may be called with the card open or closed.
|
||||
.-------------------------------------------------------------*/
|
||||
static struct net_device_stats* smc_query_statistics(struct net_device *dev) {
|
||||
struct smc_local *lp = netdev_priv(dev);
|
||||
|
||||
return &lp->stats;
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------------
|
||||
. smc_set_multicast_list
|
||||
.
|
||||
|
Reference in New Issue
Block a user