[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
@@ -158,7 +158,6 @@ typedef struct _BufferDesc {
|
||||
} BufferDesc;
|
||||
|
||||
struct sis900_private {
|
||||
struct net_device_stats stats;
|
||||
struct pci_dev * pci_dev;
|
||||
|
||||
spinlock_t lock;
|
||||
@@ -221,7 +220,6 @@ static void sis900_finish_xmit (struct net_device *net_dev);
|
||||
static irqreturn_t sis900_interrupt(int irq, void *dev_instance);
|
||||
static int sis900_close(struct net_device *net_dev);
|
||||
static int mii_ioctl(struct net_device *net_dev, struct ifreq *rq, int cmd);
|
||||
static struct net_device_stats *sis900_get_stats(struct net_device *net_dev);
|
||||
static u16 sis900_mcast_bitnr(u8 *addr, u8 revision);
|
||||
static void set_rx_mode(struct net_device *net_dev);
|
||||
static void sis900_reset(struct net_device *net_dev);
|
||||
@@ -466,7 +464,6 @@ static int __devinit sis900_probe(struct pci_dev *pci_dev,
|
||||
net_dev->open = &sis900_open;
|
||||
net_dev->hard_start_xmit = &sis900_start_xmit;
|
||||
net_dev->stop = &sis900_close;
|
||||
net_dev->get_stats = &sis900_get_stats;
|
||||
net_dev->set_config = &sis900_set_config;
|
||||
net_dev->set_multicast_list = &set_rx_mode;
|
||||
net_dev->do_ioctl = &mii_ioctl;
|
||||
@@ -1542,7 +1539,7 @@ static void sis900_tx_timeout(struct net_device *net_dev)
|
||||
sis_priv->tx_skbuff[i] = NULL;
|
||||
sis_priv->tx_ring[i].cmdsts = 0;
|
||||
sis_priv->tx_ring[i].bufptr = 0;
|
||||
sis_priv->stats.tx_dropped++;
|
||||
net_dev->stats.tx_dropped++;
|
||||
}
|
||||
}
|
||||
sis_priv->tx_full = 0;
|
||||
@@ -1739,15 +1736,15 @@ static int sis900_rx(struct net_device *net_dev)
|
||||
printk(KERN_DEBUG "%s: Corrupted packet "
|
||||
"received, buffer status = 0x%8.8x/%d.\n",
|
||||
net_dev->name, rx_status, data_size);
|
||||
sis_priv->stats.rx_errors++;
|
||||
net_dev->stats.rx_errors++;
|
||||
if (rx_status & OVERRUN)
|
||||
sis_priv->stats.rx_over_errors++;
|
||||
net_dev->stats.rx_over_errors++;
|
||||
if (rx_status & (TOOLONG|RUNT))
|
||||
sis_priv->stats.rx_length_errors++;
|
||||
net_dev->stats.rx_length_errors++;
|
||||
if (rx_status & (RXISERR | FAERR))
|
||||
sis_priv->stats.rx_frame_errors++;
|
||||
net_dev->stats.rx_frame_errors++;
|
||||
if (rx_status & CRCERR)
|
||||
sis_priv->stats.rx_crc_errors++;
|
||||
net_dev->stats.rx_crc_errors++;
|
||||
/* reset buffer descriptor state */
|
||||
sis_priv->rx_ring[entry].cmdsts = RX_BUF_SIZE;
|
||||
} else {
|
||||
@@ -1768,7 +1765,7 @@ static int sis900_rx(struct net_device *net_dev)
|
||||
* in the rx ring
|
||||
*/
|
||||
skb = sis_priv->rx_skbuff[entry];
|
||||
sis_priv->stats.rx_dropped++;
|
||||
net_dev->stats.rx_dropped++;
|
||||
goto refill_rx_ring;
|
||||
}
|
||||
|
||||
@@ -1793,10 +1790,10 @@ static int sis900_rx(struct net_device *net_dev)
|
||||
|
||||
/* some network statistics */
|
||||
if ((rx_status & BCAST) == MCAST)
|
||||
sis_priv->stats.multicast++;
|
||||
net_dev->stats.multicast++;
|
||||
net_dev->last_rx = jiffies;
|
||||
sis_priv->stats.rx_bytes += rx_size;
|
||||
sis_priv->stats.rx_packets++;
|
||||
net_dev->stats.rx_bytes += rx_size;
|
||||
net_dev->stats.rx_packets++;
|
||||
sis_priv->dirty_rx++;
|
||||
refill_rx_ring:
|
||||
sis_priv->rx_skbuff[entry] = skb;
|
||||
@@ -1827,7 +1824,7 @@ refill_rx_ring:
|
||||
printk(KERN_INFO "%s: Memory squeeze,"
|
||||
"deferring packet.\n",
|
||||
net_dev->name);
|
||||
sis_priv->stats.rx_dropped++;
|
||||
net_dev->stats.rx_dropped++;
|
||||
break;
|
||||
}
|
||||
sis_priv->rx_skbuff[entry] = skb;
|
||||
@@ -1878,20 +1875,20 @@ static void sis900_finish_xmit (struct net_device *net_dev)
|
||||
printk(KERN_DEBUG "%s: Transmit "
|
||||
"error, Tx status %8.8x.\n",
|
||||
net_dev->name, tx_status);
|
||||
sis_priv->stats.tx_errors++;
|
||||
net_dev->stats.tx_errors++;
|
||||
if (tx_status & UNDERRUN)
|
||||
sis_priv->stats.tx_fifo_errors++;
|
||||
net_dev->stats.tx_fifo_errors++;
|
||||
if (tx_status & ABORT)
|
||||
sis_priv->stats.tx_aborted_errors++;
|
||||
net_dev->stats.tx_aborted_errors++;
|
||||
if (tx_status & NOCARRIER)
|
||||
sis_priv->stats.tx_carrier_errors++;
|
||||
net_dev->stats.tx_carrier_errors++;
|
||||
if (tx_status & OWCOLL)
|
||||
sis_priv->stats.tx_window_errors++;
|
||||
net_dev->stats.tx_window_errors++;
|
||||
} else {
|
||||
/* packet successfully transmitted */
|
||||
sis_priv->stats.collisions += (tx_status & COLCNT) >> 16;
|
||||
sis_priv->stats.tx_bytes += tx_status & DSIZE;
|
||||
sis_priv->stats.tx_packets++;
|
||||
net_dev->stats.collisions += (tx_status & COLCNT) >> 16;
|
||||
net_dev->stats.tx_bytes += tx_status & DSIZE;
|
||||
net_dev->stats.tx_packets++;
|
||||
}
|
||||
/* Free the original skb. */
|
||||
skb = sis_priv->tx_skbuff[entry];
|
||||
@@ -2137,21 +2134,6 @@ static int mii_ioctl(struct net_device *net_dev, struct ifreq *rq, int cmd)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* sis900_get_stats - Get sis900 read/write statistics
|
||||
* @net_dev: the net device to get statistics for
|
||||
*
|
||||
* get tx/rx statistics for sis900
|
||||
*/
|
||||
|
||||
static struct net_device_stats *
|
||||
sis900_get_stats(struct net_device *net_dev)
|
||||
{
|
||||
struct sis900_private *sis_priv = net_dev->priv;
|
||||
|
||||
return &sis_priv->stats;
|
||||
}
|
||||
|
||||
/**
|
||||
* sis900_set_config - Set media type by net_device.set_config
|
||||
* @dev: the net device for media type change
|
||||
|
Reference in New Issue
Block a user