bnx2x: fixed ethtool statistics for MF modes
Previosuly, in MF modes `ethtool -S' lacked some of the statistics which appeared in non-MF modes. This has been fixed. Signed-off-by: Yuval Mintz <yuvalmin@broadcom.com> Signed-off-by: Eilon Greenstein <eilong@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
460a25cdae
Коммит
d5e836329b
|
@ -2121,18 +2121,16 @@ static int bnx2x_get_sset_count(struct net_device *dev, int stringset)
|
|||
case ETH_SS_STATS:
|
||||
if (is_multi(bp)) {
|
||||
num_stats = bnx2x_num_stat_queues(bp) *
|
||||
BNX2X_NUM_Q_STATS;
|
||||
if (!IS_MF_MODE_STAT(bp))
|
||||
num_stats += BNX2X_NUM_STATS;
|
||||
} else {
|
||||
if (IS_MF_MODE_STAT(bp)) {
|
||||
num_stats = 0;
|
||||
for (i = 0; i < BNX2X_NUM_STATS; i++)
|
||||
if (IS_FUNC_STAT(i))
|
||||
num_stats++;
|
||||
} else
|
||||
num_stats = BNX2X_NUM_STATS;
|
||||
}
|
||||
BNX2X_NUM_Q_STATS;
|
||||
} else
|
||||
num_stats = 0;
|
||||
if (IS_MF_MODE_STAT(bp)) {
|
||||
for (i = 0; i < BNX2X_NUM_STATS; i++)
|
||||
if (IS_FUNC_STAT(i))
|
||||
num_stats++;
|
||||
} else
|
||||
num_stats += BNX2X_NUM_STATS;
|
||||
|
||||
return num_stats;
|
||||
|
||||
case ETH_SS_TEST:
|
||||
|
@ -2151,8 +2149,8 @@ static void bnx2x_get_strings(struct net_device *dev, u32 stringset, u8 *buf)
|
|||
|
||||
switch (stringset) {
|
||||
case ETH_SS_STATS:
|
||||
k = 0;
|
||||
if (is_multi(bp)) {
|
||||
k = 0;
|
||||
for_each_eth_queue(bp, i) {
|
||||
memset(queue_name, 0, sizeof(queue_name));
|
||||
sprintf(queue_name, "%d", i);
|
||||
|
@ -2163,20 +2161,17 @@ static void bnx2x_get_strings(struct net_device *dev, u32 stringset, u8 *buf)
|
|||
queue_name);
|
||||
k += BNX2X_NUM_Q_STATS;
|
||||
}
|
||||
if (IS_MF_MODE_STAT(bp))
|
||||
break;
|
||||
for (j = 0; j < BNX2X_NUM_STATS; j++)
|
||||
strcpy(buf + (k + j)*ETH_GSTRING_LEN,
|
||||
bnx2x_stats_arr[j].string);
|
||||
} else {
|
||||
for (i = 0, j = 0; i < BNX2X_NUM_STATS; i++) {
|
||||
if (IS_MF_MODE_STAT(bp) && IS_PORT_STAT(i))
|
||||
continue;
|
||||
strcpy(buf + j*ETH_GSTRING_LEN,
|
||||
bnx2x_stats_arr[i].string);
|
||||
j++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (i = 0, j = 0; i < BNX2X_NUM_STATS; i++) {
|
||||
if (IS_MF_MODE_STAT(bp) && IS_PORT_STAT(i))
|
||||
continue;
|
||||
strcpy(buf + (k + j)*ETH_GSTRING_LEN,
|
||||
bnx2x_stats_arr[i].string);
|
||||
j++;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case ETH_SS_TEST:
|
||||
|
@ -2190,10 +2185,9 @@ static void bnx2x_get_ethtool_stats(struct net_device *dev,
|
|||
{
|
||||
struct bnx2x *bp = netdev_priv(dev);
|
||||
u32 *hw_stats, *offset;
|
||||
int i, j, k;
|
||||
int i, j, k = 0;
|
||||
|
||||
if (is_multi(bp)) {
|
||||
k = 0;
|
||||
for_each_eth_queue(bp, i) {
|
||||
hw_stats = (u32 *)&bp->fp[i].eth_q_stats;
|
||||
for (j = 0; j < BNX2X_NUM_Q_STATS; j++) {
|
||||
|
@ -2214,46 +2208,28 @@ static void bnx2x_get_ethtool_stats(struct net_device *dev,
|
|||
}
|
||||
k += BNX2X_NUM_Q_STATS;
|
||||
}
|
||||
if (IS_MF_MODE_STAT(bp))
|
||||
return;
|
||||
hw_stats = (u32 *)&bp->eth_stats;
|
||||
for (j = 0; j < BNX2X_NUM_STATS; j++) {
|
||||
if (bnx2x_stats_arr[j].size == 0) {
|
||||
/* skip this counter */
|
||||
buf[k + j] = 0;
|
||||
continue;
|
||||
}
|
||||
offset = (hw_stats + bnx2x_stats_arr[j].offset);
|
||||
if (bnx2x_stats_arr[j].size == 4) {
|
||||
/* 4-byte counter */
|
||||
buf[k + j] = (u64) *offset;
|
||||
continue;
|
||||
}
|
||||
/* 8-byte counter */
|
||||
buf[k + j] = HILO_U64(*offset, *(offset + 1));
|
||||
}
|
||||
} else {
|
||||
hw_stats = (u32 *)&bp->eth_stats;
|
||||
for (i = 0, j = 0; i < BNX2X_NUM_STATS; i++) {
|
||||
if (IS_MF_MODE_STAT(bp) && IS_PORT_STAT(i))
|
||||
continue;
|
||||
if (bnx2x_stats_arr[i].size == 0) {
|
||||
/* skip this counter */
|
||||
buf[j] = 0;
|
||||
j++;
|
||||
continue;
|
||||
}
|
||||
offset = (hw_stats + bnx2x_stats_arr[i].offset);
|
||||
if (bnx2x_stats_arr[i].size == 4) {
|
||||
/* 4-byte counter */
|
||||
buf[j] = (u64) *offset;
|
||||
j++;
|
||||
continue;
|
||||
}
|
||||
/* 8-byte counter */
|
||||
buf[j] = HILO_U64(*offset, *(offset + 1));
|
||||
}
|
||||
|
||||
hw_stats = (u32 *)&bp->eth_stats;
|
||||
for (i = 0, j = 0; i < BNX2X_NUM_STATS; i++) {
|
||||
if (IS_MF_MODE_STAT(bp) && IS_PORT_STAT(i))
|
||||
continue;
|
||||
if (bnx2x_stats_arr[i].size == 0) {
|
||||
/* skip this counter */
|
||||
buf[k + j] = 0;
|
||||
j++;
|
||||
continue;
|
||||
}
|
||||
offset = (hw_stats + bnx2x_stats_arr[i].offset);
|
||||
if (bnx2x_stats_arr[i].size == 4) {
|
||||
/* 4-byte counter */
|
||||
buf[k + j] = (u64) *offset;
|
||||
j++;
|
||||
continue;
|
||||
}
|
||||
/* 8-byte counter */
|
||||
buf[k + j] = HILO_U64(*offset, *(offset + 1));
|
||||
j++;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче