Commit 5d8d84e9 authored by Igor Russkikh's avatar Igor Russkikh Committed by David S. Miller

net: aquantia: Add queue restarts stats counter

Queue stat strings are cleaned up, duplicate stat name strings removed,
queue restarts counter added
Signed-off-by: default avatarPavel Belous <pavel.belous@aquantia.com>
Signed-off-by: default avatarIgor Russkikh <igor.russkikh@aquantia.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 65e665e6
...@@ -56,10 +56,6 @@ aq_ethtool_set_link_ksettings(struct net_device *ndev, ...@@ -56,10 +56,6 @@ aq_ethtool_set_link_ksettings(struct net_device *ndev,
return aq_nic_set_link_ksettings(aq_nic, cmd); return aq_nic_set_link_ksettings(aq_nic, cmd);
} }
/* there "5U" is number of queue[#] stats lines (InPackets+...+InErrors) */
static const unsigned int aq_ethtool_stat_queue_lines = 5U;
static const unsigned int aq_ethtool_stat_queue_chars =
5U * ETH_GSTRING_LEN;
static const char aq_ethtool_stat_names[][ETH_GSTRING_LEN] = { static const char aq_ethtool_stat_names[][ETH_GSTRING_LEN] = {
"InPackets", "InPackets",
"InUCast", "InUCast",
...@@ -83,56 +79,26 @@ static const char aq_ethtool_stat_names[][ETH_GSTRING_LEN] = { ...@@ -83,56 +79,26 @@ static const char aq_ethtool_stat_names[][ETH_GSTRING_LEN] = {
"InOctetsDma", "InOctetsDma",
"OutOctetsDma", "OutOctetsDma",
"InDroppedDma", "InDroppedDma",
"Queue[0] InPackets", };
"Queue[0] OutPackets",
"Queue[0] InJumboPackets", static const char aq_ethtool_queue_stat_names[][ETH_GSTRING_LEN] = {
"Queue[0] InLroPackets", "Queue[%d] InPackets",
"Queue[0] InErrors", "Queue[%d] OutPackets",
"Queue[1] InPackets", "Queue[%d] Restarts",
"Queue[1] OutPackets", "Queue[%d] InJumboPackets",
"Queue[1] InJumboPackets", "Queue[%d] InLroPackets",
"Queue[1] InLroPackets", "Queue[%d] InErrors",
"Queue[1] InErrors",
"Queue[2] InPackets",
"Queue[2] OutPackets",
"Queue[2] InJumboPackets",
"Queue[2] InLroPackets",
"Queue[2] InErrors",
"Queue[3] InPackets",
"Queue[3] OutPackets",
"Queue[3] InJumboPackets",
"Queue[3] InLroPackets",
"Queue[3] InErrors",
"Queue[4] InPackets",
"Queue[4] OutPackets",
"Queue[4] InJumboPackets",
"Queue[4] InLroPackets",
"Queue[4] InErrors",
"Queue[5] InPackets",
"Queue[5] OutPackets",
"Queue[5] InJumboPackets",
"Queue[5] InLroPackets",
"Queue[5] InErrors",
"Queue[6] InPackets",
"Queue[6] OutPackets",
"Queue[6] InJumboPackets",
"Queue[6] InLroPackets",
"Queue[6] InErrors",
"Queue[7] InPackets",
"Queue[7] OutPackets",
"Queue[7] InJumboPackets",
"Queue[7] InLroPackets",
"Queue[7] InErrors",
}; };
static void aq_ethtool_stats(struct net_device *ndev, static void aq_ethtool_stats(struct net_device *ndev,
struct ethtool_stats *stats, u64 *data) struct ethtool_stats *stats, u64 *data)
{ {
struct aq_nic_s *aq_nic = netdev_priv(ndev); struct aq_nic_s *aq_nic = netdev_priv(ndev);
struct aq_nic_cfg_s *cfg = aq_nic_get_cfg(aq_nic);
/* ASSERT: Need add lines to aq_ethtool_stat_names if AQ_CFG_VECS_MAX > 8 */ memset(data, 0, (ARRAY_SIZE(aq_ethtool_stat_names) +
BUILD_BUG_ON(AQ_CFG_VECS_MAX > 8); ARRAY_SIZE(aq_ethtool_queue_stat_names) *
memset(data, 0, ARRAY_SIZE(aq_ethtool_stat_names) * sizeof(u64)); cfg->vecs) * sizeof(u64));
aq_nic_get_stats(aq_nic, data); aq_nic_get_stats(aq_nic, data);
} }
...@@ -154,8 +120,8 @@ static void aq_ethtool_get_drvinfo(struct net_device *ndev, ...@@ -154,8 +120,8 @@ static void aq_ethtool_get_drvinfo(struct net_device *ndev,
strlcpy(drvinfo->bus_info, pdev ? pci_name(pdev) : "", strlcpy(drvinfo->bus_info, pdev ? pci_name(pdev) : "",
sizeof(drvinfo->bus_info)); sizeof(drvinfo->bus_info));
drvinfo->n_stats = ARRAY_SIZE(aq_ethtool_stat_names) - drvinfo->n_stats = ARRAY_SIZE(aq_ethtool_stat_names) +
(AQ_CFG_VECS_MAX - cfg->vecs) * aq_ethtool_stat_queue_lines; cfg->vecs * ARRAY_SIZE(aq_ethtool_queue_stat_names);
drvinfo->testinfo_len = 0; drvinfo->testinfo_len = 0;
drvinfo->regdump_len = regs_count; drvinfo->regdump_len = regs_count;
drvinfo->eedump_len = 0; drvinfo->eedump_len = 0;
...@@ -164,14 +130,25 @@ static void aq_ethtool_get_drvinfo(struct net_device *ndev, ...@@ -164,14 +130,25 @@ static void aq_ethtool_get_drvinfo(struct net_device *ndev,
static void aq_ethtool_get_strings(struct net_device *ndev, static void aq_ethtool_get_strings(struct net_device *ndev,
u32 stringset, u8 *data) u32 stringset, u8 *data)
{ {
int i, si;
struct aq_nic_s *aq_nic = netdev_priv(ndev); struct aq_nic_s *aq_nic = netdev_priv(ndev);
struct aq_nic_cfg_s *cfg = aq_nic_get_cfg(aq_nic); struct aq_nic_cfg_s *cfg = aq_nic_get_cfg(aq_nic);
u8 *p = data;
if (stringset == ETH_SS_STATS)
memcpy(data, *aq_ethtool_stat_names, if (stringset == ETH_SS_STATS) {
sizeof(aq_ethtool_stat_names) - memcpy(p, *aq_ethtool_stat_names,
(AQ_CFG_VECS_MAX - cfg->vecs) * sizeof(aq_ethtool_stat_names));
aq_ethtool_stat_queue_chars); p = p + sizeof(aq_ethtool_stat_names);
for (i = 0; i < cfg->vecs; i++) {
for (si = 0;
si < ARRAY_SIZE(aq_ethtool_queue_stat_names);
si++) {
snprintf(p, ETH_GSTRING_LEN,
aq_ethtool_queue_stat_names[si], i);
p += ETH_GSTRING_LEN;
}
}
}
} }
static int aq_ethtool_get_sset_count(struct net_device *ndev, int stringset) static int aq_ethtool_get_sset_count(struct net_device *ndev, int stringset)
...@@ -182,9 +159,8 @@ static int aq_ethtool_get_sset_count(struct net_device *ndev, int stringset) ...@@ -182,9 +159,8 @@ static int aq_ethtool_get_sset_count(struct net_device *ndev, int stringset)
switch (stringset) { switch (stringset) {
case ETH_SS_STATS: case ETH_SS_STATS:
ret = ARRAY_SIZE(aq_ethtool_stat_names) - ret = ARRAY_SIZE(aq_ethtool_stat_names) +
(AQ_CFG_VECS_MAX - cfg->vecs) * cfg->vecs * ARRAY_SIZE(aq_ethtool_queue_stat_names);
aq_ethtool_stat_queue_lines;
break; break;
default: default:
ret = -EOPNOTSUPP; ret = -EOPNOTSUPP;
......
...@@ -373,8 +373,11 @@ int aq_vec_get_sw_stats(struct aq_vec_s *self, u64 *data, unsigned int *p_count) ...@@ -373,8 +373,11 @@ int aq_vec_get_sw_stats(struct aq_vec_s *self, u64 *data, unsigned int *p_count)
memset(&stats_tx, 0U, sizeof(struct aq_ring_stats_tx_s)); memset(&stats_tx, 0U, sizeof(struct aq_ring_stats_tx_s));
aq_vec_add_stats(self, &stats_rx, &stats_tx); aq_vec_add_stats(self, &stats_rx, &stats_tx);
/* This data should mimic aq_ethtool_queue_stat_names structure
*/
data[count] += stats_rx.packets; data[count] += stats_rx.packets;
data[++count] += stats_tx.packets; data[++count] += stats_tx.packets;
data[++count] += stats_tx.queue_restarts;
data[++count] += stats_rx.jumbo_packets; data[++count] += stats_rx.jumbo_packets;
data[++count] += stats_rx.lro_packets; data[++count] += stats_rx.lro_packets;
data[++count] += stats_rx.errors; data[++count] += stats_rx.errors;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment