forcedeth: statistics optimization
Subsystems (2)
PATCH 12/12 forcedeth: statistics optimization
This patch optimizes the data paths that can support hw counters. It removes the sw counted statistics.
Signed-off-by Ayaz Abdulla <[email protected]>
drivers/net/forcedeth.c +14 -19
@@ -1351,10 +1351,19 @@ {struct fe_priv *np =netdev_priv (dev); -/* It seems that the nic always generates interrupts and doesn't -* accumulate errors internally. Thus the current values in np->stats -* are already up to date. -*/ +/* If the nic supports hw counters then retrieve latest values */ +if (np->driver_data & (DEV_HAS_STATISTICS_V1 |DEV_HAS_STATISTICS_V2 )) { +nv_get_hw_stats (dev); + +/* copy to net_device stats */ + np->stats.tx_bytes = np->estats.tx_bytes; + np->stats.tx_fifo_errors = np->estats.tx_fifo_errors; + np->stats.tx_carrier_errors = np->estats.tx_carrier_errors; + np->stats.rx_crc_errors = np->estats.rx_crc_errors; + np->stats.rx_over_errors = np->estats.rx_over_errors; + np->stats.rx_errors = np->estats.rx_errors_total; + np->stats.tx_errors = np->estats.tx_errors_total; + }return &np->stats; }
@@ -1944,16 +1953,8 @@ np->get_tx_ctx->dma =0 ;if (flags &NV_TX2_LASTPACKET ) { -if (flags &NV_TX2_ERROR ) { -if (flags &NV_TX2_UNDERFLOW ) - np->stats.tx_fifo_errors++; -if (flags &NV_TX2_CARRIERLOST ) - np->stats.tx_carrier_errors++; - np->stats.tx_errors++; - }else { +if (!(flags &NV_TX2_ERROR )) np->stats.tx_packets++; - np->stats.tx_bytes += np->get_tx_ctx->skb->len; - }dev_kfree_skb_any (np->get_tx_ctx->skb); np->get_tx_ctx->skb =NULL ; }
@@ -2290,7 +2291,6 @@if (flags &NV_RX2_ERROR4 ) { len =nv_getlen (dev, skb->data, len);if (len <0 ) { - np->stats.rx_errors++;dev_kfree_skb (skb); goto next_pkt; }
@@ -2303,11 +2303,6 @@ }/* the rest are hard errors */ else { -if (flags &NV_RX2_CRCERR ) - np->stats.rx_crc_errors++; -if (flags &NV_RX2_OVERFLOW ) - np->stats.rx_over_errors++; - np->stats.rx_errors++;dev_kfree_skb (skb); goto next_pkt; }