mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-04 01:24:12 +08:00
qlcnic: fix eswitch stats
Some of the counters are not implemented in fw. Fw return NOT AVAILABLE VALUE as (0xffffffffffffffff). Adding these counters, result in invalid value. Signed-off-by: Amit Kumar Salecha <amit.salecha@qlogic.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
31dee692e2
commit
ef1828058b
@ -1169,6 +1169,18 @@ struct qlcnic_esw_func_cfg {
|
||||
#define QLCNIC_STATS_ESWITCH 2
|
||||
#define QLCNIC_QUERY_RX_COUNTER 0
|
||||
#define QLCNIC_QUERY_TX_COUNTER 1
|
||||
#define QLCNIC_ESW_STATS_NOT_AVAIL 0xffffffffffffffffULL
|
||||
|
||||
#define QLCNIC_ADD_ESW_STATS(VAL1, VAL2)\
|
||||
do { \
|
||||
if (((VAL1) == QLCNIC_ESW_STATS_NOT_AVAIL) && \
|
||||
((VAL2) != QLCNIC_ESW_STATS_NOT_AVAIL)) \
|
||||
(VAL1) = (VAL2); \
|
||||
else if (((VAL1) != QLCNIC_ESW_STATS_NOT_AVAIL) && \
|
||||
((VAL2) != QLCNIC_ESW_STATS_NOT_AVAIL)) \
|
||||
(VAL1) += (VAL2); \
|
||||
} while (0)
|
||||
|
||||
struct __qlcnic_esw_statistics {
|
||||
__le16 context_id;
|
||||
__le16 version;
|
||||
|
@ -1016,7 +1016,14 @@ int qlcnic_get_eswitch_stats(struct qlcnic_adapter *adapter, const u8 eswitch,
|
||||
if (adapter->npars == NULL)
|
||||
return -EIO;
|
||||
|
||||
memset(esw_stats, 0, sizeof(struct __qlcnic_esw_statistics));
|
||||
memset(esw_stats, 0, sizeof(u64));
|
||||
esw_stats->unicast_frames = QLCNIC_ESW_STATS_NOT_AVAIL;
|
||||
esw_stats->multicast_frames = QLCNIC_ESW_STATS_NOT_AVAIL;
|
||||
esw_stats->broadcast_frames = QLCNIC_ESW_STATS_NOT_AVAIL;
|
||||
esw_stats->dropped_frames = QLCNIC_ESW_STATS_NOT_AVAIL;
|
||||
esw_stats->errors = QLCNIC_ESW_STATS_NOT_AVAIL;
|
||||
esw_stats->local_frames = QLCNIC_ESW_STATS_NOT_AVAIL;
|
||||
esw_stats->numbytes = QLCNIC_ESW_STATS_NOT_AVAIL;
|
||||
esw_stats->context_id = eswitch;
|
||||
|
||||
for (i = 0; i < QLCNIC_MAX_PCI_FUNC; i++) {
|
||||
@ -1029,14 +1036,20 @@ int qlcnic_get_eswitch_stats(struct qlcnic_adapter *adapter, const u8 eswitch,
|
||||
|
||||
esw_stats->size = port_stats.size;
|
||||
esw_stats->version = port_stats.version;
|
||||
esw_stats->unicast_frames += port_stats.unicast_frames;
|
||||
esw_stats->multicast_frames += port_stats.multicast_frames;
|
||||
esw_stats->broadcast_frames += port_stats.broadcast_frames;
|
||||
esw_stats->dropped_frames += port_stats.dropped_frames;
|
||||
esw_stats->errors += port_stats.errors;
|
||||
esw_stats->local_frames += port_stats.local_frames;
|
||||
esw_stats->numbytes += port_stats.numbytes;
|
||||
|
||||
QLCNIC_ADD_ESW_STATS(esw_stats->unicast_frames,
|
||||
port_stats.unicast_frames);
|
||||
QLCNIC_ADD_ESW_STATS(esw_stats->multicast_frames,
|
||||
port_stats.multicast_frames);
|
||||
QLCNIC_ADD_ESW_STATS(esw_stats->broadcast_frames,
|
||||
port_stats.broadcast_frames);
|
||||
QLCNIC_ADD_ESW_STATS(esw_stats->dropped_frames,
|
||||
port_stats.dropped_frames);
|
||||
QLCNIC_ADD_ESW_STATS(esw_stats->errors,
|
||||
port_stats.errors);
|
||||
QLCNIC_ADD_ESW_STATS(esw_stats->local_frames,
|
||||
port_stats.local_frames);
|
||||
QLCNIC_ADD_ESW_STATS(esw_stats->numbytes,
|
||||
port_stats.numbytes);
|
||||
ret = 0;
|
||||
}
|
||||
return ret;
|
||||
|
Loading…
Reference in New Issue
Block a user