Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 150498
b: refs/heads/master
c: 8c0ab70
h: refs/heads/master
v: v3
  • Loading branch information
Jesper Dangaard Brouer authored and David S. Miller committed May 27, 2009
1 parent 88f8ab3 commit 6563c44
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 11 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 3c514ce2f9ae20c06fb17c7ccff40cad1516cc41
refs/heads/master: 8c0ab70ab9cc849af59ef6592bd652a938b21c79
13 changes: 10 additions & 3 deletions trunk/drivers/net/igb/igb.h
Original file line number Diff line number Diff line change
Expand Up @@ -137,11 +137,17 @@ struct igb_buffer {
};
};

struct igb_queue_stats {
struct igb_tx_queue_stats {
u64 packets;
u64 bytes;
};

struct igb_rx_queue_stats {
u64 packets;
u64 bytes;
u64 drops;
};

struct igb_ring {
struct igb_adapter *adapter; /* backlink */
void *desc; /* descriptor ring memory */
Expand All @@ -167,12 +173,13 @@ struct igb_ring {
union {
/* TX */
struct {
struct igb_queue_stats tx_stats;
struct igb_tx_queue_stats tx_stats;
bool detect_tx_hung;
};
/* RX */
struct {
struct igb_queue_stats rx_stats;
struct igb_rx_queue_stats rx_stats;
u64 rx_queue_drops;
struct napi_struct napi;
int set_itr;
struct igb_ring *buddy;
Expand Down
16 changes: 10 additions & 6 deletions trunk/drivers/net/igb/igb_ethtool.c
Original file line number Diff line number Diff line change
Expand Up @@ -96,9 +96,10 @@ static const struct igb_stats igb_gstrings_stats[] = {
};

#define IGB_QUEUE_STATS_LEN \
((((struct igb_adapter *)netdev_priv(netdev))->num_rx_queues + \
((struct igb_adapter *)netdev_priv(netdev))->num_tx_queues) * \
(sizeof(struct igb_queue_stats) / sizeof(u64)))
(((((struct igb_adapter *)netdev_priv(netdev))->num_rx_queues)* \
(sizeof(struct igb_rx_queue_stats) / sizeof(u64))) + \
((((struct igb_adapter *)netdev_priv(netdev))->num_tx_queues) * \
(sizeof(struct igb_tx_queue_stats) / sizeof(u64))))
#define IGB_GLOBAL_STATS_LEN \
sizeof(igb_gstrings_stats) / sizeof(struct igb_stats)
#define IGB_STATS_LEN (IGB_GLOBAL_STATS_LEN + IGB_QUEUE_STATS_LEN)
Expand Down Expand Up @@ -1960,7 +1961,8 @@ static void igb_get_ethtool_stats(struct net_device *netdev,
{
struct igb_adapter *adapter = netdev_priv(netdev);
u64 *queue_stat;
int stat_count = sizeof(struct igb_queue_stats) / sizeof(u64);
int stat_count_tx = sizeof(struct igb_tx_queue_stats) / sizeof(u64);
int stat_count_rx = sizeof(struct igb_rx_queue_stats) / sizeof(u64);
int j;
int i;

Expand All @@ -1973,14 +1975,14 @@ static void igb_get_ethtool_stats(struct net_device *netdev,
for (j = 0; j < adapter->num_tx_queues; j++) {
int k;
queue_stat = (u64 *)&adapter->tx_ring[j].tx_stats;
for (k = 0; k < stat_count; k++)
for (k = 0; k < stat_count_tx; k++)
data[i + k] = queue_stat[k];
i += k;
}
for (j = 0; j < adapter->num_rx_queues; j++) {
int k;
queue_stat = (u64 *)&adapter->rx_ring[j].rx_stats;
for (k = 0; k < stat_count; k++)
for (k = 0; k < stat_count_rx; k++)
data[i + k] = queue_stat[k];
i += k;
}
Expand Down Expand Up @@ -2014,6 +2016,8 @@ static void igb_get_strings(struct net_device *netdev, u32 stringset, u8 *data)
p += ETH_GSTRING_LEN;
sprintf(p, "rx_queue_%u_bytes", i);
p += ETH_GSTRING_LEN;
sprintf(p, "rx_queue_%u_drops", i);
p += ETH_GSTRING_LEN;
}
/* BUG_ON(p - data != IGB_STATS_LEN * ETH_GSTRING_LEN); */
break;
Expand Down
19 changes: 18 additions & 1 deletion trunk/drivers/net/igb/igb_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -3588,8 +3588,25 @@ void igb_update_stats(struct igb_adapter *adapter)

/* Rx Errors */

if (hw->mac.type != e1000_82575) {
u32 rqdpc_tmp;
int i;
/* Read out drops stats per RX queue. Notice RQDPC (Receive
* Queue Drop Packet Count) stats only gets incremented, if
* the DROP_EN but it set (in the SRRCTL register for that
* queue). If DROP_EN bit is NOT set, then the some what
* equivalent count is stored in RNBC (not per queue basis).
* Also note the drop count is due to lack of available
* descriptors.
*/
for (i = 0; i < adapter->num_rx_queues; i++) {
rqdpc_tmp = rd32(E1000_RQDPC(i)) & 0xFFF;
adapter->rx_ring[i].rx_stats.drops += rqdpc_tmp;
}
}

/* RLEC on some newer hardware can be incorrect so build
* our own version based on RUC and ROC */
* our own version based on RUC and ROC */
adapter->net_stats.rx_errors = adapter->stats.rxerrc +
adapter->stats.crcerrs + adapter->stats.algnerrc +
adapter->stats.ruc + adapter->stats.roc +
Expand Down

0 comments on commit 6563c44

Please sign in to comment.