Commit 2321e80a authored by Kulikov Vasiliy's avatar Kulikov Vasiliy Committed by David S. Miller

natsemi: Use the instance of net_device_stats from net_device.

Since net_device has an instance of net_device_stats,
we can remove the instance of this from the adapter structure.
Signed-off-by: default avatarKulikov Vasiliy <segooon@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 897dd41d
...@@ -548,7 +548,6 @@ struct netdev_private { ...@@ -548,7 +548,6 @@ struct netdev_private {
dma_addr_t tx_dma[TX_RING_SIZE]; dma_addr_t tx_dma[TX_RING_SIZE];
struct net_device *dev; struct net_device *dev;
struct napi_struct napi; struct napi_struct napi;
struct net_device_stats stats;
/* Media monitoring timer */ /* Media monitoring timer */
struct timer_list timer; struct timer_list timer;
/* Frequently used values: keep some adjacent for cache effect */ /* Frequently used values: keep some adjacent for cache effect */
...@@ -1906,7 +1905,7 @@ static void ns_tx_timeout(struct net_device *dev) ...@@ -1906,7 +1905,7 @@ static void ns_tx_timeout(struct net_device *dev)
enable_irq(dev->irq); enable_irq(dev->irq);
dev->trans_start = jiffies; /* prevent tx timeout */ dev->trans_start = jiffies; /* prevent tx timeout */
np->stats.tx_errors++; dev->stats.tx_errors++;
netif_wake_queue(dev); netif_wake_queue(dev);
} }
...@@ -2009,7 +2008,7 @@ static void drain_tx(struct net_device *dev) ...@@ -2009,7 +2008,7 @@ static void drain_tx(struct net_device *dev)
np->tx_dma[i], np->tx_skbuff[i]->len, np->tx_dma[i], np->tx_skbuff[i]->len,
PCI_DMA_TODEVICE); PCI_DMA_TODEVICE);
dev_kfree_skb(np->tx_skbuff[i]); dev_kfree_skb(np->tx_skbuff[i]);
np->stats.tx_dropped++; dev->stats.tx_dropped++;
} }
np->tx_skbuff[i] = NULL; np->tx_skbuff[i] = NULL;
} }
...@@ -2115,7 +2114,7 @@ static netdev_tx_t start_tx(struct sk_buff *skb, struct net_device *dev) ...@@ -2115,7 +2114,7 @@ static netdev_tx_t start_tx(struct sk_buff *skb, struct net_device *dev)
writel(TxOn, ioaddr + ChipCmd); writel(TxOn, ioaddr + ChipCmd);
} else { } else {
dev_kfree_skb_irq(skb); dev_kfree_skb_irq(skb);
np->stats.tx_dropped++; dev->stats.tx_dropped++;
} }
spin_unlock_irqrestore(&np->lock, flags); spin_unlock_irqrestore(&np->lock, flags);
...@@ -2140,20 +2139,20 @@ static void netdev_tx_done(struct net_device *dev) ...@@ -2140,20 +2139,20 @@ static void netdev_tx_done(struct net_device *dev)
dev->name, np->dirty_tx, dev->name, np->dirty_tx,
le32_to_cpu(np->tx_ring[entry].cmd_status)); le32_to_cpu(np->tx_ring[entry].cmd_status));
if (np->tx_ring[entry].cmd_status & cpu_to_le32(DescPktOK)) { if (np->tx_ring[entry].cmd_status & cpu_to_le32(DescPktOK)) {
np->stats.tx_packets++; dev->stats.tx_packets++;
np->stats.tx_bytes += np->tx_skbuff[entry]->len; dev->stats.tx_bytes += np->tx_skbuff[entry]->len;
} else { /* Various Tx errors */ } else { /* Various Tx errors */
int tx_status = int tx_status =
le32_to_cpu(np->tx_ring[entry].cmd_status); le32_to_cpu(np->tx_ring[entry].cmd_status);
if (tx_status & (DescTxAbort|DescTxExcColl)) if (tx_status & (DescTxAbort|DescTxExcColl))
np->stats.tx_aborted_errors++; dev->stats.tx_aborted_errors++;
if (tx_status & DescTxFIFO) if (tx_status & DescTxFIFO)
np->stats.tx_fifo_errors++; dev->stats.tx_fifo_errors++;
if (tx_status & DescTxCarrier) if (tx_status & DescTxCarrier)
np->stats.tx_carrier_errors++; dev->stats.tx_carrier_errors++;
if (tx_status & DescTxOOWCol) if (tx_status & DescTxOOWCol)
np->stats.tx_window_errors++; dev->stats.tx_window_errors++;
np->stats.tx_errors++; dev->stats.tx_errors++;
} }
pci_unmap_single(np->pci_dev,np->tx_dma[entry], pci_unmap_single(np->pci_dev,np->tx_dma[entry],
np->tx_skbuff[entry]->len, np->tx_skbuff[entry]->len,
...@@ -2301,7 +2300,7 @@ static void netdev_rx(struct net_device *dev, int *work_done, int work_to_do) ...@@ -2301,7 +2300,7 @@ static void netdev_rx(struct net_device *dev, int *work_done, int work_to_do)
"buffers, entry %#08x " "buffers, entry %#08x "
"status %#08x.\n", dev->name, "status %#08x.\n", dev->name,
np->cur_rx, desc_status); np->cur_rx, desc_status);
np->stats.rx_length_errors++; dev->stats.rx_length_errors++;
/* The RX state machine has probably /* The RX state machine has probably
* locked up beneath us. Follow the * locked up beneath us. Follow the
...@@ -2321,15 +2320,15 @@ static void netdev_rx(struct net_device *dev, int *work_done, int work_to_do) ...@@ -2321,15 +2320,15 @@ static void netdev_rx(struct net_device *dev, int *work_done, int work_to_do)
} else { } else {
/* There was an error. */ /* There was an error. */
np->stats.rx_errors++; dev->stats.rx_errors++;
if (desc_status & (DescRxAbort|DescRxOver)) if (desc_status & (DescRxAbort|DescRxOver))
np->stats.rx_over_errors++; dev->stats.rx_over_errors++;
if (desc_status & (DescRxLong|DescRxRunt)) if (desc_status & (DescRxLong|DescRxRunt))
np->stats.rx_length_errors++; dev->stats.rx_length_errors++;
if (desc_status & (DescRxInvalid|DescRxAlign)) if (desc_status & (DescRxInvalid|DescRxAlign))
np->stats.rx_frame_errors++; dev->stats.rx_frame_errors++;
if (desc_status & DescRxCRC) if (desc_status & DescRxCRC)
np->stats.rx_crc_errors++; dev->stats.rx_crc_errors++;
} }
} else if (pkt_len > np->rx_buf_sz) { } else if (pkt_len > np->rx_buf_sz) {
/* if this is the tail of a double buffer /* if this is the tail of a double buffer
...@@ -2364,8 +2363,8 @@ static void netdev_rx(struct net_device *dev, int *work_done, int work_to_do) ...@@ -2364,8 +2363,8 @@ static void netdev_rx(struct net_device *dev, int *work_done, int work_to_do)
} }
skb->protocol = eth_type_trans(skb, dev); skb->protocol = eth_type_trans(skb, dev);
netif_receive_skb(skb); netif_receive_skb(skb);
np->stats.rx_packets++; dev->stats.rx_packets++;
np->stats.rx_bytes += pkt_len; dev->stats.rx_bytes += pkt_len;
} }
entry = (++np->cur_rx) % RX_RING_SIZE; entry = (++np->cur_rx) % RX_RING_SIZE;
np->rx_head_desc = &np->rx_ring[entry]; np->rx_head_desc = &np->rx_ring[entry];
...@@ -2428,17 +2427,17 @@ static void netdev_error(struct net_device *dev, int intr_status) ...@@ -2428,17 +2427,17 @@ static void netdev_error(struct net_device *dev, int intr_status)
printk(KERN_NOTICE "%s: Rx status FIFO overrun\n", printk(KERN_NOTICE "%s: Rx status FIFO overrun\n",
dev->name); dev->name);
} }
np->stats.rx_fifo_errors++; dev->stats.rx_fifo_errors++;
np->stats.rx_errors++; dev->stats.rx_errors++;
} }
/* Hmmmmm, it's not clear how to recover from PCI faults. */ /* Hmmmmm, it's not clear how to recover from PCI faults. */
if (intr_status & IntrPCIErr) { if (intr_status & IntrPCIErr) {
printk(KERN_NOTICE "%s: PCI error %#08x\n", dev->name, printk(KERN_NOTICE "%s: PCI error %#08x\n", dev->name,
intr_status & IntrPCIErr); intr_status & IntrPCIErr);
np->stats.tx_fifo_errors++; dev->stats.tx_fifo_errors++;
np->stats.tx_errors++; dev->stats.tx_errors++;
np->stats.rx_fifo_errors++; dev->stats.rx_fifo_errors++;
np->stats.rx_errors++; dev->stats.rx_errors++;
} }
spin_unlock(&np->lock); spin_unlock(&np->lock);
} }
...@@ -2446,11 +2445,10 @@ static void netdev_error(struct net_device *dev, int intr_status) ...@@ -2446,11 +2445,10 @@ static void netdev_error(struct net_device *dev, int intr_status)
static void __get_stats(struct net_device *dev) static void __get_stats(struct net_device *dev)
{ {
void __iomem * ioaddr = ns_ioaddr(dev); void __iomem * ioaddr = ns_ioaddr(dev);
struct netdev_private *np = netdev_priv(dev);
/* The chip only need report frame silently dropped. */ /* The chip only need report frame silently dropped. */
np->stats.rx_crc_errors += readl(ioaddr + RxCRCErrs); dev->stats.rx_crc_errors += readl(ioaddr + RxCRCErrs);
np->stats.rx_missed_errors += readl(ioaddr + RxMissed); dev->stats.rx_missed_errors += readl(ioaddr + RxMissed);
} }
static struct net_device_stats *get_stats(struct net_device *dev) static struct net_device_stats *get_stats(struct net_device *dev)
...@@ -2463,7 +2461,7 @@ static struct net_device_stats *get_stats(struct net_device *dev) ...@@ -2463,7 +2461,7 @@ static struct net_device_stats *get_stats(struct net_device *dev)
__get_stats(dev); __get_stats(dev);
spin_unlock_irq(&np->lock); spin_unlock_irq(&np->lock);
return &np->stats; return &dev->stats;
} }
#ifdef CONFIG_NET_POLL_CONTROLLER #ifdef CONFIG_NET_POLL_CONTROLLER
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment