ethdev: add return value to stats get dev op
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>
This commit is contained in:
parent
75cd6fb1d9
commit
d5b0924ba6
@ -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
|
||||
-----------
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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 *,
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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 */
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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 *
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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. */
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user