Commit 91992e44 authored by Ajit Khaparde's avatar Ajit Khaparde Committed by David S. Miller

be2net: Maintain tx and rx counters in driver

For certain skews of the BE adapter, H/W Tx and Rx
counters could be common for more than one interface.
Add Tx and Rx counters in the adapter structure
(to maintain stats on a per interfae basis).
Signed-off-by: default avatarAjit Khaparde <ajitk@serverengines.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 294aedcf
...@@ -164,6 +164,7 @@ struct be_drvr_stats { ...@@ -164,6 +164,7 @@ struct be_drvr_stats {
ulong be_tx_jiffies; ulong be_tx_jiffies;
u64 be_tx_bytes; u64 be_tx_bytes;
u64 be_tx_bytes_prev; u64 be_tx_bytes_prev;
u64 be_tx_pkts;
u32 be_tx_rate; u32 be_tx_rate;
u32 cache_barrier[16]; u32 cache_barrier[16];
...@@ -175,6 +176,7 @@ struct be_drvr_stats { ...@@ -175,6 +176,7 @@ struct be_drvr_stats {
ulong be_rx_jiffies; ulong be_rx_jiffies;
u64 be_rx_bytes; u64 be_rx_bytes;
u64 be_rx_bytes_prev; u64 be_rx_bytes_prev;
u64 be_rx_pkts;
u32 be_rx_rate; u32 be_rx_rate;
/* number of non ether type II frames dropped where /* number of non ether type II frames dropped where
* frame len > length field of Mac Hdr */ * frame len > length field of Mac Hdr */
......
...@@ -159,13 +159,10 @@ void netdev_stats_update(struct be_adapter *adapter) ...@@ -159,13 +159,10 @@ void netdev_stats_update(struct be_adapter *adapter)
struct net_device_stats *dev_stats = &adapter->netdev->stats; struct net_device_stats *dev_stats = &adapter->netdev->stats;
struct be_erx_stats *erx_stats = &hw_stats->erx; struct be_erx_stats *erx_stats = &hw_stats->erx;
dev_stats->rx_packets = port_stats->rx_total_frames; dev_stats->rx_packets = drvr_stats(adapter)->be_rx_pkts;
dev_stats->tx_packets = port_stats->tx_unicastframes + dev_stats->tx_packets = drvr_stats(adapter)->be_tx_pkts;
port_stats->tx_multicastframes + port_stats->tx_broadcastframes; dev_stats->rx_bytes = drvr_stats(adapter)->be_rx_bytes;
dev_stats->rx_bytes = (u64) port_stats->rx_bytes_msd << 32 | dev_stats->tx_bytes = drvr_stats(adapter)->be_tx_bytes;
(u64) port_stats->rx_bytes_lsd;
dev_stats->tx_bytes = (u64) port_stats->tx_bytes_msd << 32 |
(u64) port_stats->tx_bytes_lsd;
/* bad pkts received */ /* bad pkts received */
dev_stats->rx_errors = port_stats->rx_crc_errors + dev_stats->rx_errors = port_stats->rx_crc_errors +
...@@ -322,12 +319,13 @@ static void be_tx_rate_update(struct be_adapter *adapter) ...@@ -322,12 +319,13 @@ static void be_tx_rate_update(struct be_adapter *adapter)
} }
static void be_tx_stats_update(struct be_adapter *adapter, static void be_tx_stats_update(struct be_adapter *adapter,
u32 wrb_cnt, u32 copied, bool stopped) u32 wrb_cnt, u32 copied, u32 gso_segs, bool stopped)
{ {
struct be_drvr_stats *stats = drvr_stats(adapter); struct be_drvr_stats *stats = drvr_stats(adapter);
stats->be_tx_reqs++; stats->be_tx_reqs++;
stats->be_tx_wrbs += wrb_cnt; stats->be_tx_wrbs += wrb_cnt;
stats->be_tx_bytes += copied; stats->be_tx_bytes += copied;
stats->be_tx_pkts += (gso_segs ? gso_segs : 1);
if (stopped) if (stopped)
stats->be_tx_stops++; stats->be_tx_stops++;
} }
...@@ -472,7 +470,8 @@ static netdev_tx_t be_xmit(struct sk_buff *skb, ...@@ -472,7 +470,8 @@ static netdev_tx_t be_xmit(struct sk_buff *skb,
be_txq_notify(adapter, txq->id, wrb_cnt); be_txq_notify(adapter, txq->id, wrb_cnt);
be_tx_stats_update(adapter, wrb_cnt, copied, stopped); be_tx_stats_update(adapter, wrb_cnt, copied,
skb_shinfo(skb)->gso_segs, stopped);
} else { } else {
txq->head = start; txq->head = start;
dev_kfree_skb_any(skb); dev_kfree_skb_any(skb);
...@@ -619,6 +618,7 @@ static void be_rx_stats_update(struct be_adapter *adapter, ...@@ -619,6 +618,7 @@ static void be_rx_stats_update(struct be_adapter *adapter,
stats->be_rx_compl++; stats->be_rx_compl++;
stats->be_rx_frags += numfrags; stats->be_rx_frags += numfrags;
stats->be_rx_bytes += pktsize; stats->be_rx_bytes += pktsize;
stats->be_rx_pkts++;
} }
static inline bool do_pkt_csum(struct be_eth_rx_compl *rxcp, bool cso) static inline bool do_pkt_csum(struct be_eth_rx_compl *rxcp, bool cso)
......
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