ethdev: make stats and xstats reset callbacks return int
Change return value of the callbacks from void to int. Make implementations across all drivers return negative errno values in case of error conditions. Both callbacks are updated together because a large number of drivers assign the same function to both callbacks. Signed-off-by: Igor Romanov <igor.romanov@oktetlabs.ru> Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com> Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
This commit is contained in:
parent
da328f7f11
commit
9970a9ad07
@ -197,7 +197,7 @@ virtual_ethdev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
virtual_ethdev_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct virtual_ethdev_private *dev_private = dev->data->dev_private;
|
||||
@ -208,6 +208,8 @@ virtual_ethdev_stats_reset(struct rte_eth_dev *dev)
|
||||
|
||||
/* Reset internal statistics */
|
||||
memset(&dev_private->eth_stats, 0, sizeof(dev_private->eth_stats));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -349,7 +349,7 @@ eth_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *igb_stats)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
eth_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
unsigned i;
|
||||
@ -365,6 +365,8 @@ eth_stats_reset(struct rte_eth_dev *dev)
|
||||
internal->tx_queue[i].err_pkts = 0;
|
||||
internal->tx_queue[i].tx_bytes = 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -463,7 +463,7 @@ eth_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
eth_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct pmd_internals *internals = dev->data->dev_private;
|
||||
@ -475,6 +475,8 @@ eth_stats_reset(struct rte_eth_dev *dev)
|
||||
memset(&internals->tx_queues[i].stats, 0,
|
||||
sizeof(struct tx_stats));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -39,7 +39,7 @@ 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 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 int eth_ark_dev_stats_reset(struct rte_eth_dev *dev);
|
||||
static int eth_ark_set_default_mac_addr(struct rte_eth_dev *dev,
|
||||
struct rte_ether_addr *mac_addr);
|
||||
static int eth_ark_macaddr_add(struct rte_eth_dev *dev,
|
||||
@ -813,7 +813,7 @@ eth_ark_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
eth_ark_dev_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
uint16_t i;
|
||||
@ -826,6 +826,8 @@ eth_ark_dev_stats_reset(struct rte_eth_dev *dev)
|
||||
if (ark->user_ext.stats_reset)
|
||||
ark->user_ext.stats_reset(dev,
|
||||
ark->user_data[dev->data->port_id]);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -40,7 +40,7 @@ static int atl_dev_stats_get(struct rte_eth_dev *dev,
|
||||
static int atl_dev_xstats_get(struct rte_eth_dev *dev,
|
||||
struct rte_eth_xstat *stats, unsigned int n);
|
||||
|
||||
static void atl_dev_stats_reset(struct rte_eth_dev *dev);
|
||||
static int atl_dev_stats_reset(struct rte_eth_dev *dev);
|
||||
|
||||
static int atl_fw_version_get(struct rte_eth_dev *dev, char *fw_version,
|
||||
size_t fw_size);
|
||||
@ -975,7 +975,7 @@ atl_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
atl_dev_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct atl_adapter *adapter = ATL_DEV_TO_ADAPTER(dev);
|
||||
@ -987,6 +987,8 @@ atl_dev_stats_reset(struct rte_eth_dev *dev)
|
||||
memset(&hw->curr_stats, 0, sizeof(hw->curr_stats));
|
||||
|
||||
memset(&adapter->sw_stats, 0, sizeof(adapter->sw_stats));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -82,7 +82,7 @@ static void avp_dev_tx_queue_release(void *txq);
|
||||
|
||||
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);
|
||||
static int avp_dev_stats_reset(struct rte_eth_dev *dev);
|
||||
|
||||
|
||||
#define AVP_MAX_RX_BURST 64
|
||||
@ -2275,7 +2275,7 @@ avp_dev_stats_get(struct rte_eth_dev *eth_dev, struct rte_eth_stats *stats)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
avp_dev_stats_reset(struct rte_eth_dev *eth_dev)
|
||||
{
|
||||
struct avp_dev *avp = AVP_DEV_PRIVATE_TO_HW(eth_dev->data->dev_private);
|
||||
@ -2300,6 +2300,8 @@ avp_dev_stats_reset(struct rte_eth_dev *eth_dev)
|
||||
txq->errors = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
RTE_PMD_REGISTER_PCI(net_avp, rte_avp_pmd);
|
||||
|
@ -23,7 +23,7 @@ static int axgbe_dev_link_update(struct rte_eth_dev *dev,
|
||||
int wait_to_complete);
|
||||
static int axgbe_dev_stats_get(struct rte_eth_dev *dev,
|
||||
struct rte_eth_stats *stats);
|
||||
static void axgbe_dev_stats_reset(struct rte_eth_dev *dev);
|
||||
static int axgbe_dev_stats_reset(struct rte_eth_dev *dev);
|
||||
static int axgbe_dev_info_get(struct rte_eth_dev *dev,
|
||||
struct rte_eth_dev_info *dev_info);
|
||||
|
||||
@ -337,7 +337,7 @@ axgbe_dev_stats_get(struct rte_eth_dev *dev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
axgbe_dev_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct axgbe_rx_queue *rxq;
|
||||
@ -356,6 +356,8 @@ axgbe_dev_stats_reset(struct rte_eth_dev *dev)
|
||||
txq->bytes = 0;
|
||||
txq->errors = 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -392,22 +392,25 @@ int bnxt_stats_get_op(struct rte_eth_dev *eth_dev,
|
||||
return rc;
|
||||
}
|
||||
|
||||
void bnxt_stats_reset_op(struct rte_eth_dev *eth_dev)
|
||||
int bnxt_stats_reset_op(struct rte_eth_dev *eth_dev)
|
||||
{
|
||||
struct bnxt *bp = eth_dev->data->dev_private;
|
||||
unsigned int i;
|
||||
int ret;
|
||||
|
||||
if (!(bp->flags & BNXT_FLAG_INIT_DONE)) {
|
||||
PMD_DRV_LOG(ERR, "Device Initialization not complete!\n");
|
||||
return;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
bnxt_clear_all_hwrm_stat_ctxs(bp);
|
||||
ret = bnxt_clear_all_hwrm_stat_ctxs(bp);
|
||||
for (i = 0; i < bp->rx_cp_nr_rings; i++) {
|
||||
struct bnxt_rx_queue *rxq = bp->rx_queues[i];
|
||||
|
||||
rte_atomic64_clear(&rxq->rx_mbuf_alloc_fail);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int bnxt_dev_xstats_get_op(struct rte_eth_dev *eth_dev,
|
||||
@ -543,19 +546,36 @@ int bnxt_dev_xstats_get_names_op(__rte_unused struct rte_eth_dev *eth_dev,
|
||||
return stat_cnt;
|
||||
}
|
||||
|
||||
void bnxt_dev_xstats_reset_op(struct rte_eth_dev *eth_dev)
|
||||
int bnxt_dev_xstats_reset_op(struct rte_eth_dev *eth_dev)
|
||||
{
|
||||
struct bnxt *bp = eth_dev->data->dev_private;
|
||||
int ret;
|
||||
|
||||
if (bp->flags & BNXT_FLAG_PORT_STATS && BNXT_SINGLE_PF(bp))
|
||||
bnxt_hwrm_port_clr_stats(bp);
|
||||
if (bp->flags & BNXT_FLAG_PORT_STATS && BNXT_SINGLE_PF(bp)) {
|
||||
ret = bnxt_hwrm_port_clr_stats(bp);
|
||||
if (ret != 0) {
|
||||
PMD_DRV_LOG(ERR, "Operation failed: %s\n",
|
||||
strerror(-ret));
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
if (BNXT_VF(bp))
|
||||
ret = 0;
|
||||
|
||||
if (BNXT_VF(bp)) {
|
||||
PMD_DRV_LOG(ERR, "Operation not supported on a VF device\n");
|
||||
if (!BNXT_SINGLE_PF(bp))
|
||||
ret = -ENOTSUP;
|
||||
}
|
||||
if (!BNXT_SINGLE_PF(bp)) {
|
||||
PMD_DRV_LOG(ERR, "Operation not supported on a MF device\n");
|
||||
if (!(bp->flags & BNXT_FLAG_PORT_STATS))
|
||||
ret = -ENOTSUP;
|
||||
}
|
||||
if (!(bp->flags & BNXT_FLAG_PORT_STATS)) {
|
||||
PMD_DRV_LOG(ERR, "Operation not supported\n");
|
||||
ret = -ENOTSUP;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int bnxt_dev_xstats_get_by_id_op(struct rte_eth_dev *dev, const uint64_t *ids,
|
||||
|
@ -11,13 +11,13 @@
|
||||
void bnxt_free_stats(struct bnxt *bp);
|
||||
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_stats_reset_op(struct rte_eth_dev *eth_dev);
|
||||
int bnxt_dev_xstats_get_names_op(__rte_unused struct rte_eth_dev *eth_dev,
|
||||
struct rte_eth_xstat_name *xstats_names,
|
||||
__rte_unused unsigned int limit);
|
||||
int bnxt_dev_xstats_get_op(struct rte_eth_dev *eth_dev,
|
||||
struct rte_eth_xstat *xstats, unsigned int n);
|
||||
void bnxt_dev_xstats_reset_op(struct rte_eth_dev *eth_dev);
|
||||
int bnxt_dev_xstats_reset_op(struct rte_eth_dev *eth_dev);
|
||||
int bnxt_dev_xstats_get_by_id_op(struct rte_eth_dev *dev, const uint64_t *ids,
|
||||
uint64_t *values, unsigned int limit);
|
||||
int bnxt_dev_xstats_get_names_by_id_op(struct rte_eth_dev *dev,
|
||||
|
@ -2472,14 +2472,21 @@ bond_ethdev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
bond_ethdev_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct bond_dev_private *internals = dev->data->dev_private;
|
||||
int i;
|
||||
int err;
|
||||
int ret;
|
||||
|
||||
for (i = 0; i < internals->slave_count; i++)
|
||||
rte_eth_stats_reset(internals->slaves[i].port_id);
|
||||
for (i = 0, err = 0; i < internals->slave_count; i++) {
|
||||
ret = rte_eth_stats_reset(internals->slaves[i].port_id);
|
||||
if (ret != 0)
|
||||
err = ret;
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -724,7 +724,7 @@ static int cxgbe_dev_stats_get(struct rte_eth_dev *eth_dev,
|
||||
/*
|
||||
* Reset port statistics.
|
||||
*/
|
||||
static void cxgbe_dev_stats_reset(struct rte_eth_dev *eth_dev)
|
||||
static int cxgbe_dev_stats_reset(struct rte_eth_dev *eth_dev)
|
||||
{
|
||||
struct port_info *pi = eth_dev->data->dev_private;
|
||||
struct adapter *adapter = pi->adapter;
|
||||
@ -747,6 +747,8 @@ static void cxgbe_dev_stats_reset(struct rte_eth_dev *eth_dev)
|
||||
txq->stats.tx_bytes = 0;
|
||||
txq->stats.mapping_err = 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cxgbe_flow_ctrl_get(struct rte_eth_dev *eth_dev,
|
||||
|
@ -399,13 +399,15 @@ static int dpaa_eth_stats_get(struct rte_eth_dev *dev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void dpaa_eth_stats_reset(struct rte_eth_dev *dev)
|
||||
static int dpaa_eth_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct dpaa_if *dpaa_intf = dev->data->dev_private;
|
||||
|
||||
PMD_INIT_FUNC_TRACE();
|
||||
|
||||
fman_if_stats_reset(dpaa_intf->fif);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -1429,12 +1429,12 @@ dpaa2_xstats_get_names_by_id(
|
||||
return limit;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
dpaa2_dev_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct dpaa2_dev_priv *priv = dev->data->dev_private;
|
||||
struct fsl_mc_io *dpni = (struct fsl_mc_io *)priv->hw;
|
||||
int32_t retcode;
|
||||
int retcode;
|
||||
int i;
|
||||
struct dpaa2_queue *dpaa2_q;
|
||||
|
||||
@ -1442,7 +1442,7 @@ dpaa2_dev_stats_reset(struct rte_eth_dev *dev)
|
||||
|
||||
if (dpni == NULL) {
|
||||
DPAA2_PMD_ERR("dpni is NULL");
|
||||
return;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
retcode = dpni_reset_statistics(dpni, CMD_PRI_LOW, priv->token);
|
||||
@ -1462,11 +1462,11 @@ dpaa2_dev_stats_reset(struct rte_eth_dev *dev)
|
||||
dpaa2_q->tx_pkts = 0;
|
||||
}
|
||||
|
||||
return;
|
||||
return 0;
|
||||
|
||||
error:
|
||||
DPAA2_PMD_ERR("Operation not completed:Error Code = %d", retcode);
|
||||
return;
|
||||
return retcode;
|
||||
};
|
||||
|
||||
/* return 0 means link status changed, -1 means not changed */
|
||||
|
@ -43,7 +43,7 @@ static int eth_em_link_update(struct rte_eth_dev *dev,
|
||||
int wait_to_complete);
|
||||
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 int eth_em_stats_reset(struct rte_eth_dev *dev);
|
||||
static int eth_em_infos_get(struct rte_eth_dev *dev,
|
||||
struct rte_eth_dev_info *dev_info);
|
||||
static int eth_em_flow_ctrl_get(struct rte_eth_dev *dev,
|
||||
@ -984,7 +984,7 @@ eth_em_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *rte_stats)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
eth_em_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct e1000_hw_stats *hw_stats =
|
||||
@ -995,6 +995,8 @@ eth_em_stats_reset(struct rte_eth_dev *dev)
|
||||
|
||||
/* Reset software totals */
|
||||
memset(hw_stats, 0, sizeof(*hw_stats));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -98,8 +98,8 @@ static int eth_igb_xstats_get_names(struct rte_eth_dev *dev,
|
||||
static int eth_igb_xstats_get_names_by_id(struct rte_eth_dev *dev,
|
||||
struct rte_eth_xstat_name *xstats_names, const uint64_t *ids,
|
||||
unsigned int limit);
|
||||
static void eth_igb_stats_reset(struct rte_eth_dev *dev);
|
||||
static void eth_igb_xstats_reset(struct rte_eth_dev *dev);
|
||||
static int eth_igb_stats_reset(struct rte_eth_dev *dev);
|
||||
static int eth_igb_xstats_reset(struct rte_eth_dev *dev);
|
||||
static int eth_igb_fw_version_get(struct rte_eth_dev *dev,
|
||||
char *fw_version, size_t fw_size);
|
||||
static int eth_igb_infos_get(struct rte_eth_dev *dev,
|
||||
@ -168,7 +168,7 @@ static int eth_igbvf_xstats_get(struct rte_eth_dev *dev,
|
||||
static int eth_igbvf_xstats_get_names(struct rte_eth_dev *dev,
|
||||
struct rte_eth_xstat_name *xstats_names,
|
||||
unsigned limit);
|
||||
static void eth_igbvf_stats_reset(struct rte_eth_dev *dev);
|
||||
static int eth_igbvf_stats_reset(struct rte_eth_dev *dev);
|
||||
static int igbvf_vlan_filter_set(struct rte_eth_dev *dev,
|
||||
uint16_t vlan_id, int on);
|
||||
static int igbvf_set_vfta(struct e1000_hw *hw, uint16_t vid, bool on);
|
||||
@ -1870,7 +1870,7 @@ eth_igb_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *rte_stats)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
eth_igb_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct e1000_hw_stats *hw_stats =
|
||||
@ -1881,9 +1881,11 @@ eth_igb_stats_reset(struct rte_eth_dev *dev)
|
||||
|
||||
/* Reset software totals */
|
||||
memset(hw_stats, 0, sizeof(*hw_stats));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
eth_igb_xstats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct e1000_hw_stats *stats =
|
||||
@ -1894,6 +1896,8 @@ eth_igb_xstats_reset(struct rte_eth_dev *dev)
|
||||
|
||||
/* Reset software totals */
|
||||
memset(stats, 0, sizeof(*stats));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int eth_igb_xstats_get_names(__rte_unused struct rte_eth_dev *dev,
|
||||
@ -2127,7 +2131,7 @@ eth_igbvf_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *rte_stats)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
eth_igbvf_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct e1000_vf_stats *hw_stats = (struct e1000_vf_stats*)
|
||||
@ -2139,6 +2143,8 @@ eth_igbvf_stats_reset(struct rte_eth_dev *dev)
|
||||
/* reset HW current stats*/
|
||||
memset(&hw_stats->gprc, 0, sizeof(*hw_stats) -
|
||||
offsetof(struct e1000_vf_stats, gprc));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -492,7 +492,7 @@ int enetc_stats_get(struct rte_eth_dev *dev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
enetc_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct enetc_eth_hw *hw =
|
||||
@ -500,6 +500,8 @@ enetc_stats_reset(struct rte_eth_dev *dev)
|
||||
struct enetc_hw *enetc_hw = &hw->hw;
|
||||
|
||||
enetc_port_wr(enetc_hw, ENETC_PM0_STAT_CONFIG, ENETC_CLEAR_STATS);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -304,7 +304,7 @@ void enic_remove(struct enic *enic);
|
||||
int enic_get_link_status(struct enic *enic);
|
||||
int enic_dev_stats_get(struct enic *enic,
|
||||
struct rte_eth_stats *r_stats);
|
||||
void enic_dev_stats_clear(struct enic *enic);
|
||||
int enic_dev_stats_clear(struct enic *enic);
|
||||
int enic_add_packet_filter(struct enic *enic);
|
||||
int enic_set_mac_address(struct enic *enic, uint8_t *mac_addr);
|
||||
int enic_del_mac_address(struct enic *enic, int mac_index);
|
||||
|
@ -474,12 +474,12 @@ static int enicpmd_dev_stats_get(struct rte_eth_dev *eth_dev,
|
||||
return enic_dev_stats_get(enic, stats);
|
||||
}
|
||||
|
||||
static void enicpmd_dev_stats_reset(struct rte_eth_dev *eth_dev)
|
||||
static int enicpmd_dev_stats_reset(struct rte_eth_dev *eth_dev)
|
||||
{
|
||||
struct enic *enic = pmd_priv(eth_dev);
|
||||
|
||||
ENICPMD_FUNC_TRACE();
|
||||
enic_dev_stats_clear(enic);
|
||||
return enic_dev_stats_clear(enic);
|
||||
}
|
||||
|
||||
static uint32_t speed_capa_from_pci_id(struct rte_eth_dev *eth_dev)
|
||||
|
@ -115,11 +115,18 @@ static void enic_init_soft_stats(struct enic *enic)
|
||||
enic_clear_soft_stats(enic);
|
||||
}
|
||||
|
||||
void enic_dev_stats_clear(struct enic *enic)
|
||||
int enic_dev_stats_clear(struct enic *enic)
|
||||
{
|
||||
if (vnic_dev_stats_clear(enic->vdev))
|
||||
int ret;
|
||||
|
||||
ret = vnic_dev_stats_clear(enic->vdev);
|
||||
if (ret != 0) {
|
||||
dev_err(enic, "Error in clearing stats\n");
|
||||
return ret;
|
||||
}
|
||||
enic_clear_soft_stats(enic);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int enic_dev_stats_get(struct enic *enic, struct rte_eth_stats *r_stats)
|
||||
|
@ -814,19 +814,31 @@ fs_stats_get(struct rte_eth_dev *dev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
fs_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct sub_device *sdev;
|
||||
uint8_t i;
|
||||
int ret;
|
||||
|
||||
fs_lock(dev, 0);
|
||||
FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
|
||||
rte_eth_stats_reset(PORT_ID(sdev));
|
||||
ret = rte_eth_stats_reset(PORT_ID(sdev));
|
||||
if (ret) {
|
||||
if (!fs_err(sdev, ret))
|
||||
continue;
|
||||
|
||||
ERROR("Operation rte_eth_stats_reset failed for sub_device %d with error %d",
|
||||
i, ret);
|
||||
fs_unlock(dev, 0);
|
||||
return ret;
|
||||
}
|
||||
memset(&sdev->stats_snapshot, 0, sizeof(struct rte_eth_stats));
|
||||
}
|
||||
memset(&PRIV(dev)->stats_accumulator, 0, sizeof(struct rte_eth_stats));
|
||||
fs_unlock(dev, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1355,7 +1355,7 @@ fm10k_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
fm10k_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct fm10k_hw *hw = FM10K_DEV_PRIVATE_TO_HW(dev->data->dev_private);
|
||||
@ -1366,6 +1366,8 @@ fm10k_stats_reset(struct rte_eth_dev *dev)
|
||||
|
||||
memset(hw_stats, 0, sizeof(*hw_stats));
|
||||
fm10k_rebind_hw_stats(hw, hw_stats);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
@ -3114,7 +3116,11 @@ eth_fm10k_dev_init(struct rte_eth_dev *dev)
|
||||
}
|
||||
|
||||
/* Reset the hw statistics */
|
||||
fm10k_stats_reset(dev);
|
||||
diag = fm10k_stats_reset(dev);
|
||||
if (diag != 0) {
|
||||
PMD_INIT_LOG(ERR, "Stats reset failed: %d", diag);
|
||||
return diag;
|
||||
}
|
||||
|
||||
/* Reset the hw */
|
||||
diag = fm10k_reset_hw(hw);
|
||||
|
@ -1131,7 +1131,7 @@ int hinic_set_fast_recycle_mode(void *hwdev, u8 mode)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void hinic_clear_vport_stats(struct hinic_hwdev *hwdev)
|
||||
int hinic_clear_vport_stats(struct hinic_hwdev *hwdev)
|
||||
{
|
||||
struct hinic_clear_vport_stats clear_vport_stats;
|
||||
u16 out_size = sizeof(clear_vport_stats);
|
||||
@ -1139,7 +1139,7 @@ void hinic_clear_vport_stats(struct hinic_hwdev *hwdev)
|
||||
|
||||
if (!hwdev) {
|
||||
PMD_DRV_LOG(ERR, "Hwdev is NULL");
|
||||
return;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
memset(&clear_vport_stats, 0, sizeof(clear_vport_stats));
|
||||
@ -1153,10 +1153,13 @@ void hinic_clear_vport_stats(struct hinic_hwdev *hwdev)
|
||||
if (err || !out_size || clear_vport_stats.mgmt_msg_head.status) {
|
||||
PMD_DRV_LOG(ERR, "Failed to clear vport statistics, err: %d, status: 0x%x, out size: 0x%x",
|
||||
err, clear_vport_stats.mgmt_msg_head.status, out_size);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void hinic_clear_phy_port_stats(struct hinic_hwdev *hwdev)
|
||||
int hinic_clear_phy_port_stats(struct hinic_hwdev *hwdev)
|
||||
{
|
||||
struct hinic_clear_port_stats clear_phy_port_stats;
|
||||
u16 out_size = sizeof(clear_phy_port_stats);
|
||||
@ -1164,7 +1167,7 @@ void hinic_clear_phy_port_stats(struct hinic_hwdev *hwdev)
|
||||
|
||||
if (!hwdev) {
|
||||
PMD_DRV_LOG(ERR, "Hwdev is NULL");
|
||||
return;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
memset(&clear_phy_port_stats, 0, sizeof(clear_phy_port_stats));
|
||||
@ -1180,7 +1183,10 @@ void hinic_clear_phy_port_stats(struct hinic_hwdev *hwdev)
|
||||
PMD_DRV_LOG(ERR, "Failed to clear phy port statistics, err: %d, status: 0x%x, out size: 0x%x",
|
||||
err, clear_phy_port_stats.mgmt_msg_head.status,
|
||||
out_size);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int hinic_set_link_status_follow(void *hwdev,
|
||||
|
@ -651,8 +651,8 @@ int hinic_set_fast_recycle_mode(void *hwdev, u8 mode);
|
||||
|
||||
int hinic_get_base_qpn(void *hwdev, u16 *global_qpn);
|
||||
|
||||
void hinic_clear_vport_stats(struct hinic_hwdev *hwdev);
|
||||
int hinic_clear_vport_stats(struct hinic_hwdev *hwdev);
|
||||
|
||||
void hinic_clear_phy_port_stats(struct hinic_hwdev *hwdev);
|
||||
int hinic_clear_phy_port_stats(struct hinic_hwdev *hwdev);
|
||||
|
||||
#endif /* _HINIC_PMD_NICCFG_H_ */
|
||||
|
@ -1203,14 +1203,17 @@ hinic_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
|
||||
* @param dev
|
||||
* Pointer to Ethernet device structure.
|
||||
*/
|
||||
static void hinic_dev_stats_reset(struct rte_eth_dev *dev)
|
||||
static int hinic_dev_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
int qid;
|
||||
struct hinic_rxq *rxq = NULL;
|
||||
struct hinic_txq *txq = NULL;
|
||||
struct hinic_nic_dev *nic_dev = HINIC_ETH_DEV_TO_PRIVATE_NIC_DEV(dev);
|
||||
int ret;
|
||||
|
||||
hinic_clear_vport_stats(nic_dev->hwdev);
|
||||
ret = hinic_clear_vport_stats(nic_dev->hwdev);
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
|
||||
for (qid = 0; qid < nic_dev->num_rq; qid++) {
|
||||
rxq = nic_dev->rxqs[qid];
|
||||
@ -1221,6 +1224,8 @@ static void hinic_dev_stats_reset(struct rte_eth_dev *dev)
|
||||
txq = nic_dev->txqs[qid];
|
||||
hinic_txq_stats_reset(txq);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1229,14 +1234,22 @@ static void hinic_dev_stats_reset(struct rte_eth_dev *dev)
|
||||
* @param dev
|
||||
* Pointer to Ethernet device structure.
|
||||
**/
|
||||
static void hinic_dev_xstats_reset(struct rte_eth_dev *dev)
|
||||
static int hinic_dev_xstats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct hinic_nic_dev *nic_dev = HINIC_ETH_DEV_TO_PRIVATE_NIC_DEV(dev);
|
||||
int ret;
|
||||
|
||||
hinic_dev_stats_reset(dev);
|
||||
ret = hinic_dev_stats_reset(dev);
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
|
||||
if (hinic_func_type(nic_dev->hwdev) != TYPE_VF)
|
||||
hinic_clear_phy_port_stats(nic_dev->hwdev);
|
||||
if (hinic_func_type(nic_dev->hwdev) != TYPE_VF) {
|
||||
ret = hinic_clear_phy_port_stats(nic_dev->hwdev);
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void hinic_gen_random_mac_addr(struct rte_ether_addr *mac_addr)
|
||||
|
@ -236,7 +236,7 @@ static int i40e_dev_xstats_get(struct rte_eth_dev *dev,
|
||||
static int i40e_dev_xstats_get_names(struct rte_eth_dev *dev,
|
||||
struct rte_eth_xstat_name *xstats_names,
|
||||
unsigned limit);
|
||||
static void i40e_dev_stats_reset(struct rte_eth_dev *dev);
|
||||
static int i40e_dev_stats_reset(struct rte_eth_dev *dev);
|
||||
static int i40e_fw_version_get(struct rte_eth_dev *dev,
|
||||
char *fw_version, size_t fw_size);
|
||||
static int i40e_dev_info_get(struct rte_eth_dev *dev,
|
||||
@ -3313,7 +3313,7 @@ i40e_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
|
||||
}
|
||||
|
||||
/* Reset the statistics */
|
||||
static void
|
||||
static int
|
||||
i40e_dev_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private);
|
||||
@ -3326,6 +3326,8 @@ i40e_dev_stats_reset(struct rte_eth_dev *dev)
|
||||
|
||||
/* read the stats, reading current register values into offset */
|
||||
i40e_read_stats_registers(pf, hw);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static uint32_t
|
||||
|
@ -86,7 +86,7 @@ static int i40evf_dev_xstats_get(struct rte_eth_dev *dev,
|
||||
static int i40evf_dev_xstats_get_names(struct rte_eth_dev *dev,
|
||||
struct rte_eth_xstat_name *xstats_names,
|
||||
unsigned limit);
|
||||
static void i40evf_dev_xstats_reset(struct rte_eth_dev *dev);
|
||||
static int i40evf_dev_xstats_reset(struct rte_eth_dev *dev);
|
||||
static int i40evf_vlan_filter_set(struct rte_eth_dev *dev,
|
||||
uint16_t vlan_id, int on);
|
||||
static int i40evf_vlan_offload_set(struct rte_eth_dev *dev, int mask);
|
||||
@ -950,7 +950,7 @@ i40evf_update_stats(struct i40e_vsi *vsi,
|
||||
i40evf_stat_update_32(&oes->tx_discards, &nes->tx_discards);
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
i40evf_dev_xstats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
int ret;
|
||||
@ -963,6 +963,8 @@ i40evf_dev_xstats_reset(struct rte_eth_dev *dev)
|
||||
/* set stats offset base on current values */
|
||||
if (ret == 0)
|
||||
vf->vsi.eth_stats_offset = *pstats;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int i40evf_dev_xstats_get_names(__rte_unused struct rte_eth_dev *dev,
|
||||
|
@ -264,12 +264,12 @@ i40e_vf_representor_stats_get(struct rte_eth_dev *ethdev,
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
i40e_vf_representor_stats_reset(struct rte_eth_dev *ethdev)
|
||||
{
|
||||
struct i40e_vf_representor *representor = ethdev->data->dev_private;
|
||||
|
||||
rte_pmd_i40e_get_vf_native_stats(
|
||||
return rte_pmd_i40e_get_vf_native_stats(
|
||||
representor->adapter->eth_dev->data->port_id,
|
||||
representor->vf_id, &representor->stats_offset);
|
||||
}
|
||||
|
@ -42,7 +42,7 @@ static int iavf_dev_info_get(struct rte_eth_dev *dev,
|
||||
static const uint32_t *iavf_dev_supported_ptypes_get(struct rte_eth_dev *dev);
|
||||
static int iavf_dev_stats_get(struct rte_eth_dev *dev,
|
||||
struct rte_eth_stats *stats);
|
||||
static void iavf_dev_stats_reset(struct rte_eth_dev *dev);
|
||||
static int iavf_dev_stats_reset(struct rte_eth_dev *dev);
|
||||
static int iavf_dev_promiscuous_enable(struct rte_eth_dev *dev);
|
||||
static int iavf_dev_promiscuous_disable(struct rte_eth_dev *dev);
|
||||
static void iavf_dev_allmulticast_enable(struct rte_eth_dev *dev);
|
||||
@ -1065,7 +1065,7 @@ iavf_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
iavf_dev_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
int ret;
|
||||
@ -1077,10 +1077,13 @@ iavf_dev_stats_reset(struct rte_eth_dev *dev)
|
||||
|
||||
/* read stat values to clear hardware registers */
|
||||
ret = iavf_query_stats(adapter, &pstats);
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
|
||||
/* set stats offset base on current values */
|
||||
if (ret == 0)
|
||||
vsi->eth_stats_offset = *pstats;
|
||||
vsi->eth_stats_offset = *pstats;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -94,7 +94,7 @@ static int ice_get_eeprom(struct rte_eth_dev *dev,
|
||||
struct rte_dev_eeprom_info *eeprom);
|
||||
static int ice_stats_get(struct rte_eth_dev *dev,
|
||||
struct rte_eth_stats *stats);
|
||||
static void ice_stats_reset(struct rte_eth_dev *dev);
|
||||
static int ice_stats_reset(struct rte_eth_dev *dev);
|
||||
static int ice_xstats_get(struct rte_eth_dev *dev,
|
||||
struct rte_eth_xstat *xstats, unsigned int n);
|
||||
static int ice_xstats_get_names(struct rte_eth_dev *dev,
|
||||
@ -3750,7 +3750,7 @@ ice_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
|
||||
}
|
||||
|
||||
/* Reset the statistics */
|
||||
static void
|
||||
static int
|
||||
ice_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct ice_pf *pf = ICE_DEV_PRIVATE_TO_PF(dev->data->dev_private);
|
||||
@ -3763,6 +3763,8 @@ ice_stats_reset(struct rte_eth_dev *dev)
|
||||
|
||||
/* read the stats, reading current register values into offset */
|
||||
ice_read_stats_registers(pf, hw);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static uint32_t
|
||||
|
@ -2047,7 +2047,7 @@ uint16_t port_id)
|
||||
0);
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
ipn3ke_rpst_stats_reset(struct rte_eth_dev *ethdev)
|
||||
{
|
||||
uint16_t port_id = 0;
|
||||
@ -2058,18 +2058,18 @@ ipn3ke_rpst_stats_reset(struct rte_eth_dev *ethdev)
|
||||
|
||||
if (!ethdev) {
|
||||
IPN3KE_AFU_PMD_ERR("ethernet device to reset is NULL!");
|
||||
return;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
afu_dev = RTE_ETH_DEV_TO_AFU(ethdev);
|
||||
if (!afu_dev) {
|
||||
IPN3KE_AFU_PMD_ERR("afu device to reset is NULL!");
|
||||
return;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!afu_dev->shared.data) {
|
||||
IPN3KE_AFU_PMD_ERR("hardware data to reset is NULL!");
|
||||
return;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
hw = afu_dev->shared.data;
|
||||
@ -2077,7 +2077,7 @@ ipn3ke_rpst_stats_reset(struct rte_eth_dev *ethdev)
|
||||
ch = ethdev->data->name;
|
||||
if (!ch) {
|
||||
IPN3KE_AFU_PMD_ERR("ethdev name is NULL!");
|
||||
return;
|
||||
return -EINVAL;
|
||||
}
|
||||
while (ch) {
|
||||
if (*ch == '_')
|
||||
@ -2088,7 +2088,7 @@ ipn3ke_rpst_stats_reset(struct rte_eth_dev *ethdev)
|
||||
}
|
||||
if (!ch) {
|
||||
IPN3KE_AFU_PMD_ERR("Can not get port_id from ethdev name!");
|
||||
return;
|
||||
return -EINVAL;
|
||||
}
|
||||
port_id = atoi(ch);
|
||||
|
||||
@ -2104,6 +2104,8 @@ ipn3ke_rpst_stats_reset(struct rte_eth_dev *ethdev)
|
||||
ipn3ke_rpst_10g_lineside_tx_stats_reset(hw, port_id);
|
||||
ipn3ke_rpst_10g_lineside_rx_stats_reset(hw, port_id);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -164,8 +164,8 @@ static int ixgbevf_dev_xstats_get(struct rte_eth_dev *dev,
|
||||
static int
|
||||
ixgbe_dev_xstats_get_by_id(struct rte_eth_dev *dev, const uint64_t *ids,
|
||||
uint64_t *values, unsigned int n);
|
||||
static void ixgbe_dev_stats_reset(struct rte_eth_dev *dev);
|
||||
static void ixgbe_dev_xstats_reset(struct rte_eth_dev *dev);
|
||||
static int ixgbe_dev_stats_reset(struct rte_eth_dev *dev);
|
||||
static int ixgbe_dev_xstats_reset(struct rte_eth_dev *dev);
|
||||
static int ixgbe_dev_xstats_get_names(struct rte_eth_dev *dev,
|
||||
struct rte_eth_xstat_name *xstats_names,
|
||||
unsigned int size);
|
||||
@ -255,7 +255,7 @@ static void ixgbevf_intr_disable(struct rte_eth_dev *dev);
|
||||
static void ixgbevf_intr_enable(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_dev_stats_reset(struct rte_eth_dev *dev);
|
||||
static int ixgbevf_vlan_filter_set(struct rte_eth_dev *dev,
|
||||
uint16_t vlan_id, int on);
|
||||
static void ixgbevf_vlan_strip_queue_set(struct rte_eth_dev *dev,
|
||||
@ -3317,7 +3317,7 @@ ixgbe_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
ixgbe_dev_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct ixgbe_hw_stats *stats =
|
||||
@ -3328,6 +3328,8 @@ ixgbe_dev_stats_reset(struct rte_eth_dev *dev)
|
||||
|
||||
/* Reset software totals */
|
||||
memset(stats, 0, sizeof(*stats));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* This function calculates the number of xstats based on the current config */
|
||||
@ -3649,7 +3651,7 @@ ixgbe_dev_xstats_get_by_id(struct rte_eth_dev *dev, const uint64_t *ids,
|
||||
return n;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
ixgbe_dev_xstats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct ixgbe_hw_stats *stats =
|
||||
@ -3666,6 +3668,8 @@ ixgbe_dev_xstats_reset(struct rte_eth_dev *dev)
|
||||
/* Reset software totals */
|
||||
memset(stats, 0, sizeof(*stats));
|
||||
memset(macsec_stats, 0, sizeof(*macsec_stats));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
@ -3740,7 +3744,7 @@ ixgbevf_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
ixgbevf_dev_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct ixgbevf_hw_stats *hw_stats = (struct ixgbevf_hw_stats *)
|
||||
@ -3754,6 +3758,8 @@ ixgbevf_dev_stats_reset(struct rte_eth_dev *dev)
|
||||
hw_stats->vfgorc = 0;
|
||||
hw_stats->vfgptc = 0;
|
||||
hw_stats->vfgotc = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -318,7 +318,7 @@ eth_kni_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
eth_kni_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct rte_eth_dev_data *data = dev->data;
|
||||
@ -335,6 +335,8 @@ eth_kni_stats_reset(struct rte_eth_dev *dev)
|
||||
q->tx.pkts = 0;
|
||||
q->tx.bytes = 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct eth_dev_ops eth_kni_ops = {
|
||||
|
@ -243,17 +243,18 @@ lio_dev_xstats_get_names(struct rte_eth_dev *eth_dev,
|
||||
}
|
||||
|
||||
/* Reset hw stats for the port */
|
||||
static void
|
||||
static int
|
||||
lio_dev_xstats_reset(struct rte_eth_dev *eth_dev)
|
||||
{
|
||||
struct lio_device *lio_dev = LIO_DEV(eth_dev);
|
||||
struct lio_dev_ctrl_cmd ctrl_cmd;
|
||||
struct lio_ctrl_pkt ctrl_pkt;
|
||||
int ret;
|
||||
|
||||
if (!lio_dev->intf_open) {
|
||||
lio_dev_err(lio_dev, "Port %d down\n",
|
||||
lio_dev->port_id);
|
||||
return;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* flush added to prevent cmd failure
|
||||
@ -270,19 +271,21 @@ lio_dev_xstats_reset(struct rte_eth_dev *eth_dev)
|
||||
ctrl_pkt.ncmd.s.cmd = LIO_CMD_CLEAR_STATS;
|
||||
ctrl_pkt.ctrl_cmd = &ctrl_cmd;
|
||||
|
||||
if (lio_send_ctrl_pkt(lio_dev, &ctrl_pkt)) {
|
||||
ret = lio_send_ctrl_pkt(lio_dev, &ctrl_pkt);
|
||||
if (ret != 0) {
|
||||
lio_dev_err(lio_dev, "Failed to send clear stats command\n");
|
||||
return;
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (lio_wait_for_ctrl_cmd(lio_dev, &ctrl_cmd)) {
|
||||
ret = lio_wait_for_ctrl_cmd(lio_dev, &ctrl_cmd);
|
||||
if (ret != 0) {
|
||||
lio_dev_err(lio_dev, "Clear stats command timed out\n");
|
||||
return;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* clear stored per queue stats */
|
||||
RTE_FUNC_PTR_OR_RET(*eth_dev->dev_ops->stats_reset);
|
||||
(*eth_dev->dev_ops->stats_reset)(eth_dev);
|
||||
RTE_FUNC_PTR_OR_ERR_RET(*eth_dev->dev_ops->stats_reset, 0);
|
||||
return (*eth_dev->dev_ops->stats_reset)(eth_dev);
|
||||
}
|
||||
|
||||
/* Retrieve the device statistics (# packets in/out, # bytes in/out, etc */
|
||||
@ -338,7 +341,7 @@ lio_dev_stats_get(struct rte_eth_dev *eth_dev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
lio_dev_stats_reset(struct rte_eth_dev *eth_dev)
|
||||
{
|
||||
struct lio_device *lio_dev = LIO_DEV(eth_dev);
|
||||
@ -365,6 +368,8 @@ lio_dev_stats_reset(struct rte_eth_dev *eth_dev)
|
||||
memset(oq_stats, 0, sizeof(struct lio_droq_stats));
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -968,7 +968,7 @@ memif_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
memif_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct pmd_internals *pmd = dev->data->dev_private;
|
||||
@ -987,6 +987,8 @@ memif_stats_reset(struct rte_eth_dev *dev)
|
||||
mq->n_pkts = 0;
|
||||
mq->n_bytes = 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -217,7 +217,7 @@ int mlx4_set_mc_addr_list(struct rte_eth_dev *dev, struct rte_ether_addr *list,
|
||||
uint32_t num);
|
||||
int mlx4_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on);
|
||||
int mlx4_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats);
|
||||
void mlx4_stats_reset(struct rte_eth_dev *dev);
|
||||
int mlx4_stats_reset(struct rte_eth_dev *dev);
|
||||
int mlx4_fw_version_get(struct rte_eth_dev *dev, char *fw_ver, size_t fw_size);
|
||||
int mlx4_dev_infos_get(struct rte_eth_dev *dev,
|
||||
struct rte_eth_dev_info *info);
|
||||
|
@ -746,8 +746,11 @@ mlx4_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
|
||||
*
|
||||
* @param dev
|
||||
* Pointer to Ethernet device structure.
|
||||
*
|
||||
* @return
|
||||
* alwasy 0 on success
|
||||
*/
|
||||
void
|
||||
int
|
||||
mlx4_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
unsigned int i;
|
||||
@ -768,6 +771,8 @@ mlx4_stats_reset(struct rte_eth_dev *dev)
|
||||
.idx = txq->stats.idx,
|
||||
};
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -769,10 +769,10 @@ void mlx5_allmulticast_disable(struct rte_eth_dev *dev);
|
||||
|
||||
void mlx5_stats_init(struct rte_eth_dev *dev);
|
||||
int mlx5_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats);
|
||||
void mlx5_stats_reset(struct rte_eth_dev *dev);
|
||||
int mlx5_stats_reset(struct rte_eth_dev *dev);
|
||||
int mlx5_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *stats,
|
||||
unsigned int n);
|
||||
void mlx5_xstats_reset(struct rte_eth_dev *dev);
|
||||
int mlx5_xstats_reset(struct rte_eth_dev *dev);
|
||||
int mlx5_xstats_get_names(struct rte_eth_dev *dev __rte_unused,
|
||||
struct rte_eth_xstat_name *xstats_names,
|
||||
unsigned int n);
|
||||
|
@ -434,8 +434,11 @@ mlx5_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
|
||||
*
|
||||
* @param dev
|
||||
* Pointer to Ethernet device structure.
|
||||
*
|
||||
* @return
|
||||
* always 0 on success and stats is reset
|
||||
*/
|
||||
void
|
||||
int
|
||||
mlx5_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct mlx5_priv *priv = dev->data->dev_private;
|
||||
@ -458,6 +461,8 @@ mlx5_stats_reset(struct rte_eth_dev *dev)
|
||||
#ifndef MLX5_PMD_SOFT_COUNTERS
|
||||
/* FIXME: reset hardware counters. */
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -465,8 +470,12 @@ mlx5_stats_reset(struct rte_eth_dev *dev)
|
||||
*
|
||||
* @param dev
|
||||
* Pointer to Ethernet device structure.
|
||||
*
|
||||
* @return
|
||||
* 0 on success and stats is reset, negative errno value otherwise and
|
||||
* rte_errno is set.
|
||||
*/
|
||||
void
|
||||
int
|
||||
mlx5_xstats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct mlx5_priv *priv = dev->data->dev_private;
|
||||
@ -481,7 +490,7 @@ mlx5_xstats_reset(struct rte_eth_dev *dev)
|
||||
if (stats_n < 0) {
|
||||
DRV_LOG(ERR, "port %u cannot get stats: %s", dev->data->port_id,
|
||||
strerror(-stats_n));
|
||||
return;
|
||||
return stats_n;
|
||||
}
|
||||
if (xstats_ctrl->stats_n != stats_n)
|
||||
mlx5_stats_init(dev);
|
||||
@ -489,10 +498,12 @@ mlx5_xstats_reset(struct rte_eth_dev *dev)
|
||||
if (ret) {
|
||||
DRV_LOG(ERR, "port %u cannot read device counters: %s",
|
||||
dev->data->port_id, strerror(rte_errno));
|
||||
return;
|
||||
return ret;
|
||||
}
|
||||
for (i = 0; i != n; ++i)
|
||||
xstats_ctrl->base[i] = counters[i];
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -48,7 +48,7 @@ struct mvneta_ifnames {
|
||||
|
||||
static int mvneta_dev_num;
|
||||
|
||||
static void mvneta_stats_reset(struct rte_eth_dev *dev);
|
||||
static int mvneta_stats_reset(struct rte_eth_dev *dev);
|
||||
static int rte_pmd_mvneta_remove(struct rte_vdev_device *vdev);
|
||||
|
||||
|
||||
@ -736,19 +736,24 @@ mvneta_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
|
||||
*
|
||||
* @param dev
|
||||
* Pointer to Ethernet device structure.
|
||||
*
|
||||
* @return
|
||||
* 0 on success, negative error value otherwise.
|
||||
*/
|
||||
static void
|
||||
static int
|
||||
mvneta_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct mvneta_priv *priv = dev->data->dev_private;
|
||||
unsigned int ret;
|
||||
|
||||
if (!priv->ppio)
|
||||
return;
|
||||
return 0;
|
||||
|
||||
ret = mvneta_stats_get(dev, &priv->prev_stats);
|
||||
if (unlikely(ret))
|
||||
RTE_LOG(ERR, PMD, "Failed to reset port statistics");
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
@ -1315,15 +1315,18 @@ mrvl_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
|
||||
*
|
||||
* @param dev
|
||||
* Pointer to Ethernet device structure.
|
||||
*
|
||||
* @return
|
||||
* 0 on success, negative error value otherwise.
|
||||
*/
|
||||
static void
|
||||
static int
|
||||
mrvl_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct mrvl_priv *priv = dev->data->dev_private;
|
||||
int i;
|
||||
|
||||
if (!priv->ppio)
|
||||
return;
|
||||
return 0;
|
||||
|
||||
for (i = 0; i < dev->data->nb_rx_queues; i++) {
|
||||
struct mrvl_rxq *rxq = dev->data->rx_queues[i];
|
||||
@ -1341,7 +1344,7 @@ mrvl_stats_reset(struct rte_eth_dev *dev)
|
||||
txq->bytes_sent = 0;
|
||||
}
|
||||
|
||||
pp2_ppio_get_statistics(priv->ppio, NULL, 1);
|
||||
return pp2_ppio_get_statistics(priv->ppio, NULL, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1392,11 +1395,14 @@ mrvl_xstats_get(struct rte_eth_dev *dev,
|
||||
*
|
||||
* @param dev
|
||||
* Pointer to Ethernet device structure.
|
||||
*
|
||||
* @return
|
||||
* 0 on success, negative error value otherwise.
|
||||
*/
|
||||
static void
|
||||
static int
|
||||
mrvl_xstats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
mrvl_stats_reset(dev);
|
||||
return mrvl_stats_reset(dev);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -630,7 +630,7 @@ static int hn_dev_stats_get(struct rte_eth_dev *dev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
hn_dev_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
unsigned int i;
|
||||
@ -653,13 +653,20 @@ hn_dev_stats_reset(struct rte_eth_dev *dev)
|
||||
|
||||
memset(&rxq->stats, 0, sizeof(struct hn_stats));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
hn_dev_xstats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
hn_dev_stats_reset(dev);
|
||||
hn_vf_xstats_reset(dev);
|
||||
int ret;
|
||||
|
||||
ret = hn_dev_stats_reset(dev);
|
||||
if (ret != 0)
|
||||
return 0;
|
||||
|
||||
return hn_vf_xstats_reset(dev);
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -235,14 +235,14 @@ int hn_vf_rx_queue_setup(struct rte_eth_dev *dev,
|
||||
void hn_vf_rx_queue_release(struct hn_data *hv, uint16_t queue_id);
|
||||
|
||||
int hn_vf_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats);
|
||||
void hn_vf_stats_reset(struct rte_eth_dev *dev);
|
||||
int hn_vf_stats_reset(struct rte_eth_dev *dev);
|
||||
int hn_vf_xstats_get_names(struct rte_eth_dev *dev,
|
||||
struct rte_eth_xstat_name *xstats_names,
|
||||
unsigned int size);
|
||||
int hn_vf_xstats_get(struct rte_eth_dev *dev,
|
||||
struct rte_eth_xstat *xstats,
|
||||
unsigned int offset, unsigned int n);
|
||||
void hn_vf_xstats_reset(struct rte_eth_dev *dev);
|
||||
int hn_vf_xstats_reset(struct rte_eth_dev *dev);
|
||||
int hn_vf_rss_hash_update(struct rte_eth_dev *dev,
|
||||
struct rte_eth_rss_conf *rss_conf);
|
||||
int hn_vf_reta_hash_update(struct rte_eth_dev *dev,
|
||||
|
@ -395,9 +395,9 @@ void hn_vf_close(struct rte_eth_dev *dev)
|
||||
rte_spinlock_unlock(&hv->vf_lock);
|
||||
}
|
||||
|
||||
void hn_vf_stats_reset(struct rte_eth_dev *dev)
|
||||
int hn_vf_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
VF_ETHDEV_FUNC(dev, rte_eth_stats_reset);
|
||||
VF_ETHDEV_FUNC_RET_STATUS(dev, rte_eth_stats_reset);
|
||||
}
|
||||
|
||||
void hn_vf_allmulticast_enable(struct rte_eth_dev *dev)
|
||||
@ -573,16 +573,21 @@ int hn_vf_xstats_get(struct rte_eth_dev *dev,
|
||||
return count;
|
||||
}
|
||||
|
||||
void hn_vf_xstats_reset(struct rte_eth_dev *dev)
|
||||
int hn_vf_xstats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct hn_data *hv = dev->data->dev_private;
|
||||
struct rte_eth_dev *vf_dev;
|
||||
int ret;
|
||||
|
||||
rte_spinlock_lock(&hv->vf_lock);
|
||||
vf_dev = hn_get_vf_dev(hv);
|
||||
if (vf_dev)
|
||||
rte_eth_xstats_reset(vf_dev->data->port_id);
|
||||
ret = rte_eth_xstats_reset(vf_dev->data->port_id);
|
||||
else
|
||||
ret = -EINVAL;
|
||||
rte_spinlock_unlock(&hv->vf_lock);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int hn_vf_rss_hash_update(struct rte_eth_dev *dev,
|
||||
|
@ -52,7 +52,7 @@ nfb_eth_stats_get(struct rte_eth_dev *dev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
int
|
||||
nfb_eth_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
uint16_t i;
|
||||
@ -74,4 +74,6 @@ nfb_eth_stats_reset(struct rte_eth_dev *dev)
|
||||
tx_queue[i].tx_bytes = 0;
|
||||
tx_queue[i].err_pkts = 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -31,8 +31,11 @@ nfb_eth_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats);
|
||||
*
|
||||
* @param dev
|
||||
* Pointer to Ethernet device structure.
|
||||
*
|
||||
* @return
|
||||
* 0 on success, negative errno value otherwise.
|
||||
*/
|
||||
void
|
||||
int
|
||||
nfb_eth_stats_reset(struct rte_eth_dev *dev);
|
||||
|
||||
#endif /* _NFB_STATS_H_ */
|
||||
|
@ -105,7 +105,7 @@ static int nfp_net_tx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx,
|
||||
static int nfp_net_start(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 int nfp_net_stats_reset(struct rte_eth_dev *dev);
|
||||
static void nfp_net_stop(struct rte_eth_dev *dev);
|
||||
static uint16_t nfp_net_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,
|
||||
uint16_t nb_pkts);
|
||||
@ -1149,7 +1149,7 @@ nfp_net_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
nfp_net_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
int i;
|
||||
@ -1210,6 +1210,8 @@ nfp_net_stats_reset(struct rte_eth_dev *dev)
|
||||
|
||||
hw->eth_stats_base.imissed =
|
||||
nn_cfg_readq(hw, NFP_NET_CFG_STATS_RX_DISCARDS);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -315,20 +315,22 @@ eth_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *igb_stats)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
eth_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
unsigned i;
|
||||
struct pmd_internals *internal;
|
||||
|
||||
if (dev == NULL)
|
||||
return;
|
||||
return -EINVAL;
|
||||
|
||||
internal = dev->data->dev_private;
|
||||
for (i = 0; i < RTE_DIM(internal->rx_null_queues); i++)
|
||||
internal->rx_null_queues[i].rx_pkts.cnt = 0;
|
||||
for (i = 0; i < RTE_DIM(internal->tx_null_queues); i++)
|
||||
internal->tx_null_queues[i].tx_pkts.cnt = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -228,12 +228,12 @@ octeontx_port_stats(struct octeontx_nic *nic, struct rte_eth_stats *stats)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
octeontx_port_stats_clr(struct octeontx_nic *nic)
|
||||
{
|
||||
PMD_INIT_FUNC_TRACE();
|
||||
|
||||
octeontx_bgx_port_stats_clr(nic->port_id);
|
||||
return octeontx_bgx_port_stats_clr(nic->port_id);
|
||||
}
|
||||
|
||||
static inline void
|
||||
@ -549,13 +549,13 @@ octeontx_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
|
||||
return octeontx_port_stats(nic, stats);
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
octeontx_dev_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct octeontx_nic *nic = octeontx_pmd_priv(dev);
|
||||
|
||||
PMD_INIT_FUNC_TRACE();
|
||||
octeontx_port_stats_clr(nic);
|
||||
return octeontx_port_stats_clr(nic);
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -422,7 +422,7 @@ void otx2_nix_cqe_dump(const struct nix_cqe_hdr_s *cq);
|
||||
/* Stats */
|
||||
int otx2_nix_dev_stats_get(struct rte_eth_dev *eth_dev,
|
||||
struct rte_eth_stats *stats);
|
||||
void otx2_nix_dev_stats_reset(struct rte_eth_dev *eth_dev);
|
||||
int otx2_nix_dev_stats_reset(struct rte_eth_dev *eth_dev);
|
||||
|
||||
int otx2_nix_queue_stats_mapping(struct rte_eth_dev *dev,
|
||||
uint16_t queue_id, uint8_t stat_idx,
|
||||
@ -432,7 +432,7 @@ int otx2_nix_xstats_get(struct rte_eth_dev *eth_dev,
|
||||
int otx2_nix_xstats_get_names(struct rte_eth_dev *eth_dev,
|
||||
struct rte_eth_xstat_name *xstats_names,
|
||||
unsigned int limit);
|
||||
void otx2_nix_xstats_reset(struct rte_eth_dev *eth_dev);
|
||||
int otx2_nix_xstats_reset(struct rte_eth_dev *eth_dev);
|
||||
|
||||
int otx2_nix_xstats_get_by_id(struct rte_eth_dev *eth_dev,
|
||||
const uint64_t *ids,
|
||||
|
@ -131,14 +131,16 @@ otx2_nix_dev_stats_get(struct rte_eth_dev *eth_dev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
int
|
||||
otx2_nix_dev_stats_reset(struct rte_eth_dev *eth_dev)
|
||||
{
|
||||
struct otx2_eth_dev *dev = otx2_eth_pmd_priv(eth_dev);
|
||||
struct otx2_mbox *mbox = dev->mbox;
|
||||
|
||||
otx2_mbox_alloc_msg_nix_stats_rst(mbox);
|
||||
otx2_mbox_process(mbox);
|
||||
if (otx2_mbox_alloc_msg_nix_stats_rst(mbox) == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
return otx2_mbox_process(mbox);
|
||||
}
|
||||
|
||||
int
|
||||
@ -296,7 +298,7 @@ otx2_nix_xstats_get_by_id(struct rte_eth_dev *eth_dev, const uint64_t *ids,
|
||||
return n;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
nix_queue_stats_reset(struct rte_eth_dev *eth_dev)
|
||||
{
|
||||
struct otx2_eth_dev *dev = otx2_eth_pmd_priv(eth_dev);
|
||||
@ -314,7 +316,7 @@ nix_queue_stats_reset(struct rte_eth_dev *eth_dev)
|
||||
rc = otx2_mbox_process_msg(mbox, (void *)&rsp);
|
||||
if (rc) {
|
||||
otx2_err("Failed to read rq context");
|
||||
return;
|
||||
return rc;
|
||||
}
|
||||
aq = otx2_mbox_alloc_msg_nix_aq_enq(mbox);
|
||||
aq->qidx = i;
|
||||
@ -336,7 +338,7 @@ nix_queue_stats_reset(struct rte_eth_dev *eth_dev)
|
||||
rc = otx2_mbox_process(mbox);
|
||||
if (rc) {
|
||||
otx2_err("Failed to write rq context");
|
||||
return;
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
|
||||
@ -348,7 +350,7 @@ nix_queue_stats_reset(struct rte_eth_dev *eth_dev)
|
||||
rc = otx2_mbox_process_msg(mbox, (void *)&rsp);
|
||||
if (rc) {
|
||||
otx2_err("Failed to read sq context");
|
||||
return;
|
||||
return rc;
|
||||
}
|
||||
aq = otx2_mbox_alloc_msg_nix_aq_enq(mbox);
|
||||
aq->qidx = i;
|
||||
@ -368,20 +370,27 @@ nix_queue_stats_reset(struct rte_eth_dev *eth_dev)
|
||||
rc = otx2_mbox_process(mbox);
|
||||
if (rc) {
|
||||
otx2_err("Failed to write sq context");
|
||||
return;
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
int
|
||||
otx2_nix_xstats_reset(struct rte_eth_dev *eth_dev)
|
||||
{
|
||||
struct otx2_eth_dev *dev = otx2_eth_pmd_priv(eth_dev);
|
||||
struct otx2_mbox *mbox = dev->mbox;
|
||||
int ret;
|
||||
|
||||
otx2_mbox_alloc_msg_nix_stats_rst(mbox);
|
||||
otx2_mbox_process(mbox);
|
||||
if (otx2_mbox_alloc_msg_nix_stats_rst(mbox) == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
ret = otx2_mbox_process(mbox);
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
|
||||
/* Reset queue stats */
|
||||
nix_queue_stats_reset(eth_dev);
|
||||
return nix_queue_stats_reset(eth_dev);
|
||||
}
|
||||
|
@ -703,7 +703,7 @@ eth_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
eth_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
unsigned int i;
|
||||
@ -719,6 +719,8 @@ eth_stats_reset(struct rte_eth_dev *dev)
|
||||
internal->tx_queue[i].tx_stat.bytes = 0;
|
||||
internal->tx_queue[i].tx_stat.err_pkts = 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1710,7 +1710,7 @@ qede_get_xstats(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
|
||||
return stat_idx;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
qede_reset_xstats(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct qede_dev *qdev = dev->data->dev_private;
|
||||
@ -1718,6 +1718,8 @@ qede_reset_xstats(struct rte_eth_dev *dev)
|
||||
|
||||
ecore_reset_vport_stats(edev);
|
||||
qede_reset_queue_stats(qdev, true);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int qede_dev_set_link_state(struct rte_eth_dev *eth_dev, bool link_up)
|
||||
@ -1747,13 +1749,15 @@ static int qede_dev_set_link_down(struct rte_eth_dev *eth_dev)
|
||||
return qede_dev_set_link_state(eth_dev, false);
|
||||
}
|
||||
|
||||
static void qede_reset_stats(struct rte_eth_dev *eth_dev)
|
||||
static int qede_reset_stats(struct rte_eth_dev *eth_dev)
|
||||
{
|
||||
struct qede_dev *qdev = eth_dev->data->dev_private;
|
||||
struct ecore_dev *edev = &qdev->edev;
|
||||
|
||||
ecore_reset_vport_stats(edev);
|
||||
qede_reset_queue_stats(qdev, false);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void qede_allmulticast_enable(struct rte_eth_dev *eth_dev)
|
||||
|
@ -191,7 +191,7 @@ eth_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
eth_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
unsigned int i;
|
||||
@ -201,6 +201,8 @@ eth_stats_reset(struct rte_eth_dev *dev)
|
||||
internal->rx_ring_queues[i].rx_pkts.cnt = 0;
|
||||
for (i = 0; i < dev->data->nb_tx_queues; i++)
|
||||
internal->tx_ring_queues[i].tx_pkts.cnt = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -637,7 +637,7 @@ sfc_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
|
||||
return -ret;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
sfc_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev);
|
||||
@ -650,12 +650,15 @@ sfc_stats_reset(struct rte_eth_dev *dev)
|
||||
* will be scheduled to be done during the next port start
|
||||
*/
|
||||
port->mac_stats_reset_pending = B_TRUE;
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
rc = sfc_port_reset_mac_stats(sa);
|
||||
if (rc != 0)
|
||||
sfc_err(sa, "failed to reset statistics (rc = %d)", rc);
|
||||
|
||||
SFC_ASSERT(rc >= 0);
|
||||
return -rc;
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -1111,7 +1111,7 @@ eth_stats_get(struct rte_eth_dev *dev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
eth_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
uint16_t i;
|
||||
@ -1130,6 +1130,8 @@ eth_stats_reset(struct rte_eth_dev *dev)
|
||||
txq->tx_bytes = 0;
|
||||
txq->err_pkts = 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -986,7 +986,7 @@ tap_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *tap_stats)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
tap_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
int i;
|
||||
@ -1002,6 +1002,8 @@ tap_stats_reset(struct rte_eth_dev *dev)
|
||||
pmd->txq[i].stats.errs = 0;
|
||||
pmd->txq[i].stats.obytes = 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -362,7 +362,7 @@ nicvf_dev_supported_ptypes_get(struct rte_eth_dev *dev)
|
||||
return ptypes;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
nicvf_dev_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
int i;
|
||||
@ -370,6 +370,7 @@ nicvf_dev_stats_reset(struct rte_eth_dev *dev)
|
||||
struct nicvf *nic = nicvf_pmd_priv(dev);
|
||||
uint16_t rx_start, rx_end;
|
||||
uint16_t tx_start, tx_end;
|
||||
int ret;
|
||||
|
||||
/* Reset all primary nic counters */
|
||||
nicvf_rx_range(dev, nic, &rx_start, &rx_end);
|
||||
@ -380,7 +381,9 @@ nicvf_dev_stats_reset(struct rte_eth_dev *dev)
|
||||
for (i = tx_start; i <= tx_end; i++)
|
||||
txqs |= (0x3 << (i * 2));
|
||||
|
||||
nicvf_mbox_reset_stat_counters(nic, 0x3FFF, 0x1F, rxqs, txqs);
|
||||
ret = nicvf_mbox_reset_stat_counters(nic, 0x3FFF, 0x1F, rxqs, txqs);
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
|
||||
/* Reset secondary nic queue counters */
|
||||
for (i = 0; i < nic->sqs_count; i++) {
|
||||
@ -396,8 +399,12 @@ nicvf_dev_stats_reset(struct rte_eth_dev *dev)
|
||||
for (i = tx_start; i <= tx_end; i++)
|
||||
txqs |= (0x3 << ((i % MAX_SND_QUEUES_PER_QS) * 2));
|
||||
|
||||
nicvf_mbox_reset_stat_counters(snic, 0, 0, rxqs, txqs);
|
||||
ret = nicvf_mbox_reset_stat_counters(snic, 0, 0, rxqs, txqs);
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Promiscuous mode enabled by default in LMAC to VF 1:1 map configuration */
|
||||
|
@ -216,7 +216,7 @@ static const struct vhost_xstats_name_off vhost_txport_stat_strings[] = {
|
||||
#define VHOST_NB_XSTATS_TXPORT (sizeof(vhost_txport_stat_strings) / \
|
||||
sizeof(vhost_txport_stat_strings[0]))
|
||||
|
||||
static void
|
||||
static int
|
||||
vhost_dev_xstats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct vhost_queue *vq = NULL;
|
||||
@ -234,6 +234,8 @@ vhost_dev_xstats_reset(struct rte_eth_dev *dev)
|
||||
continue;
|
||||
memset(&vq->stats, 0, sizeof(vq->stats));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
@ -1119,7 +1121,7 @@ eth_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
eth_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct vhost_queue *vq;
|
||||
@ -1140,6 +1142,8 @@ eth_stats_reset(struct rte_eth_dev *dev)
|
||||
vq->stats.bytes = 0;
|
||||
vq->stats.missed_pkts = 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -61,7 +61,7 @@ static int virtio_dev_xstats_get(struct rte_eth_dev *dev,
|
||||
static int virtio_dev_xstats_get_names(struct rte_eth_dev *dev,
|
||||
struct rte_eth_xstat_name *xstats_names,
|
||||
unsigned limit);
|
||||
static void virtio_dev_stats_reset(struct rte_eth_dev *dev);
|
||||
static int virtio_dev_stats_reset(struct rte_eth_dev *dev);
|
||||
static void virtio_dev_free_mbufs(struct rte_eth_dev *dev);
|
||||
static int virtio_vlan_filter_set(struct rte_eth_dev *dev,
|
||||
uint16_t vlan_id, int on);
|
||||
@ -1076,7 +1076,7 @@ virtio_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
virtio_dev_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
unsigned int i;
|
||||
@ -1107,6 +1107,8 @@ virtio_dev_stats_reset(struct rte_eth_dev *dev)
|
||||
memset(rxvq->stats.size_bins, 0,
|
||||
sizeof(rxvq->stats.size_bins[0]) * 8);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -76,7 +76,7 @@ static int vmxnet3_dev_link_update(struct rte_eth_dev *dev,
|
||||
static void vmxnet3_hw_stats_save(struct vmxnet3_hw *hw);
|
||||
static int vmxnet3_dev_stats_get(struct rte_eth_dev *dev,
|
||||
struct rte_eth_stats *stats);
|
||||
static void vmxnet3_dev_stats_reset(struct rte_eth_dev *dev);
|
||||
static int vmxnet3_dev_stats_reset(struct rte_eth_dev *dev);
|
||||
static int vmxnet3_dev_xstats_get_names(struct rte_eth_dev *dev,
|
||||
struct rte_eth_xstat_name *xstats,
|
||||
unsigned int n);
|
||||
@ -1125,7 +1125,7 @@ vmxnet3_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
vmxnet3_dev_stats_reset(struct rte_eth_dev *dev)
|
||||
{
|
||||
unsigned int i;
|
||||
@ -1147,6 +1147,8 @@ vmxnet3_dev_stats_reset(struct rte_eth_dev *dev)
|
||||
memcpy(&hw->snapshot_rx_stats[i], &rxStats,
|
||||
sizeof(hw->snapshot_rx_stats[0]));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -2039,12 +2039,16 @@ int
|
||||
rte_eth_stats_reset(uint16_t port_id)
|
||||
{
|
||||
struct rte_eth_dev *dev;
|
||||
int ret;
|
||||
|
||||
RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
|
||||
dev = &rte_eth_devices[port_id];
|
||||
|
||||
RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->stats_reset, -ENOTSUP);
|
||||
(*dev->dev_ops->stats_reset)(dev);
|
||||
ret = (*dev->dev_ops->stats_reset)(dev);
|
||||
if (ret != 0)
|
||||
return eth_err(port_id, ret);
|
||||
|
||||
dev->data->rx_mbuf_alloc_failed = 0;
|
||||
|
||||
return 0;
|
||||
@ -2529,10 +2533,8 @@ rte_eth_xstats_reset(uint16_t port_id)
|
||||
dev = &rte_eth_devices[port_id];
|
||||
|
||||
/* implemented by the driver */
|
||||
if (dev->dev_ops->xstats_reset != NULL) {
|
||||
(*dev->dev_ops->xstats_reset)(dev);
|
||||
return 0;
|
||||
}
|
||||
if (dev->dev_ops->xstats_reset != NULL)
|
||||
return eth_err(port_id, (*dev->dev_ops->xstats_reset)(dev));
|
||||
|
||||
/* fallback to default */
|
||||
return rte_eth_stats_reset(port_id);
|
||||
|
@ -2137,6 +2137,7 @@ int rte_eth_stats_get(uint16_t port_id, struct rte_eth_stats *stats);
|
||||
* - (0) if device notified to reset stats.
|
||||
* - (-ENOTSUP) if hardware doesn't support.
|
||||
* - (-ENODEV) if *port_id* invalid.
|
||||
* - (<0): Error code of the driver stats reset function.
|
||||
*/
|
||||
int rte_eth_stats_reset(uint16_t port_id);
|
||||
|
||||
@ -2289,6 +2290,7 @@ int rte_eth_xstats_get_id_by_name(uint16_t port_id, const char *xstat_name,
|
||||
* - (-ENOTSUP) if pmd doesn't support both
|
||||
* extended stats and basic stats reset.
|
||||
* - (-ENODEV) if *port_id* invalid.
|
||||
* - (<0): Error code of the driver xstats reset function.
|
||||
*/
|
||||
int rte_eth_xstats_reset(uint16_t port_id);
|
||||
|
||||
|
@ -116,8 +116,26 @@ 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. */
|
||||
|
||||
typedef void (*eth_stats_reset_t)(struct rte_eth_dev *dev);
|
||||
/**< @internal Reset global I/O statistics of an Ethernet device to 0. */
|
||||
/**
|
||||
* @internal
|
||||
* Reset global I/O statistics of an Ethernet device to 0.
|
||||
*
|
||||
* @param dev
|
||||
* ethdev handle of port.
|
||||
*
|
||||
* @return
|
||||
* Negative errno value on error, 0 on success.
|
||||
*
|
||||
* @retval 0
|
||||
* Success, statistics has been reset.
|
||||
* @retval -ENOTSUP
|
||||
* Resetting statistics is not supported.
|
||||
* @retval -EINVAL
|
||||
* Resetting statistics is not valid.
|
||||
* @retval -ENOMEM
|
||||
* Not enough memory to get the stats.
|
||||
*/
|
||||
typedef int (*eth_stats_reset_t)(struct rte_eth_dev *dev);
|
||||
|
||||
typedef int (*eth_xstats_get_t)(struct rte_eth_dev *dev,
|
||||
struct rte_eth_xstat *stats, unsigned n);
|
||||
@ -129,8 +147,26 @@ typedef int (*eth_xstats_get_by_id_t)(struct rte_eth_dev *dev,
|
||||
unsigned int n);
|
||||
/**< @internal Get extended stats of an Ethernet device. */
|
||||
|
||||
typedef void (*eth_xstats_reset_t)(struct rte_eth_dev *dev);
|
||||
/**< @internal Reset extended stats of an Ethernet device. */
|
||||
/**
|
||||
* @internal
|
||||
* Reset extended stats of an Ethernet device.
|
||||
*
|
||||
* @param dev
|
||||
* ethdev handle of port.
|
||||
*
|
||||
* @return
|
||||
* Negative errno value on error, 0 on success.
|
||||
*
|
||||
* @retval 0
|
||||
* Success, statistics has been reset.
|
||||
* @retval -ENOTSUP
|
||||
* Resetting statistics is not supported.
|
||||
* @retval -EINVAL
|
||||
* Resetting statistics is not valid.
|
||||
* @retval -ENOMEM
|
||||
* Not enough memory to get the stats.
|
||||
*/
|
||||
typedef int (*eth_xstats_reset_t)(struct rte_eth_dev *dev);
|
||||
|
||||
typedef int (*eth_xstats_get_names_t)(struct rte_eth_dev *dev,
|
||||
struct rte_eth_xstat_name *xstats_names, unsigned size);
|
||||
|
Loading…
Reference in New Issue
Block a user