]> git.droids-corp.org - dpdk.git/commitdiff
ethdev: add return value to stats get dev op
authorMatan Azrad <matan@mellanox.com>
Tue, 10 Oct 2017 20:20:18 +0000 (20:20 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Thu, 12 Oct 2017 00:52:49 +0000 (01:52 +0100)
The stats_get dev op API doesn't include return value, so PMD cannot
return an error in case of failure at stats getting process time.

Since PCI devices can be removed and there is a time between the
physical removal to the RMV interrupt, the user may get invalid stats
without any indication.

This patch changes the stats_get API return value to be int instead of
void.

All the net PMDs stats_get dev ops are adjusted by this patch.

Signed-off-by: Matan Azrad <matan@mellanox.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
47 files changed:
doc/guides/rel_notes/release_17_11.rst
drivers/net/af_packet/rte_eth_af_packet.c
drivers/net/ark/ark_ethdev.c
drivers/net/ark/ark_ext.h
drivers/net/ark/ark_global.h
drivers/net/avp/avp_ethdev.c
drivers/net/bnx2x/bnx2x_ethdev.c
drivers/net/bnxt/bnxt_stats.c
drivers/net/bnxt/bnxt_stats.h
drivers/net/bonding/rte_eth_bond_pmd.c
drivers/net/cxgbe/cxgbe_ethdev.c
drivers/net/dpaa/dpaa_ethdev.c
drivers/net/dpaa2/dpaa2_ethdev.c
drivers/net/e1000/em_ethdev.c
drivers/net/e1000/igb_ethdev.c
drivers/net/ena/ena_ethdev.c
drivers/net/enic/enic.h
drivers/net/enic/enic_ethdev.c
drivers/net/enic/enic_main.c
drivers/net/failsafe/failsafe_ops.c
drivers/net/fm10k/fm10k_ethdev.c
drivers/net/i40e/i40e_ethdev.c
drivers/net/i40e/i40e_ethdev_vf.c
drivers/net/ixgbe/ixgbe_ethdev.c
drivers/net/kni/rte_eth_kni.c
drivers/net/liquidio/lio_ethdev.c
drivers/net/mlx4/mlx4.h
drivers/net/mlx4/mlx4_ethdev.c
drivers/net/mlx5/mlx5.h
drivers/net/mlx5/mlx5_stats.c
drivers/net/mrvl/mrvl_ethdev.c
drivers/net/nfp/nfp_net.c
drivers/net/null/rte_eth_null.c
drivers/net/octeontx/octeontx_ethdev.c
drivers/net/pcap/rte_eth_pcap.c
drivers/net/qede/qede_ethdev.c
drivers/net/ring/rte_eth_ring.c
drivers/net/sfc/sfc_ethdev.c
drivers/net/szedata2/rte_eth_szedata2.c
drivers/net/tap/rte_eth_tap.c
drivers/net/thunderx/nicvf_ethdev.c
drivers/net/vhost/rte_eth_vhost.c
drivers/net/virtio/virtio_ethdev.c
drivers/net/vmxnet3/vmxnet3_ethdev.c
lib/librte_ether/rte_ethdev.c
lib/librte_ether/rte_ethdev.h
test/test/virtual_pmd.c

index fad1a190a0cc61823361da61a5e955845d52f70e..63b9869b18629d4e5c7db07d1d228754f81fd85c 100644 (file)
@@ -226,6 +226,12 @@ API Changes
 * ``rte_mem_phy2mch`` was used in Xen dom0 to obtain the physical address;
   remove this API as Xen dom0 support was removed.
 
+* **Add return value to stats_get dev op API**
+
+  The ``stats_get`` dev op API return value has been changed to be int.
+  By this way PMDs can return an error value in case of failure at stats
+  getting process time.
+
 
 ABI Changes
 -----------
index 295b7a7bb06e103a793f7e976e329f155694c48e..46b8250d0e3edac6244c7d356e6f8f1ddef1ea4e 100644 (file)
@@ -331,7 +331,7 @@ eth_dev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
        dev_info->min_rx_bufsize = 0;
 }
 
-static void
+static int
 eth_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *igb_stats)
 {
        unsigned i, imax;
@@ -364,6 +364,7 @@ eth_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *igb_stats)
        igb_stats->opackets = tx_total;
        igb_stats->oerrors = tx_err_total;
        igb_stats->obytes = tx_bytes_total;
+       return 0;
 }
 
 static void
index 0d608460a6936337b633d12d12d939d6d22b2fb1..dae1f3d241099907249c4d51f2291c88c1831a5c 100644 (file)
@@ -65,7 +65,7 @@ static int eth_ark_dev_link_update(struct rte_eth_dev *dev,
                                   int wait_to_complete);
 static int eth_ark_dev_set_link_up(struct rte_eth_dev *dev);
 static int eth_ark_dev_set_link_down(struct rte_eth_dev *dev);
-static void eth_ark_dev_stats_get(struct rte_eth_dev *dev,
+static int eth_ark_dev_stats_get(struct rte_eth_dev *dev,
                                  struct rte_eth_stats *stats);
 static void eth_ark_dev_stats_reset(struct rte_eth_dev *dev);
 static void eth_ark_set_default_mac_addr(struct rte_eth_dev *dev,
@@ -241,7 +241,7 @@ check_for_ext(struct ark_adapter *ark)
                (int (*)(struct rte_eth_dev *, void *))
                dlsym(ark->d_handle, "dev_set_link_down");
        ark->user_ext.stats_get =
-               (void (*)(struct rte_eth_dev *, struct rte_eth_stats *,
+               (int (*)(struct rte_eth_dev *, struct rte_eth_stats *,
                          void *))
                dlsym(ark->d_handle, "stats_get");
        ark->user_ext.stats_reset =
@@ -816,7 +816,7 @@ eth_ark_dev_set_link_down(struct rte_eth_dev *dev)
        return 0;
 }
 
-static void
+static int
 eth_ark_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 {
        uint16_t i;
@@ -835,8 +835,9 @@ eth_ark_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
        for (i = 0; i < dev->data->nb_rx_queues; i++)
                eth_rx_queue_stats_get(dev->data->rx_queues[i], stats);
        if (ark->user_ext.stats_get)
-               ark->user_ext.stats_get(dev, stats,
+               return ark->user_ext.stats_get(dev, stats,
                        ark->user_data[dev->data->port_id]);
+       return 0;
 }
 
 static void
index 63b7a26112e77a62fdc60f81626ed1b4334e7efc..d26c8198b6b52e9ecaa452713a7097f96ac70eda 100644 (file)
@@ -91,7 +91,7 @@ int dev_set_link_up(struct rte_eth_dev *dev,
 int dev_set_link_down(struct rte_eth_dev *dev,
                      void *user_data);
 
-void stats_get(struct rte_eth_dev *dev,
+int stats_get(struct rte_eth_dev *dev,
               struct rte_eth_stats *stats,
               void *user_data);
 
index 2a6375fe1144262a71d06fffa09ebaca27ff17c1..aef2cf73b191b426c993f57e2bf03c4e6015b191 100644 (file)
@@ -97,7 +97,7 @@ struct ark_user_ext {
        int (*link_update)(struct rte_eth_dev *, int wait_to_complete, void *);
        int (*dev_set_link_up)(struct rte_eth_dev *, void *);
        int (*dev_set_link_down)(struct rte_eth_dev *, void *);
-       void (*stats_get)(struct rte_eth_dev *, struct rte_eth_stats *, void *);
+       int (*stats_get)(struct rte_eth_dev *, struct rte_eth_stats *, void *);
        void (*stats_reset)(struct rte_eth_dev *, void *);
        void (*mac_addr_add)(struct rte_eth_dev *,
                                                  struct ether_addr *,
index b5cc955f2b89150cc61d31ffec35370f50308c38..b97a90cead46c1ac7a26f20fc521ba5fb39227d2 100644 (file)
@@ -107,7 +107,7 @@ static uint16_t avp_xmit_pkts(void *tx_queue,
 static void avp_dev_rx_queue_release(void *rxq);
 static void avp_dev_tx_queue_release(void *txq);
 
-static void avp_dev_stats_get(struct rte_eth_dev *dev,
+static int avp_dev_stats_get(struct rte_eth_dev *dev,
                              struct rte_eth_stats *stats);
 static void avp_dev_stats_reset(struct rte_eth_dev *dev);
 
@@ -2241,7 +2241,7 @@ avp_vlan_offload_set(struct rte_eth_dev *eth_dev, int mask)
        }
 }
 
-static void
+static int
 avp_dev_stats_get(struct rte_eth_dev *eth_dev, struct rte_eth_stats *stats)
 {
        struct avp_dev *avp = AVP_DEV_PRIVATE_TO_HW(eth_dev->data->dev_private);
@@ -2274,6 +2274,8 @@ avp_dev_stats_get(struct rte_eth_dev *eth_dev, struct rte_eth_stats *stats)
                        stats->q_errors[i] += txq->errors;
                }
        }
+
+       return 0;
 }
 
 static void
index 6f62a37f1ab91b38e2b83dddab0a2d531a24dc12..95861a06e565d755c3fbb9a447eae714a1858e0b 100644 (file)
@@ -329,7 +329,7 @@ bnx2xvf_dev_link_update(struct rte_eth_dev *dev, __rte_unused int wait_to_comple
        return old_link_status == dev->data->dev_link.link_status ? -1 : 0;
 }
 
-static void
+static int
 bnx2x_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 {
        struct bnx2x_softc *sc = dev->data->dev_private;
@@ -389,6 +389,8 @@ bnx2x_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 
        stats->imissed = brb_drops + brb_truncates +
                         brb_truncate_discard + stats->rx_nombuf;
+
+       return 0;
 }
 
 static int
index 87feac6c150b4a60e46cb6e1c8a5856bac2fef68..fe83d370a7ab217e26319932f6ed107b4dd90c5d 100644 (file)
@@ -228,9 +228,10 @@ void bnxt_free_stats(struct bnxt *bp)
        }
 }
 
-void bnxt_stats_get_op(struct rte_eth_dev *eth_dev,
+int bnxt_stats_get_op(struct rte_eth_dev *eth_dev,
                           struct rte_eth_stats *bnxt_stats)
 {
+       int rc = 0;
        unsigned int i;
        struct bnxt *bp = eth_dev->data->dev_private;
 
@@ -240,19 +241,26 @@ void bnxt_stats_get_op(struct rte_eth_dev *eth_dev,
                struct bnxt_rx_queue *rxq = bp->rx_queues[i];
                struct bnxt_cp_ring_info *cpr = rxq->cp_ring;
 
-               bnxt_hwrm_ctx_qstats(bp, cpr->hw_stats_ctx_id, i,
+               rc = bnxt_hwrm_ctx_qstats(bp, cpr->hw_stats_ctx_id, i,
                                     bnxt_stats, 1);
+               if (unlikely(rc))
+                       return rc;
        }
 
        for (i = 0; i < bp->tx_cp_nr_rings; i++) {
                struct bnxt_tx_queue *txq = bp->tx_queues[i];
                struct bnxt_cp_ring_info *cpr = txq->cp_ring;
 
-               bnxt_hwrm_ctx_qstats(bp, cpr->hw_stats_ctx_id, i,
+               rc = bnxt_hwrm_ctx_qstats(bp, cpr->hw_stats_ctx_id, i,
                                     bnxt_stats, 0);
+               if (unlikely(rc))
+                       return rc;
        }
-       bnxt_hwrm_func_qstats(bp, 0xffff, bnxt_stats);
+       rc = bnxt_hwrm_func_qstats(bp, 0xffff, bnxt_stats);
+       if (unlikely(rc))
+               return rc;
        bnxt_stats->rx_nombuf = rte_atomic64_read(&bp->rx_mbuf_alloc_fail);
+       return rc;
 }
 
 void bnxt_stats_reset_op(struct rte_eth_dev *eth_dev)
index daeb3d9b9648b4332ed4d9d8e7da324d6a6d2d13..51d16f5d364be292f1988f142f6d8ea852d3d39d 100644 (file)
@@ -37,7 +37,7 @@
 #include <rte_ethdev.h>
 
 void bnxt_free_stats(struct bnxt *bp);
-void bnxt_stats_get_op(struct rte_eth_dev *eth_dev,
+int bnxt_stats_get_op(struct rte_eth_dev *eth_dev,
                           struct rte_eth_stats *bnxt_stats);
 void bnxt_stats_reset_op(struct rte_eth_dev *eth_dev);
 int bnxt_dev_xstats_get_names_op(__rte_unused struct rte_eth_dev *eth_dev,
index f0e7871939766c7facdc4c96a8e9ffefb0d4b224..8cbcf6d72ec24988b4aa266f01d9cc43b32c690f 100644 (file)
@@ -2371,7 +2371,7 @@ bond_ethdev_link_update(struct rte_eth_dev *ethdev, int wait_to_complete)
 }
 
 
-static void
+static int
 bond_ethdev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 {
        struct bond_dev_private *internals = dev->data->dev_private;
@@ -2399,6 +2399,8 @@ bond_ethdev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
                }
 
        }
+
+       return 0;
 }
 
 static void
index 7bca45614b029e4af9fc53c102ae07e5883c8904..02b4f629adbf9902067f4432479bb0b2f6ade8b3 100644 (file)
@@ -647,7 +647,7 @@ static void cxgbe_dev_rx_queue_release(void *q)
 /*
  * Get port statistics.
  */
-static void cxgbe_dev_stats_get(struct rte_eth_dev *eth_dev,
+static int cxgbe_dev_stats_get(struct rte_eth_dev *eth_dev,
                                struct rte_eth_stats *eth_stats)
 {
        struct port_info *pi = (struct port_info *)(eth_dev->data->dev_private);
@@ -690,6 +690,7 @@ static void cxgbe_dev_stats_get(struct rte_eth_dev *eth_dev,
                eth_stats->q_obytes[i] = txq->stats.tx_bytes;
                eth_stats->q_errors[i] = txq->stats.mapping_err;
        }
+       return 0;
 }
 
 /*
index 9f33e44ae4ff990ff47c24031f098e83b77dfe0b..551da20485e89d9f6dc1114db7afdd3fa50626ea 100644 (file)
@@ -283,7 +283,7 @@ static int dpaa_eth_link_update(struct rte_eth_dev *dev,
        return 0;
 }
 
-static void dpaa_eth_stats_get(struct rte_eth_dev *dev,
+static int dpaa_eth_stats_get(struct rte_eth_dev *dev,
                               struct rte_eth_stats *stats)
 {
        struct dpaa_if *dpaa_intf = dev->data->dev_private;
@@ -291,6 +291,7 @@ static void dpaa_eth_stats_get(struct rte_eth_dev *dev,
        PMD_INIT_FUNC_TRACE();
 
        fman_if_stats_get(dpaa_intf->fif, stats);
+       return 0;
 }
 
 static void dpaa_eth_stats_reset(struct rte_eth_dev *dev)
index 39c32b3483b420aebea86de26f33e08590de72bb..1ac607cb0b28c9bb16a9a4a0440f9491d898adcb 100644 (file)
@@ -1061,7 +1061,7 @@ dpaa2_dev_set_mac_addr(struct rte_eth_dev *dev,
                        "error: Setting the MAC ADDR failed %d\n", ret);
 }
 static
-void dpaa2_dev_stats_get(struct rte_eth_dev *dev,
+int dpaa2_dev_stats_get(struct rte_eth_dev *dev,
                         struct rte_eth_stats *stats)
 {
        struct dpaa2_dev_priv *priv = dev->data->dev_private;
@@ -1076,12 +1076,12 @@ void dpaa2_dev_stats_get(struct rte_eth_dev *dev,
 
        if (!dpni) {
                RTE_LOG(ERR, PMD, "dpni is NULL\n");
-               return;
+               return -EINVAL;
        }
 
        if (!stats) {
                RTE_LOG(ERR, PMD, "stats is NULL\n");
-               return;
+               return -EINVAL;
        }
 
        /*Get Counters from page_0*/
@@ -1116,11 +1116,11 @@ void dpaa2_dev_stats_get(struct rte_eth_dev *dev,
        stats->oerrors = value.page_2.egress_discarded_frames;
        stats->imissed = value.page_2.ingress_nobuffer_discards;
 
-       return;
+       return 0;
 
 err:
        RTE_LOG(ERR, PMD, "Operation not completed:Error Code = %d\n", retcode);
-       return;
+       return retcode;
 };
 
 static int
index a59947d78d0244ef0be863bdee5bc7b47d5422cd..e7242057a5246083de9cfaffb9c53b29e31aada9 100644 (file)
@@ -72,7 +72,7 @@ static void eth_em_allmulticast_enable(struct rte_eth_dev *dev);
 static void eth_em_allmulticast_disable(struct rte_eth_dev *dev);
 static int eth_em_link_update(struct rte_eth_dev *dev,
                                int wait_to_complete);
-static void eth_em_stats_get(struct rte_eth_dev *dev,
+static int eth_em_stats_get(struct rte_eth_dev *dev,
                                struct rte_eth_stats *rte_stats);
 static void eth_em_stats_reset(struct rte_eth_dev *dev);
 static void eth_em_infos_get(struct rte_eth_dev *dev,
@@ -906,7 +906,7 @@ em_hardware_init(struct e1000_hw *hw)
 }
 
 /* This function is based on em_update_stats_counters() in e1000/if_em.c */
-static void
+static int
 eth_em_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *rte_stats)
 {
        struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);
@@ -1006,7 +1006,7 @@ eth_em_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *rte_stats)
        }
 
        if (rte_stats == NULL)
-               return;
+               return -EINVAL;
 
        /* Rx Errors */
        rte_stats->imissed = stats->mpc;
@@ -1021,6 +1021,7 @@ eth_em_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *rte_stats)
        rte_stats->opackets = stats->gptc;
        rte_stats->ibytes   = stats->gorc;
        rte_stats->obytes   = stats->gotc;
+       return 0;
 }
 
 static void
index 040dd9ff45842204f550ccca6608f4b08584cf24..f3b1d70bd851da493aa135b8051eb9a03872d624 100644 (file)
@@ -112,7 +112,7 @@ static void eth_igb_allmulticast_enable(struct rte_eth_dev *dev);
 static void eth_igb_allmulticast_disable(struct rte_eth_dev *dev);
 static int  eth_igb_link_update(struct rte_eth_dev *dev,
                                int wait_to_complete);
-static void eth_igb_stats_get(struct rte_eth_dev *dev,
+static int eth_igb_stats_get(struct rte_eth_dev *dev,
                                struct rte_eth_stats *rte_stats);
 static int eth_igb_xstats_get(struct rte_eth_dev *dev,
                              struct rte_eth_xstat *xstats, unsigned n);
@@ -188,7 +188,7 @@ static void igbvf_promiscuous_disable(struct rte_eth_dev *dev);
 static void igbvf_allmulticast_enable(struct rte_eth_dev *dev);
 static void igbvf_allmulticast_disable(struct rte_eth_dev *dev);
 static int eth_igbvf_link_update(struct e1000_hw *hw);
-static void eth_igbvf_stats_get(struct rte_eth_dev *dev,
+static int eth_igbvf_stats_get(struct rte_eth_dev *dev,
                                struct rte_eth_stats *rte_stats);
 static int eth_igbvf_xstats_get(struct rte_eth_dev *dev,
                                struct rte_eth_xstat *xstats, unsigned n);
@@ -1830,7 +1830,7 @@ igb_read_stats_registers(struct e1000_hw *hw, struct e1000_hw_stats *stats)
        stats->tsctfc += E1000_READ_REG(hw, E1000_TSCTFC);
 }
 
-static void
+static int
 eth_igb_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *rte_stats)
 {
        struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);
@@ -1840,7 +1840,7 @@ eth_igb_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *rte_stats)
        igb_read_stats_registers(hw, stats);
 
        if (rte_stats == NULL)
-               return;
+               return -EINVAL;
 
        /* Rx Errors */
        rte_stats->imissed = stats->mpc;
@@ -1855,6 +1855,7 @@ eth_igb_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *rte_stats)
        rte_stats->opackets = stats->gptc;
        rte_stats->ibytes   = stats->gorc;
        rte_stats->obytes   = stats->gotc;
+       return 0;
 }
 
 static void
@@ -2095,7 +2096,7 @@ eth_igbvf_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
        return IGBVF_NB_XSTATS;
 }
 
-static void
+static int
 eth_igbvf_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *rte_stats)
 {
        struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);
@@ -2105,12 +2106,13 @@ eth_igbvf_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *rte_stats)
        igbvf_read_stats_registers(hw, hw_stats);
 
        if (rte_stats == NULL)
-               return;
+               return -EINVAL;
 
        rte_stats->ipackets = hw_stats->gprc;
        rte_stats->ibytes = hw_stats->gorc;
        rte_stats->opackets = hw_stats->gptc;
        rte_stats->obytes = hw_stats->gotc;
+       return 0;
 }
 
 static void
index 80ce1f35324875e6bc000d128bc438919a83405f..a62c39875933f7cae36ceccfc19865451a94aa55 100644 (file)
@@ -205,7 +205,7 @@ static void ena_init_rings(struct ena_adapter *adapter);
 static int ena_mtu_set(struct rte_eth_dev *dev, uint16_t mtu);
 static int ena_start(struct rte_eth_dev *dev);
 static void ena_close(struct rte_eth_dev *dev);
-static void ena_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats);
+static int ena_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats);
 static void ena_rx_queue_release_all(struct rte_eth_dev *dev);
 static void ena_tx_queue_release_all(struct rte_eth_dev *dev);
 static void ena_rx_queue_release(void *queue);
