bnxt_en: Fix Priority Bytes and Packets counters in ethtool -S.
[ Upstream commita24ec3220f
] There is an indexing bug in determining these ethtool priority counters. Instead of using the queue ID to index, we need to normalize by modulo 10 to get the index. This index is then used to obtain the proper CoS queue counter. Rename bp->pri2cos to bp->pri2cos_idx to make this more clear. Fixes:e37fed7903
("bnxt_en: Add ethtool -S priority counters.") Signed-off-by: Michael Chan <michael.chan@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
53d0bf064c
commit
2ac37a5311
|
@ -7387,14 +7387,22 @@ static int bnxt_hwrm_port_qstats_ext(struct bnxt *bp)
|
|||
pri2cos = &resp2->pri0_cos_queue_id;
|
||||
for (i = 0; i < 8; i++) {
|
||||
u8 queue_id = pri2cos[i];
|
||||
u8 queue_idx;
|
||||
|
||||
/* Per port queue IDs start from 0, 10, 20, etc */
|
||||
queue_idx = queue_id % 10;
|
||||
if (queue_idx > BNXT_MAX_QUEUE) {
|
||||
bp->pri2cos_valid = false;
|
||||
goto qstats_done;
|
||||
}
|
||||
for (j = 0; j < bp->max_q; j++) {
|
||||
if (bp->q_ids[j] == queue_id)
|
||||
bp->pri2cos[i] = j;
|
||||
bp->pri2cos_idx[i] = queue_idx;
|
||||
}
|
||||
}
|
||||
bp->pri2cos_valid = 1;
|
||||
}
|
||||
qstats_done:
|
||||
mutex_unlock(&bp->hwrm_cmd_lock);
|
||||
return rc;
|
||||
}
|
||||
|
|
|
@ -1688,7 +1688,7 @@ struct bnxt {
|
|||
u16 fw_rx_stats_ext_size;
|
||||
u16 fw_tx_stats_ext_size;
|
||||
u16 hw_ring_stats_size;
|
||||
u8 pri2cos[8];
|
||||
u8 pri2cos_idx[8];
|
||||
u8 pri2cos_valid;
|
||||
|
||||
u16 hwrm_max_req_len;
|
||||
|
|
|
@ -589,25 +589,25 @@ skip_ring_stats:
|
|||
if (bp->pri2cos_valid) {
|
||||
for (i = 0; i < 8; i++, j++) {
|
||||
long n = bnxt_rx_bytes_pri_arr[i].base_off +
|
||||
bp->pri2cos[i];
|
||||
bp->pri2cos_idx[i];
|
||||
|
||||
buf[j] = le64_to_cpu(*(rx_port_stats_ext + n));
|
||||
}
|
||||
for (i = 0; i < 8; i++, j++) {
|
||||
long n = bnxt_rx_pkts_pri_arr[i].base_off +
|
||||
bp->pri2cos[i];
|
||||
bp->pri2cos_idx[i];
|
||||
|
||||
buf[j] = le64_to_cpu(*(rx_port_stats_ext + n));
|
||||
}
|
||||
for (i = 0; i < 8; i++, j++) {
|
||||
long n = bnxt_tx_bytes_pri_arr[i].base_off +
|
||||
bp->pri2cos[i];
|
||||
bp->pri2cos_idx[i];
|
||||
|
||||
buf[j] = le64_to_cpu(*(tx_port_stats_ext + n));
|
||||
}
|
||||
for (i = 0; i < 8; i++, j++) {
|
||||
long n = bnxt_tx_pkts_pri_arr[i].base_off +
|
||||
bp->pri2cos[i];
|
||||
bp->pri2cos_idx[i];
|
||||
|
||||
buf[j] = le64_to_cpu(*(tx_port_stats_ext + n));
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue