net/sfc: simplify getting xstats count
authorIvan Ilchenko <ivan.ilchenko@oktetlabs.ru>
Fri, 23 Jul 2021 13:15:12 +0000 (16:15 +0300)
committerThomas Monjalon <thomas@monjalon.net>
Fri, 23 Jul 2021 21:26:45 +0000 (23:26 +0200)
There is no point to recalculate number of available xstats on
each request. The number is calculated once on device start
and may be returned on subsequent calls.

Signed-off-by: Ivan Ilchenko <ivan.ilchenko@oktetlabs.ru>
Signed-off-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
Reviewed-by: Andy Moreton <amoreton@xilinx.com>
drivers/net/sfc/sfc_ethdev.c

index bbc2272..f0567a7 100644 (file)
@@ -733,6 +733,11 @@ sfc_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
 
        sfc_adapter_lock(sa);
 
+       if (unlikely(xstats == NULL)) {
+               nstats = port->mac_stats_nb_supported;
+               goto unlock;
+       }
+
        rc = sfc_port_update_mac_stats(sa, B_FALSE);
        if (rc != 0) {
                SFC_ASSERT(rc > 0);
@@ -744,7 +749,7 @@ sfc_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
 
        for (i = 0; i < EFX_MAC_NSTATS; ++i) {
                if (EFX_MAC_STAT_SUPPORTED(port->mac_stats_mask, i)) {
-                       if (xstats != NULL && nstats < (int)xstats_count) {
+                       if (nstats < (int)xstats_count) {
                                xstats[nstats].id = nstats;
                                xstats[nstats].value = mac_stats[i];
                        }
@@ -768,9 +773,16 @@ sfc_xstats_get_names(struct rte_eth_dev *dev,
        unsigned int i;
        unsigned int nstats = 0;
 
+       if (unlikely(xstats_names == NULL)) {
+               sfc_adapter_lock(sa);
+               nstats = port->mac_stats_nb_supported;
+               sfc_adapter_unlock(sa);
+               return nstats;
+       }
+
        for (i = 0; i < EFX_MAC_NSTATS; ++i) {
                if (EFX_MAC_STAT_SUPPORTED(port->mac_stats_mask, i)) {
-                       if (xstats_names != NULL && nstats < xstats_count)
+                       if (nstats < xstats_count)
                                strlcpy(xstats_names[nstats].name,
                                        efx_mac_stat_name(sa->nic, i),
                                        sizeof(xstats_names[0].name));