at91_ether: use netstats in net_device structure
Subsystems (3)
PATCH RESEND 1/1 at91_ether: use netstats in net_device structure
Use net_device_stats from net_device structure instead of local.
Signed-off-by Paulius Zaleckas <[email protected]>
Tested-by Marc Pignat <[email protected]>
Acked-by Andrew Victor <[email protected]>
---
drivers/net/arm/at91_ether.c +19 -20
@@ -820,7 +820,7 @@ static int at91ether_tx(struct sk_buff *skb, struct net_device *dev) lp->skb = skb; lp->skb_length = skb->len; lp->skb_physaddr =dma_map_single (NULL , skb->data, skb->len,DMA_TO_DEVICE ); - lp->stats.tx_bytes += skb->len; + dev->stats.tx_bytes += skb->len;/* Set address of the data in the Transmit Address register */ at91_emac_write (AT91_EMAC_TAR , lp->skb_physaddr);
@@ -843,34 +843,33 @@ static int at91ether_tx(struct sk_buff *skb, struct net_device *dev)*/ static struct net_device_stats *at91ether_stats (struct net_device *dev) { -struct at91_private *lp =netdev_priv (dev);int ale, lenerr, seqe, lcol, ecol;if (netif_running (dev)) { - lp->stats.rx_packets +=at91_emac_read (AT91_EMAC_OK );/* Good frames received */ + dev->stats.rx_packets +=at91_emac_read (AT91_EMAC_OK );/* Good frames received */ ale =at91_emac_read (AT91_EMAC_ALE ); - lp->stats.rx_frame_errors += ale;/* Alignment errors */ + dev->stats.rx_frame_errors += ale;/* Alignment errors */ lenerr =at91_emac_read (AT91_EMAC_ELR ) +at91_emac_read (AT91_EMAC_USF ); - lp->stats.rx_length_errors += lenerr;/* Excessive Length or Undersize Frame error */ + dev->stats.rx_length_errors += lenerr;/* Excessive Length or Undersize Frame error */ seqe =at91_emac_read (AT91_EMAC_SEQE ); - lp->stats.rx_crc_errors += seqe;/* CRC error */ - lp->stats.rx_fifo_errors +=at91_emac_read (AT91_EMAC_DRFC );/* Receive buffer not available */ - lp->stats.rx_errors += (ale + lenerr + seqe + dev->stats.rx_crc_errors += seqe;/* CRC error */ + dev->stats.rx_fifo_errors +=at91_emac_read (AT91_EMAC_DRFC );/* Receive buffer not available */ + dev->stats.rx_errors += (ale + lenerr + seqe +at91_emac_read (AT91_EMAC_CDE ) +at91_emac_read (AT91_EMAC_RJB )); - lp->stats.tx_packets +=at91_emac_read (AT91_EMAC_FRA );/* Frames successfully transmitted */ - lp->stats.tx_fifo_errors +=at91_emac_read (AT91_EMAC_TUE );/* Transmit FIFO underruns */ - lp->stats.tx_carrier_errors +=at91_emac_read (AT91_EMAC_CSE );/* Carrier Sense errors */ - lp->stats.tx_heartbeat_errors +=at91_emac_read (AT91_EMAC_SQEE );/* Heartbeat error */ + dev->stats.tx_packets +=at91_emac_read (AT91_EMAC_FRA );/* Frames successfully transmitted */ + dev->stats.tx_fifo_errors +=at91_emac_read (AT91_EMAC_TUE );/* Transmit FIFO underruns */ + dev->stats.tx_carrier_errors +=at91_emac_read (AT91_EMAC_CSE );/* Carrier Sense errors */ + dev->stats.tx_heartbeat_errors +=at91_emac_read (AT91_EMAC_SQEE );/* Heartbeat error */ lcol =at91_emac_read (AT91_EMAC_LCOL ); ecol =at91_emac_read (AT91_EMAC_ECOL ); - lp->stats.tx_window_errors += lcol;/* Late collisions */ - lp->stats.tx_aborted_errors += ecol;/* 16 collisions */ + dev->stats.tx_window_errors += lcol;/* Late collisions */ + dev->stats.tx_aborted_errors += ecol;/* 16 collisions */ - lp->stats.collisions += (at91_emac_read (AT91_EMAC_SCOL ) +at91_emac_read (AT91_EMAC_MCOL ) + lcol + ecol); + dev->stats.collisions += (at91_emac_read (AT91_EMAC_SCOL ) +at91_emac_read (AT91_EMAC_MCOL ) + lcol + ecol); } -return &lp->stats; +return &dev->stats; }/*
@@ -896,16 +895,16 @@ static void at91ether_rx(struct net_device *dev) skb->protocol =eth_type_trans (skb, dev); dev->last_rx = jiffies; - lp->stats.rx_bytes += pktlen; + dev->stats.rx_bytes += pktlen;netif_rx (skb); }else { - lp->stats.rx_dropped +=1 ; + dev->stats.rx_dropped +=1 ;printk (KERN_NOTICE "%s: Memory squeeze, dropping packet.\n" , dev->name); }if (dlist->descriptors[lp->rxBuffIndex].size &EMAC_MULTICAST ) - lp->stats.multicast++; + dev->stats.multicast++; dlist->descriptors[lp->rxBuffIndex].addr &= ~EMAC_DESC_DONE ;/* reset ownership bit */ if (lp->rxBuffIndex ==MAX_RX_DESCR -1 )/* wrap after last buffer */
@@ -934,7 +933,7 @@ static irqreturn_t at91ether_interrupt(int irq, void *dev_id)if (intstatus &AT91_EMAC_TCOM ) {/* Transmit complete */ /* The TCOM bit is set even if the transmission failed. */ if (intstatus & (AT91_EMAC_TUND |AT91_EMAC_RTRY )) - lp->stats.tx_errors +=1 ; + dev->stats.tx_errors +=1 ;if (lp->skb) {dev_kfree_skb_irq (lp->skb);
drivers/net/arm/at91_ether.h +0 -1
@@ -84,7 +84,6 @@ struct recv_desc_bufsstruct at91_private { -struct net_device_stats stats;struct mii_if_info mii;/* ethtool support */ struct at91_eth_data board_data;/* board-specific configuration */ struct clk *ether_clk;/* clock */
Jeff Garzik
Appliedapplied