@@ -811,7 +811,7 @@ static void ena_stats_restart(struct rte_eth_dev *dev)
        rte_atomic64_init(&adapter->drv_stats->rx_nombuf);
 }
 
-static void ena_stats_get(struct rte_eth_dev *dev,
+static int ena_stats_get(struct rte_eth_dev *dev,
                          struct rte_eth_stats *stats)
 {
        struct ena_admin_basic_stats ena_stats;
@@ -821,13 +821,13 @@ static void ena_stats_get(struct rte_eth_dev *dev,
        int rc;
 
        if (rte_eal_process_type() != RTE_PROC_PRIMARY)
-               return;
+               return -ENOTSUP;
 
        memset(&ena_stats, 0, sizeof(ena_stats));
        rc = ena_com_get_dev_basic_stats(ena_dev, &ena_stats);
        if (unlikely(rc)) {
                RTE_LOG(ERR, PMD, "Could not retrieve statistics from ENA");
-               return;
+               return rc;
        }
 
        /* Set of basic statistics from ENA */
@@ -846,6 +846,7 @@ static void ena_stats_get(struct rte_eth_dev *dev,
        stats->ierrors = rte_atomic64_read(&adapter->drv_stats->ierrors);
        stats->oerrors = rte_atomic64_read(&adapter->drv_stats->oerrors);
        stats->rx_nombuf = rte_atomic64_read(&adapter->drv_stats->rx_nombuf);
+       return 0;
 }
 
 static int ena_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
index 9dc86dfb1b075da3010a9027f163054b51d1567b..e36ec385c318f03d784b6a2e0f2999168d2d1c2c 100644 (file)
@@ -282,7 +282,7 @@ extern int enic_enable(struct enic *enic);
 extern int enic_disable(struct enic *enic);
 extern void enic_remove(struct enic *enic);
 extern int enic_get_link_status(struct enic *enic);
-extern void enic_dev_stats_get(struct enic *enic,
+extern int enic_dev_stats_get(struct enic *enic,
        struct rte_eth_stats *r_stats);
 extern void enic_dev_stats_clear(struct enic *enic);
 extern void enic_add_packet_filter(struct enic *enic);
index 33a3f87e2c8be09ca4af69b35f4cb1ec12a7f4c5..5386b2ae302132025be9db223a5c0fe9ff4f670b 100644 (file)
@@ -468,13 +468,13 @@ static int enicpmd_dev_link_update(struct rte_eth_dev *eth_dev,
        return enic_link_update(enic);
 }
 
-static void enicpmd_dev_stats_get(struct rte_eth_dev *eth_dev,
+static int enicpmd_dev_stats_get(struct rte_eth_dev *eth_dev,
        struct rte_eth_stats *stats)
 {
        struct enic *enic = pmd_priv(eth_dev);
 
        ENICPMD_FUNC_TRACE();
-       enic_dev_stats_get(enic, stats);
+       return enic_dev_stats_get(enic, stats);
 }
 
 static void enicpmd_dev_stats_reset(struct rte_eth_dev *eth_dev)
index cac8b66cf4e38262d77d7e01b82861b277ece02e..5211670630f5c07a0520746aaa68cc671804720b 100644 (file)
@@ -156,16 +156,17 @@ void enic_dev_stats_clear(struct enic *enic)
        enic_clear_soft_stats(enic);
 }
 
-void enic_dev_stats_get(struct enic *enic, struct rte_eth_stats *r_stats)
+int enic_dev_stats_get(struct enic *enic, struct rte_eth_stats *r_stats)
 {
        struct vnic_stats *stats;
        struct enic_soft_stats *soft_stats = &enic->soft_stats;
        int64_t rx_truncated;
        uint64_t rx_packet_errors;
+       int ret = vnic_dev_stats_dump(enic->vdev, &stats);
 
-       if (vnic_dev_stats_dump(enic->vdev, &stats)) {
+       if (ret) {
                dev_err(enic, "Error in getting stats\n");
-               return;
+               return ret;
        }
 
        /* The number of truncated packets can only be calculated by
@@ -191,6 +192,7 @@ void enic_dev_stats_get(struct enic *enic, struct rte_eth_stats *r_stats)
        r_stats->imissed = stats->rx.rx_no_bufs + rx_truncated;
 
        r_stats->rx_nombuf = rte_atomic64_read(&soft_stats->rx_nombuf);
+       return 0;
 }
 
 void enic_del_mac_address(struct enic *enic, int mac_index)
index e0f1b0b7e730360ef3245d42bf1100f716ee001a..d36096587513f9dafd02fdf2d0504386527b824e 100644 (file)
@@ -582,18 +582,25 @@ fs_link_update(struct rte_eth_dev *dev,
        return -1;
 }
 
-static void
+static int
 fs_stats_get(struct rte_eth_dev *dev,
             struct rte_eth_stats *stats)
 {
        struct sub_device *sdev;
        uint8_t i;
+       int ret;
 
        rte_memcpy(stats, &PRIV(dev)->stats_accumulator, sizeof(*stats));
        FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
-               rte_eth_stats_get(PORT_ID(sdev), &sdev->stats_snapshot);
+               ret = rte_eth_stats_get(PORT_ID(sdev), &sdev->stats_snapshot);
+               if (ret) {
+                       ERROR("Operation rte_eth_stats_get failed for sub_device %d with error %d",
+                                 i, ret);
+                       return ret;
+               }
                failsafe_stats_increment(stats, &sdev->stats_snapshot);
        }
+       return 0;
 }
 
 static void
index 15ea2a535b927f59b4562731fa53f37ee7920ca9..2d351c1b486e1b653d7fb56d3e5c6abd47551ec1 100644 (file)
@@ -1346,7 +1346,7 @@ fm10k_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
        return FM10K_NB_XSTATS;
 }
 
-static void
+static int
 fm10k_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 {
        uint64_t ipackets, opackets, ibytes, obytes;
@@ -1376,6 +1376,7 @@ fm10k_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
        stats->opackets = opackets;
        stats->ibytes = ibytes;
        stats->obytes = obytes;
+       return 0;
 }
 
 static void
index 536365d355e623931f30689a66d40bfc99dc2c99..f7dfb9753662cca5dbc07eb8838dc2145739dba1 100644 (file)
@@ -258,7 +258,7 @@ static void i40e_dev_allmulticast_enable(struct rte_eth_dev *dev);
 static void i40e_dev_allmulticast_disable(struct rte_eth_dev *dev);
 static int i40e_dev_set_link_up(struct rte_eth_dev *dev);
 static int i40e_dev_set_link_down(struct rte_eth_dev *dev);
-static void i40e_dev_stats_get(struct rte_eth_dev *dev,
+static int i40e_dev_stats_get(struct rte_eth_dev *dev,
                               struct rte_eth_stats *stats);
 static int i40e_dev_xstats_get(struct rte_eth_dev *dev,
                               struct rte_eth_xstat *xstats, unsigned n);
@@ -2728,7 +2728,7 @@ i40e_read_stats_registers(struct i40e_pf *pf, struct i40e_hw *hw)
 }
 
 /* Get all statistics of a port */
-static void
+static int
 i40e_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 {
        struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private);
@@ -2828,6 +2828,7 @@ i40e_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
                    ns->checksum_error);
        PMD_DRV_LOG(DEBUG, "fdir_match:               %"PRIu64"", ns->fd_sb_match);
        PMD_DRV_LOG(DEBUG, "***************** PF stats end ********************");
+       return 0;
 }
 
 /* Reset the statistics */
index b2e5aa69379aa71213ec67e8d6ed6c1cda3e414c..63d1f7765407faf7dfceb31780f68538c4d79756 100644 (file)
@@ -108,7 +108,7 @@ static void i40evf_dev_info_get(struct rte_eth_dev *dev,
                                struct rte_eth_dev_info *dev_info);
 static int i40evf_dev_link_update(struct rte_eth_dev *dev,
                                  int wait_to_complete);
-static void i40evf_dev_stats_get(struct rte_eth_dev *dev,
+static int i40evf_dev_stats_get(struct rte_eth_dev *dev,
                                struct rte_eth_stats *stats);
 static int i40evf_dev_xstats_get(struct rte_eth_dev *dev,
                                 struct rte_eth_xstat *xstats, unsigned n);
@@ -2232,7 +2232,7 @@ i40evf_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
        };
 }
 
-static void
+static int
 i40evf_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 {
        int ret;
@@ -2255,6 +2255,7 @@ i40evf_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
        } else {
                PMD_DRV_LOG(ERR, "Get statistics failed");
        }
+       return ret;
 }
 
 static void
index a7d7acc65bc8eb30f4f60173796ac90782968b71..d22d7acbd685de3ac5e5da6325f79490294e8bd0 100644 (file)
@@ -176,7 +176,7 @@ static void ixgbe_dev_allmulticast_enable(struct rte_eth_dev *dev);
 static void ixgbe_dev_allmulticast_disable(struct rte_eth_dev *dev);
 static int ixgbe_dev_link_update(struct rte_eth_dev *dev,
                                int wait_to_complete);
-static void ixgbe_dev_stats_get(struct rte_eth_dev *dev,
+static int ixgbe_dev_stats_get(struct rte_eth_dev *dev,
                                struct rte_eth_stats *stats);
 static int ixgbe_dev_xstats_get(struct rte_eth_dev *dev,
                                struct rte_eth_xstat *xstats, unsigned n);
@@ -269,7 +269,7 @@ static void ixgbevf_dev_close(struct rte_eth_dev *dev);
 static int  ixgbevf_dev_reset(struct rte_eth_dev *dev);
 static void ixgbevf_intr_disable(struct ixgbe_hw *hw);
 static void ixgbevf_intr_enable(struct ixgbe_hw *hw);
-static void ixgbevf_dev_stats_get(struct rte_eth_dev *dev,
+static int ixgbevf_dev_stats_get(struct rte_eth_dev *dev,
                struct rte_eth_stats *stats);
 static void ixgbevf_dev_stats_reset(struct rte_eth_dev *dev);
 static int ixgbevf_vlan_filter_set(struct rte_eth_dev *dev,
@@ -3104,7 +3104,7 @@ ixgbe_read_stats_registers(struct ixgbe_hw *hw,
 /*
  * This function is based on ixgbe_update_stats_counters() in ixgbe/ixgbe.c
  */
-static void
+static int
 ixgbe_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 {
        struct ixgbe_hw *hw =
@@ -3126,7 +3126,7 @@ ixgbe_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
                        &total_qbrc, &total_qprc, &total_qprdc);
 
        if (stats == NULL)
-               return;
+               return -EINVAL;
 
        /* Fill out the rte_eth_stats statistics structure */
        stats->ipackets = total_qprc;
@@ -3157,6 +3157,7 @@ ixgbe_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 
        /* Tx Errors */
        stats->oerrors  = 0;
+       return 0;
 }
 
 static void
@@ -3568,7 +3569,7 @@ ixgbevf_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
        return IXGBEVF_NB_XSTATS;
 }
 
-static void
+static int
 ixgbevf_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 {
        struct ixgbevf_hw_stats *hw_stats = (struct ixgbevf_hw_stats *)
@@ -3577,12 +3578,13 @@ ixgbevf_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
        ixgbevf_update_stats(dev);
 
        if (stats == NULL)
-               return;
+               return -EINVAL;
 
        stats->ipackets = hw_stats->vfgprc;
        stats->ibytes = hw_stats->vfgorc;
        stats->opackets = hw_stats->vfgptc;
        stats->obytes = hw_stats->vfgotc;
+       return 0;
 }
 
 static void
index 72a2733ba59c52b4fc9f522871987d5b05790f0d..d290c799aaede60c7cf71bcaf714ef96aa861393 100644 (file)
@@ -283,7 +283,7 @@ eth_kni_link_update(struct rte_eth_dev *dev __rte_unused,
        return 0;
 }
 
-static void
+static int
 eth_kni_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 {
        unsigned long rx_packets_total = 0, rx_bytes_total = 0;
@@ -320,6 +320,8 @@ eth_kni_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
        stats->opackets = tx_packets_total;
        stats->obytes = tx_bytes_total;
        stats->oerrors = tx_packets_err_total;
+
+       return 0;
 }
 
 static void
index a3c8e676271ee511e23936cf2c1098787af9b8ba..5407e391b905003cd31aece43757de3b715d07ea 100644 (file)
@@ -311,7 +311,7 @@ lio_dev_xstats_reset(struct rte_eth_dev *eth_dev)
 }
 
 /* Retrieve the device statistics (# packets in/out, # bytes in/out, etc */
-static void
+static int
 lio_dev_stats_get(struct rte_eth_dev *eth_dev,
                  struct rte_eth_stats *stats)
 {
@@ -359,6 +359,8 @@ lio_dev_stats_get(struct rte_eth_dev *eth_dev,
        stats->ibytes = bytes;
        stats->ipackets = pkts;
        stats->ierrors = drop;
+
+       return 0;
 }
 
 static void
index 93e5502c7114db16110dea5f39c1bd7266ba301a..9bd2acc2aa43cd122cfa2a51249c38793d6dd026 100644 (file)
@@ -117,7 +117,7 @@ int mlx4_mtu_get(struct priv *priv, uint16_t *mtu);
 int mlx4_mtu_set(struct rte_eth_dev *dev, uint16_t mtu);
 int mlx4_dev_set_link_down(struct rte_eth_dev *dev);
 int mlx4_dev_set_link_up(struct rte_eth_dev *dev);
-void mlx4_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats);
+int mlx4_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats);
 void mlx4_stats_reset(struct rte_eth_dev *dev);
 void mlx4_dev_infos_get(struct rte_eth_dev *dev,
                        struct rte_eth_dev_info *info);
index a9e8059b8e703b342626d703af8a09f28c71e805..8962be16e8af7134d511dc8e6a4a54dd74959b34 100644 (file)
@@ -571,7 +571,7 @@ mlx4_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *info)
  * @param[out] stats
  *   Stats structure output buffer.
  */
-void
+int
 mlx4_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 {
        struct rte_eth_stats tmp;
@@ -613,6 +613,7 @@ mlx4_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
                tmp.oerrors += txq->stats.odropped;
        }
        *stats = tmp;
+       return 0;
 }
 
 /**
index 9ade624e620b0209e46875862f3e1fc7da95edca..3f452b2f007545d081033c7f1991c8725d861c57 100644 (file)
@@ -237,7 +237,7 @@ void mlx5_allmulticast_disable(struct rte_eth_dev *);
 /* mlx5_stats.c */
 
 void priv_xstats_init(struct priv *);
