[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
@@ -457,7 +457,6 @@ struct netdrv_private {
|
||||
void *mmio_addr;
|
||||
int drv_flags;
|
||||
struct pci_dev *pci_dev;
|
||||
struct net_device_stats stats;
|
||||
struct timer_list timer; /* Media selection timer. */
|
||||
unsigned char *rx_ring;
|
||||
unsigned int cur_rx; /* Index into the Rx buffer of next Rx pkt. */
|
||||
@@ -505,7 +504,6 @@ static int netdrv_start_xmit (struct sk_buff *skb,
|
||||
static irqreturn_t netdrv_interrupt (int irq, void *dev_instance);
|
||||
static int netdrv_close (struct net_device *dev);
|
||||
static int netdrv_ioctl (struct net_device *dev, struct ifreq *rq, int cmd);
|
||||
static struct net_device_stats *netdrv_get_stats (struct net_device *dev);
|
||||
static void netdrv_set_rx_mode (struct net_device *dev);
|
||||
static void netdrv_hw_start (struct net_device *dev);
|
||||
|
||||
@@ -775,7 +773,6 @@ static int __devinit netdrv_init_one (struct pci_dev *pdev,
|
||||
dev->open = netdrv_open;
|
||||
dev->hard_start_xmit = netdrv_start_xmit;
|
||||
dev->stop = netdrv_close;
|
||||
dev->get_stats = netdrv_get_stats;
|
||||
dev->set_multicast_list = netdrv_set_rx_mode;
|
||||
dev->do_ioctl = netdrv_ioctl;
|
||||
dev->tx_timeout = netdrv_tx_timeout;
|
||||
@@ -1276,7 +1273,7 @@ static void netdrv_tx_clear (struct netdrv_private *tp)
|
||||
if (rp->skb) {
|
||||
dev_kfree_skb (rp->skb);
|
||||
rp->skb = NULL;
|
||||
tp->stats.tx_dropped++;
|
||||
dev->stats.tx_dropped++;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1389,25 +1386,25 @@ static void netdrv_tx_interrupt (struct net_device *dev,
|
||||
/* There was an major error, log it. */
|
||||
DPRINTK ("%s: Transmit error, Tx status %8.8x.\n",
|
||||
dev->name, txstatus);
|
||||
tp->stats.tx_errors++;
|
||||
dev->stats.tx_errors++;
|
||||
if (txstatus & TxAborted) {
|
||||
tp->stats.tx_aborted_errors++;
|
||||
dev->stats.tx_aborted_errors++;
|
||||
NETDRV_W32 (TxConfig, TxClearAbt | (TX_DMA_BURST << TxDMAShift));
|
||||
}
|
||||
if (txstatus & TxCarrierLost)
|
||||
tp->stats.tx_carrier_errors++;
|
||||
dev->stats.tx_carrier_errors++;
|
||||
if (txstatus & TxOutOfWindow)
|
||||
tp->stats.tx_window_errors++;
|
||||
dev->stats.tx_window_errors++;
|
||||
} else {
|
||||
if (txstatus & TxUnderrun) {
|
||||
/* Add 64 to the Tx FIFO threshold. */
|
||||
if (tp->tx_flag < 0x00300000)
|
||||
tp->tx_flag += 0x00020000;
|
||||
tp->stats.tx_fifo_errors++;
|
||||
dev->stats.tx_fifo_errors++;
|
||||
}
|
||||
tp->stats.collisions += (txstatus >> 24) & 15;
|
||||
tp->stats.tx_bytes += txstatus & 0x7ff;
|
||||
tp->stats.tx_packets++;
|
||||
dev->stats.collisions += (txstatus >> 24) & 15;
|
||||
dev->stats.tx_bytes += txstatus & 0x7ff;
|
||||
dev->stats.tx_packets++;
|
||||
}
|
||||
|
||||
/* Free the original skb. */
|
||||
@@ -1460,13 +1457,13 @@ static void netdrv_rx_err (u32 rx_status, struct net_device *dev,
|
||||
dev->name, rx_status);
|
||||
/* A.C.: The chip hangs here. */
|
||||
}
|
||||
tp->stats.rx_errors++;
|
||||
dev->stats.rx_errors++;
|
||||
if (rx_status & (RxBadSymbol | RxBadAlign))
|
||||
tp->stats.rx_frame_errors++;
|
||||
dev->stats.rx_frame_errors++;
|
||||
if (rx_status & (RxRunt | RxTooLong))
|
||||
tp->stats.rx_length_errors++;
|
||||
dev->stats.rx_length_errors++;
|
||||
if (rx_status & RxCRCErr)
|
||||
tp->stats.rx_crc_errors++;
|
||||
dev->stats.rx_crc_errors++;
|
||||
/* Reset the receiver, based on RealTek recommendation. (Bug?) */
|
||||
tp->cur_rx = 0;
|
||||
|
||||
@@ -1572,13 +1569,13 @@ static void netdrv_rx_interrupt (struct net_device *dev,
|
||||
skb->protocol = eth_type_trans (skb, dev);
|
||||
netif_rx (skb);
|
||||
dev->last_rx = jiffies;
|
||||
tp->stats.rx_bytes += pkt_size;
|
||||
tp->stats.rx_packets++;
|
||||
dev->stats.rx_bytes += pkt_size;
|
||||
dev->stats.rx_packets++;
|
||||
} else {
|
||||
printk (KERN_WARNING
|
||||
"%s: Memory squeeze, dropping packet.\n",
|
||||
dev->name);
|
||||
tp->stats.rx_dropped++;
|
||||
dev->stats.rx_dropped++;
|
||||
}
|
||||
|
||||
cur_rx = (cur_rx + rx_size + 4 + 3) & ~3;
|
||||
@@ -1607,7 +1604,7 @@ static void netdrv_weird_interrupt (struct net_device *dev,
|
||||
assert (ioaddr != NULL);
|
||||
|
||||
/* Update the error count. */
|
||||
tp->stats.rx_missed_errors += NETDRV_R32 (RxMissed);
|
||||
dev->stats.rx_missed_errors += NETDRV_R32 (RxMissed);
|
||||
NETDRV_W32 (RxMissed, 0);
|
||||
|
||||
if ((status & RxUnderrun) && link_changed &&
|
||||
@@ -1628,14 +1625,14 @@ static void netdrv_weird_interrupt (struct net_device *dev,
|
||||
/* XXX along with netdrv_rx_err, are we double-counting errors? */
|
||||
if (status &
|
||||
(RxUnderrun | RxOverflow | RxErr | RxFIFOOver))
|
||||
tp->stats.rx_errors++;
|
||||
dev->stats.rx_errors++;
|
||||
|
||||
if (status & (PCSTimeout))
|
||||
tp->stats.rx_length_errors++;
|
||||
dev->stats.rx_length_errors++;
|
||||
if (status & (RxUnderrun | RxFIFOOver))
|
||||
tp->stats.rx_fifo_errors++;
|
||||
dev->stats.rx_fifo_errors++;
|
||||
if (status & RxOverflow) {
|
||||
tp->stats.rx_over_errors++;
|
||||
dev->stats.rx_over_errors++;
|
||||
tp->cur_rx = NETDRV_R16 (RxBufAddr) % RX_BUF_LEN;
|
||||
NETDRV_W16_F (RxBufPtr, tp->cur_rx - 16);
|
||||
}
|
||||
@@ -1739,7 +1736,7 @@ static int netdrv_close (struct net_device *dev)
|
||||
NETDRV_W16 (IntrMask, 0x0000);
|
||||
|
||||
/* Update the error counts. */
|
||||
tp->stats.rx_missed_errors += NETDRV_R32 (RxMissed);
|
||||
dev->stats.rx_missed_errors += NETDRV_R32 (RxMissed);
|
||||
NETDRV_W32 (RxMissed, 0);
|
||||
|
||||
spin_unlock_irqrestore (&tp->lock, flags);
|
||||
@@ -1806,31 +1803,6 @@ static int netdrv_ioctl (struct net_device *dev, struct ifreq *rq, int cmd)
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
static struct net_device_stats *netdrv_get_stats (struct net_device *dev)
|
||||
{
|
||||
struct netdrv_private *tp = dev->priv;
|
||||
void *ioaddr = tp->mmio_addr;
|
||||
|
||||
DPRINTK ("ENTER\n");
|
||||
|
||||
assert (tp != NULL);
|
||||
|
||||
if (netif_running(dev)) {
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave (&tp->lock, flags);
|
||||
|
||||
tp->stats.rx_missed_errors += NETDRV_R32 (RxMissed);
|
||||
NETDRV_W32 (RxMissed, 0);
|
||||
|
||||
spin_unlock_irqrestore (&tp->lock, flags);
|
||||
}
|
||||
|
||||
DPRINTK ("EXIT\n");
|
||||
return &tp->stats;
|
||||
}
|
||||
|
||||
/* Set or clear the multicast filter for this adaptor.
|
||||
This routine is not state sensitive and need not be SMP locked. */
|
||||
|
||||
@@ -1908,7 +1880,7 @@ static int netdrv_suspend (struct pci_dev *pdev, pm_message_t state)
|
||||
NETDRV_W8 (ChipCmd, (NETDRV_R8 (ChipCmd) & ChipCmdClear));
|
||||
|
||||
/* Update the error counts. */
|
||||
tp->stats.rx_missed_errors += NETDRV_R32 (RxMissed);
|
||||
dev->stats.rx_missed_errors += NETDRV_R32 (RxMissed);
|
||||
NETDRV_W32 (RxMissed, 0);
|
||||
|
||||
spin_unlock_irqrestore (&tp->lock, flags);
|
||||
|
Reference in New Issue
Block a user