be2net: Fix to use 32-bit stats to report rx_drops_no_fragment
Only BE devices provide 16-bit counter for rx_drops_no_fragment. All other devices provide a 32-bit counter for this stat. Use the 32-bit value where available. Signed-off-by: Ajit Khaparde <ajit.khaparde@emulex.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
bbdc42f814
commit
a6c578ef9b
@@ -471,11 +471,26 @@ static void accumulate_16bit_val(u32 *acc, u16 val)
|
|||||||
ACCESS_ONCE(*acc) = newacc;
|
ACCESS_ONCE(*acc) = newacc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void populate_erx_stats(struct be_adapter *adapter,
|
||||||
|
struct be_rx_obj *rxo,
|
||||||
|
u32 erx_stat)
|
||||||
|
{
|
||||||
|
if (!BEx_chip(adapter))
|
||||||
|
rx_stats(rxo)->rx_drops_no_frags = erx_stat;
|
||||||
|
else
|
||||||
|
/* below erx HW counter can actually wrap around after
|
||||||
|
* 65535. Driver accumulates a 32-bit value
|
||||||
|
*/
|
||||||
|
accumulate_16bit_val(&rx_stats(rxo)->rx_drops_no_frags,
|
||||||
|
(u16)erx_stat);
|
||||||
|
}
|
||||||
|
|
||||||
void be_parse_stats(struct be_adapter *adapter)
|
void be_parse_stats(struct be_adapter *adapter)
|
||||||
{
|
{
|
||||||
struct be_erx_stats_v1 *erx = be_erx_stats_from_cmd(adapter);
|
struct be_erx_stats_v1 *erx = be_erx_stats_from_cmd(adapter);
|
||||||
struct be_rx_obj *rxo;
|
struct be_rx_obj *rxo;
|
||||||
int i;
|
int i;
|
||||||
|
u32 erx_stat;
|
||||||
|
|
||||||
if (lancer_chip(adapter)) {
|
if (lancer_chip(adapter)) {
|
||||||
populate_lancer_stats(adapter);
|
populate_lancer_stats(adapter);
|
||||||
@@ -488,12 +503,8 @@ void be_parse_stats(struct be_adapter *adapter)
|
|||||||
|
|
||||||
/* as erx_v1 is longer than v0, ok to use v1 for v0 access */
|
/* as erx_v1 is longer than v0, ok to use v1 for v0 access */
|
||||||
for_all_rx_queues(adapter, rxo, i) {
|
for_all_rx_queues(adapter, rxo, i) {
|
||||||
/* below erx HW counter can actually wrap around after
|
erx_stat = erx->rx_drops_no_fragments[rxo->q.id];
|
||||||
* 65535. Driver accumulates a 32-bit value
|
populate_erx_stats(adapter, rxo, erx_stat);
|
||||||
*/
|
|
||||||
accumulate_16bit_val(&rx_stats(rxo)->rx_drops_no_frags,
|
|
||||||
(u16)erx->rx_drops_no_fragments \
|
|
||||||
[rxo->q.id]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user