-void mlx5_stats_get(struct rte_eth_dev *, struct rte_eth_stats *);
+int mlx5_stats_get(struct rte_eth_dev *, struct rte_eth_stats *);
 void mlx5_stats_reset(struct rte_eth_dev *);
 int mlx5_xstats_get(struct rte_eth_dev *,
                    struct rte_eth_xstat *, unsigned int);
index 6b4772caf1b92e2a3d944f99e7b0e32197b80d6a..5e225d3740d2489c8d16218b1687befd2c496752 100644 (file)
@@ -318,7 +318,7 @@ priv_xstats_reset(struct priv *priv)
  * @param[out] stats
  *   Stats structure output buffer.
  */
-void
+int
 mlx5_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 {
        struct priv *priv = mlx5_get_priv(dev);
@@ -373,6 +373,7 @@ mlx5_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 #endif
        *stats = tmp;
        priv_unlock(priv);
+       return 0;
 }
 
 /**
index 46879a44d4e13051e1a38e380c67c3138e9160ba..4beaa1d0040d00a5361a12f47cc4d764ba646599 100644 (file)
@@ -845,8 +845,11 @@ mrvl_mac_addr_set(struct rte_eth_dev *dev, struct ether_addr *mac_addr)
  *   Pointer to Ethernet device structure.
  * @param stats
  *   Stats structure output buffer.
+ *
+ * @return
+ *   0 on success, negative error value otherwise.
  */
