[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
@@ -171,7 +171,6 @@ static char mux_8012[] = { 0xff, 0xf7, 0xff, 0xfb, 0xf3, 0xfb, 0xff, 0xf7,};
|
||||
struct net_local {
|
||||
spinlock_t lock;
|
||||
struct net_device *next_module;
|
||||
struct net_device_stats stats;
|
||||
struct timer_list timer; /* Media selection timer. */
|
||||
long last_rx_time; /* Last Rx, in jiffies, to handle Rx hang. */
|
||||
int saved_tx_size;
|
||||
@@ -205,7 +204,6 @@ static irqreturn_t atp_interrupt(int irq, void *dev_id);
|
||||
static void net_rx(struct net_device *dev);
|
||||
static void read_block(long ioaddr, int length, unsigned char *buffer, int data_mode);
|
||||
static int net_close(struct net_device *dev);
|
||||
static struct net_device_stats *net_get_stats(struct net_device *dev);
|
||||
static void set_rx_mode_8002(struct net_device *dev);
|
||||
static void set_rx_mode_8012(struct net_device *dev);
|
||||
static void tx_timeout(struct net_device *dev);
|
||||
@@ -348,7 +346,6 @@ static int __init atp_probe1(long ioaddr)
|
||||
dev->open = net_open;
|
||||
dev->stop = net_close;
|
||||
dev->hard_start_xmit = atp_send_packet;
|
||||
dev->get_stats = net_get_stats;
|
||||
dev->set_multicast_list =
|
||||
lp->chip_type == RTL8002 ? &set_rx_mode_8002 : &set_rx_mode_8012;
|
||||
dev->tx_timeout = tx_timeout;
|
||||
@@ -538,18 +535,17 @@ static void write_packet(long ioaddr, int length, unsigned char *packet, int pad
|
||||
|
||||
static void tx_timeout(struct net_device *dev)
|
||||
{
|
||||
struct net_local *np = netdev_priv(dev);
|
||||
long ioaddr = dev->base_addr;
|
||||
|
||||
printk(KERN_WARNING "%s: Transmit timed out, %s?\n", dev->name,
|
||||
inb(ioaddr + PAR_CONTROL) & 0x10 ? "network cable problem"
|
||||
: "IRQ conflict");
|
||||
np->stats.tx_errors++;
|
||||
dev->stats.tx_errors++;
|
||||
/* Try to restart the adapter. */
|
||||
hardware_init(dev);
|
||||
dev->trans_start = jiffies;
|
||||
netif_wake_queue(dev);
|
||||
np->stats.tx_errors++;
|
||||
dev->stats.tx_errors++;
|
||||
}
|
||||
|
||||
static int atp_send_packet(struct sk_buff *skb, struct net_device *dev)
|
||||
@@ -629,7 +625,7 @@ static irqreturn_t atp_interrupt(int irq, void *dev_instance)
|
||||
/* We acknowledged the normal Rx interrupt, so if the interrupt
|
||||
is still outstanding we must have a Rx error. */
|
||||
if (read_status & (CMR1_IRQ << 3)) { /* Overrun. */
|
||||
lp->stats.rx_over_errors++;
|
||||
dev->stats.rx_over_errors++;
|
||||
/* Set to no-accept mode long enough to remove a packet. */
|
||||
write_reg_high(ioaddr, CMR2, CMR2h_OFF);
|
||||
net_rx(dev);
|
||||
@@ -649,9 +645,9 @@ static irqreturn_t atp_interrupt(int irq, void *dev_instance)
|
||||
and reinitialize the adapter. */
|
||||
write_reg(ioaddr, ISR, ISR_TxErr + ISR_TxOK);
|
||||
if (status & (ISR_TxErr<<3)) {
|
||||
lp->stats.collisions++;
|
||||
dev->stats.collisions++;
|
||||
if (++lp->re_tx > 15) {
|
||||
lp->stats.tx_aborted_errors++;
|
||||
dev->stats.tx_aborted_errors++;
|
||||
hardware_init(dev);
|
||||
break;
|
||||
}
|
||||
@@ -660,7 +656,7 @@ static irqreturn_t atp_interrupt(int irq, void *dev_instance)
|
||||
write_reg(ioaddr, CMR1, CMR1_ReXmit + CMR1_Xmit);
|
||||
} else {
|
||||
/* Finish up the transmit. */
|
||||
lp->stats.tx_packets++;
|
||||
dev->stats.tx_packets++;
|
||||
lp->pac_cnt_in_tx_buf--;
|
||||
if ( lp->saved_tx_size) {
|
||||
trigger_send(ioaddr, lp->saved_tx_size);
|
||||
@@ -678,7 +674,7 @@ static irqreturn_t atp_interrupt(int irq, void *dev_instance)
|
||||
"%ld jiffies status %02x CMR1 %02x.\n", dev->name,
|
||||
num_tx_since_rx, jiffies - dev->last_rx, status,
|
||||
(read_nibble(ioaddr, CMR1) >> 3) & 15);
|
||||
lp->stats.rx_missed_errors++;
|
||||
dev->stats.rx_missed_errors++;
|
||||
hardware_init(dev);
|
||||
num_tx_since_rx = 0;
|
||||
break;
|
||||
@@ -735,13 +731,13 @@ static void atp_timed_checker(unsigned long data)
|
||||
struct net_local *lp = netdev_priv(atp_timed_dev);
|
||||
write_reg_byte(ioaddr, PAR0 + i, atp_timed_dev->dev_addr[i]);
|
||||
if (i == 2)
|
||||
lp->stats.tx_errors++;
|
||||
dev->stats.tx_errors++;
|
||||
else if (i == 3)
|
||||
lp->stats.tx_dropped++;
|
||||
dev->stats.tx_dropped++;
|
||||
else if (i == 4)
|
||||
lp->stats.collisions++;
|
||||
dev->stats.collisions++;
|
||||
else
|
||||
lp->stats.rx_errors++;
|
||||
dev->stats.rx_errors++;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@@ -765,14 +761,14 @@ static void net_rx(struct net_device *dev)
|
||||
printk(KERN_DEBUG " rx_count %04x %04x %04x %04x..", rx_head.pad,
|
||||
rx_head.rx_count, rx_head.rx_status, rx_head.cur_addr);
|
||||
if ((rx_head.rx_status & 0x77) != 0x01) {
|
||||
lp->stats.rx_errors++;
|
||||
if (rx_head.rx_status & 0x0004) lp->stats.rx_frame_errors++;
|
||||
else if (rx_head.rx_status & 0x0002) lp->stats.rx_crc_errors++;
|
||||
dev->stats.rx_errors++;
|
||||
if (rx_head.rx_status & 0x0004) dev->stats.rx_frame_errors++;
|
||||
else if (rx_head.rx_status & 0x0002) dev->stats.rx_crc_errors++;
|
||||
if (net_debug > 3)
|
||||
printk(KERN_DEBUG "%s: Unknown ATP Rx error %04x.\n",
|
||||
dev->name, rx_head.rx_status);
|
||||
if (rx_head.rx_status & 0x0020) {
|
||||
lp->stats.rx_fifo_errors++;
|
||||
dev->stats.rx_fifo_errors++;
|
||||
write_reg_high(ioaddr, CMR1, CMR1h_TxENABLE);
|
||||
write_reg_high(ioaddr, CMR1, CMR1h_RxENABLE | CMR1h_TxENABLE);
|
||||
} else if (rx_head.rx_status & 0x0050)
|
||||
@@ -787,7 +783,7 @@ static void net_rx(struct net_device *dev)
|
||||
if (skb == NULL) {
|
||||
printk(KERN_ERR "%s: Memory squeeze, dropping packet.\n",
|
||||
dev->name);
|
||||
lp->stats.rx_dropped++;
|
||||
dev->stats.rx_dropped++;
|
||||
goto done;
|
||||
}
|
||||
|
||||
@@ -796,8 +792,8 @@ static void net_rx(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 += pkt_len;
|
||||
dev->stats.rx_packets++;
|
||||
dev->stats.rx_bytes += pkt_len;
|
||||
}
|
||||
done:
|
||||
write_reg(ioaddr, CMR1, CMR1_NextPkt);
|
||||
@@ -849,15 +845,6 @@ net_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 *
|
||||
net_get_stats(struct net_device *dev)
|
||||
{
|
||||
struct net_local *lp = netdev_priv(dev);
|
||||
return &lp->stats;
|
||||
}
|
||||
|
||||
/*
|
||||
* Set or clear the multicast filter for this adapter.
|
||||
*/
|
||||
|
Reference in New Issue
Block a user