-static void
+static int
 mrvl_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 {
        struct mrvl_priv *priv = dev->data->dev_private;
@@ -919,7 +922,7 @@ mrvl_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
        ret = pp2_ppio_get_statistics(priv->ppio, &ppio_stats, 0);
        if (unlikely(ret)) {
                RTE_LOG(ERR, PMD, "Failed to update port statistics\n");
-               return;
+               return ret;
        }
 
        stats->ipackets += ppio_stats.rx_packets - drop_mac;
@@ -930,6 +933,8 @@ mrvl_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
                          ppio_stats.rx_fifo_dropped +
                          ppio_stats.rx_cls_dropped;
        stats->ierrors = drop_mac;
+
+       return 0;
 }
 
 /**
index 4ef9d2b7a67f6ef63188629c2d72b3d14288683b..0917b9c4917a9d9c02497a83d9c1559d72ed5121 100644 (file)
@@ -88,7 +88,7 @@ static int nfp_net_tx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx,
                                  uint16_t nb_desc, unsigned int socket_id,
                                  const struct rte_eth_txconf *tx_conf);
 static int nfp_net_start(struct rte_eth_dev *dev);
-static void nfp_net_stats_get(struct rte_eth_dev *dev,
+static int nfp_net_stats_get(struct rte_eth_dev *dev,
                              struct rte_eth_stats *stats);
 static void nfp_net_stats_reset(struct rte_eth_dev *dev);
 static void nfp_net_stop(struct rte_eth_dev *dev);
@@ -1027,7 +1027,7 @@ nfp_net_link_update(struct rte_eth_dev *dev, __rte_unused int wait_to_complete)
        return -1;
 }
 
-static void
+static int
 nfp_net_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 {
        int i;
@@ -1113,8 +1113,11 @@ nfp_net_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 
        nfp_dev_stats.imissed -= hw->eth_stats_base.imissed;
 
-       if (stats)
+       if (stats) {
                memcpy(stats, &nfp_dev_stats, sizeof(*stats));
+               return 0;
+       }
+       return -EINVAL;
 }
 
 static void
index fa9313decb361c7a3f19ff759bc29ab68e97fe91..47c7b143eadcf2d4e6e5fb8a60e0a1983d953081 100644 (file)
@@ -298,7 +298,7 @@ eth_dev_info(struct rte_eth_dev *dev,
        dev_info->flow_type_rss_offloads = internals->flow_type_rss_offloads;
 }
 
-static void
+static int
 eth_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *igb_stats)
 {
        unsigned i, num_stats;
@@ -306,7 +306,7 @@ eth_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *igb_stats)
        const struct pmd_internals *internal;
 
        if ((dev == NULL) || (igb_stats == NULL))
-               return;
+               return -EINVAL;
 
        internal = dev->data->dev_private;
        num_stats = RTE_MIN((unsigned)RTE_ETHDEV_QUEUE_STAT_CNTRS,
@@ -333,6 +333,8 @@ eth_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *igb_stats)
        igb_stats->ipackets = rx_total;
        igb_stats->opackets = tx_total;
        igb_stats->oerrors = tx_err_total;
+
+       return 0;
 }
 
 static void
index 94af88008b0f20530ce81307673161df43cd8800..82e38c20a66868e2e25e189f59180e6be02c866b 100644 (file)
@@ -199,7 +199,7 @@ octeontx_port_promisc_set(struct octeontx_nic *nic, int en)
                        nic->port_id, en ? "set" : "unset");
 }
 
-static void
+static int
 octeontx_port_stats(struct octeontx_nic *nic, struct rte_eth_stats *stats)
 {
        octeontx_mbox_bgx_port_stats_t bgx_stats;
@@ -208,8 +208,10 @@ octeontx_port_stats(struct octeontx_nic *nic, struct rte_eth_stats *stats)
        PMD_INIT_FUNC_TRACE();
 
        res = octeontx_bgx_port_stats(nic->port_id, &bgx_stats);
-       if (res < 0)
+       if (res < 0) {
                octeontx_log_err("failed to get port stats %d", nic->port_id);
+               return res;
+       }
 
        stats->ipackets = bgx_stats.rx_packets;
        stats->ibytes = bgx_stats.rx_bytes;
@@ -221,6 +223,8 @@ octeontx_port_stats(struct octeontx_nic *nic, struct rte_eth_stats *stats)
 
        octeontx_log_dbg("port%d stats inpkts=%" PRIx64 " outpkts=%" PRIx64 "",
                        nic->port_id, stats->ipackets, stats->opackets);
+
+       return 0;
 }
 
 static void
@@ -574,13 +578,13 @@ octeontx_dev_link_update(struct rte_eth_dev *dev,
        return octeontx_atomic_write_link_status(dev, &link);
 }
 
-static void
+static int
 octeontx_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 {
        struct octeontx_nic *nic = octeontx_pmd_priv(dev);
 
        PMD_INIT_FUNC_TRACE();
-       octeontx_port_stats(nic, stats);
+       return octeontx_port_stats(nic, stats);
 }
 
 static void
index b51f16cbda1e259cfb16bfeec174b399a1b61694..1b8a74e6e0b1cbfb08849cb36da13b408f311614 100644 (file)
@@ -560,7 +560,7 @@ eth_dev_info(struct rte_eth_dev *dev,
        dev_info->min_rx_bufsize = 0;
 }
 
-static void
+static int
 eth_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 {
        unsigned int i;
@@ -592,6 +592,8 @@ eth_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
        stats->opackets = tx_packets_total;
        stats->obytes = tx_bytes_total;
        stats->oerrors = tx_packets_err_total;
+
+       return 0;
 }
 
 static void
index fe130d4a0430feaf8d726662b61a2cd88003f9e5..a238781c0e79fbd9eee432f97facc55b67112de6 100644 (file)
@@ -1460,7 +1460,7 @@ static void qede_dev_close(struct rte_eth_dev *eth_dev)
                rte_eal_alarm_cancel(qede_poll_sp_sb_cb, (void *)eth_dev);
 }
 
-static void
+static int
 qede_get_stats(struct rte_eth_dev *eth_dev, struct rte_eth_stats *eth_stats)
 {
        struct qede_dev *qdev = eth_dev->data->dev_private;
@@ -1544,6 +1544,8 @@ qede_get_stats(struct rte_eth_dev *eth_dev, struct rte_eth_stats *eth_stats)
                if (j == txq_stat_cntrs)
                        break;
        }
+
+       return 0;
 }
 
 static unsigned
index e3fa7b0e2793cafe7d2164f13bd522db67d7676b..61473ca4d490cd45ce038d702fb89049b4cbeb57 100644 (file)
@@ -190,7 +190,7 @@ eth_dev_info(struct rte_eth_dev *dev,
        dev_info->min_rx_bufsize = 0;
 }
 
-static void
+static int
 eth_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 {
        unsigned i;
@@ -214,6 +214,8 @@ eth_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
        stats->ipackets = rx_total;
        stats->opackets = tx_total;
        stats->oerrors = tx_err_total;
+
+       return 0;
 }
 
 static void
index 7a5747282da7c231150a79490b3927403c144c9b..bd09191cad9908de8dccce4ec05e0d30ab7b5ec7 100644 (file)
@@ -521,16 +521,18 @@ sfc_tx_queue_release(void *queue)
        sfc_adapter_unlock(sa);
 }
 
-static void
+static int
 sfc_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 {
        struct sfc_adapter *sa = dev->data->dev_private;
        struct sfc_port *port = &sa->port;
        uint64_t *mac_stats;
+       int ret;
 
        rte_spinlock_lock(&port->mac_stats_lock);
 
-       if (sfc_port_update_mac_stats(sa) != 0)
+       ret = sfc_port_update_mac_stats(sa);
+       if (ret != 0)
                goto unlock;
 
        mac_stats = port->mac_stats_buf;
@@ -587,6 +589,8 @@ sfc_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 
 unlock:
        rte_spinlock_unlock(&port->mac_stats_lock);
+       SFC_ASSERT(ret >= 0);
+       return -ret;
 }
 
 static void
index d141acf0e40d253f53794decf381367782ce296d..c5486b72d97043a2c5b6fc94d4045aabc81e8be7 100644 (file)
@@ -1042,7 +1042,7 @@ eth_dev_info(struct rte_eth_dev *dev,
        dev_info->speed_capa = ETH_LINK_SPEED_100G;
 }
 
-static void
+static int
 eth_stats_get(struct rte_eth_dev *dev,
                struct rte_eth_stats *stats)
 {
@@ -1077,6 +1077,8 @@ eth_stats_get(struct rte_eth_dev *dev,
        stats->ibytes = rx_total_bytes;
        stats->obytes = tx_total_bytes;
        stats->oerrors = tx_err_total;
+
+       return 0;
 }
 
 static void
index 52380b4b549e0ff6d98ba17897c2f03fee6f58c6..61c6774769ccd6c4f1ec0464606a721bb1351335 100644 (file)
@@ -687,7 +687,7 @@ tap_dev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
                 DEV_TX_OFFLOAD_TCP_CKSUM);
 }
 
-static void
+static int
 tap_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *tap_stats)
 {
        unsigned int i, imax;
@@ -728,6 +728,7 @@ tap_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *tap_stats)
        tap_stats->opackets = tx_total;
        tap_stats->oerrors = tx_err_total;
        tap_stats->obytes = tx_bytes_total;
+       return 0;
 }
 
 static void
index 4654a4cedc4645e802dcf2a0b7900737926dcd40..551b371c5236ffe421229fb25ba1ee9fd6e4a6a0 100644 (file)
@@ -242,7 +242,7 @@ nicvf_dev_get_regs(struct rte_eth_dev *dev, struct rte_dev_reg_info *regs)
        return -ENOTSUP;
 }
 
-static void
+static int
 nicvf_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 {
        uint16_t qidx;
@@ -332,6 +332,8 @@ nicvf_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
        stats->opackets += port_stats.tx_bcast_frames_ok;
        stats->opackets += port_stats.tx_mcast_frames_ok;
        stats->oerrors = port_stats.tx_drops;
+
+       return 0;
 }
 
 static const uint32_t *
index 04179b4db6629a6f7b187f4979589cd948978438..353464984ea0600695011557adc0b22818d1fc23 100644 (file)
@@ -890,7 +890,7 @@ eth_dev_info(struct rte_eth_dev *dev,
        dev_info->min_rx_bufsize = 0;
 }
 
-static void
+static int
 eth_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 {
        unsigned i;
@@ -928,6 +928,8 @@ eth_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
        stats->oerrors = tx_missed_total;
        stats->ibytes = rx_total_bytes;
        stats->obytes = tx_total_bytes;
+
+       return 0;
 }
 
 static void
index 42c2836713f9c88174d3b4d632199430bf840f71..0ec54a9e4db4396b5cf1fe47ad5952f8729ebdf0 100644 (file)
@@ -77,7 +77,7 @@ static int virtio_dev_link_update(struct rte_eth_dev *dev,
 static void virtio_set_hwaddr(struct virtio_hw *hw);
 static void virtio_get_hwaddr(struct virtio_hw *hw);
 
-static void virtio_dev_stats_get(struct rte_eth_dev *dev,
+static int virtio_dev_stats_get(struct rte_eth_dev *dev,
                                 struct rte_eth_stats *stats);
 static int virtio_dev_xstats_get(struct rte_eth_dev *dev,
                                 struct rte_eth_xstat *xstats, unsigned n);
@@ -964,10 +964,12 @@ virtio_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
        return count;
 }
 
-static void
+static int
 virtio_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 {
        virtio_update_stats(dev, stats);
+
+       return 0;
 }
 
 static void
index 1cc3ffd81d2a767d3a0429e721b4a9a79aec680f..58bc4f2f231f3f7ba46e753dc9c87e25f2290fa8 100644 (file)
@@ -87,7 +87,7 @@ static int __vmxnet3_dev_link_update(struct rte_eth_dev *dev,
 static int vmxnet3_dev_link_update(struct rte_eth_dev *dev,
                                   int wait_to_complete);
 static void vmxnet3_hw_stats_save(struct vmxnet3_hw *hw);
-static void vmxnet3_dev_stats_get(struct rte_eth_dev *dev,
+static int vmxnet3_dev_stats_get(struct rte_eth_dev *dev,
                                  struct rte_eth_stats *stats);
 static int vmxnet3_dev_xstats_get_names(struct rte_eth_dev *dev,
                                        struct rte_eth_xstat_name *xstats,
@@ -1034,7 +1034,7 @@ vmxnet3_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
        return count;
 }
 
-static void
+static int
 vmxnet3_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 {
        unsigned int i;
@@ -1080,6 +1080,8 @@ vmxnet3_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
                stats->ierrors += rxStats.pktsRxError;
                stats->rx_nombuf += rxStats.pktsRxOutOfBuf;
        }
+
+       return 0;
 }
 
 static void
index ea56978eb871796e0a11b17177432ed981b67d30..9b228ce68ac0d497f108379d312e3d10bf0da514 100644 (file)
@@ -1537,8 +1537,7 @@ rte_eth_stats_get(uint16_t port_id, struct rte_eth_stats *stats)
 
        RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->stats_get, -ENOTSUP);
        stats->rx_nombuf = dev->data->rx_mbuf_alloc_failed;
-       (*dev->dev_ops->stats_get)(dev, stats);
-       return 0;
+       return (*dev->dev_ops->stats_get)(dev, stats);
 }
 
 int
index 0b731bb3f40b3e74c41e1c291a6a4e71e5b99aaa..354d170effded606255da76b008a065e4927e195 100644 (file)
@@ -1209,7 +1209,7 @@ typedef int (*eth_link_update_t)(struct rte_eth_dev *dev,
                                int wait_to_complete);
 /**< @internal Get link speed, duplex mode and state (up/down) of an Ethernet device. */
 
-typedef void (*eth_stats_get_t)(struct rte_eth_dev *dev,
+typedef int (*eth_stats_get_t)(struct rte_eth_dev *dev,
                                struct rte_eth_stats *igb_stats);
 /**< @internal Get global I/O statistics of an Ethernet device. */
 
index 6568cb5b91c9653d24d94b779f3344a107c85e9d..09daf6c59a44abbda8e20ab37550269095dec835 100644 (file)
@@ -211,13 +211,15 @@ virtual_ethdev_link_update_fail(struct rte_eth_dev *bonded_eth_dev __rte_unused,
        return -1;
 }
 
-static void
+static int
 virtual_ethdev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 {
        struct virtual_ethdev_private *dev_private = dev->data->dev_private;
 
        if (stats)
                rte_memcpy(stats, &dev_private->eth_stats, sizeof(*stats));
+
+       return 0;
 }
 
 static void