net/mlx5: add missing function documentation
PATCH 1/3 net/mlx5: add missing function documentation
--- drivers/net/mlx5/mlx5_trigger.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+)
drivers/net/mlx5/mlx5_trigger.c +30 -0
@@ -14,6 +14,12 @@#include "mlx5_rxtx.h" #include "mlx5_utils.h" +/** +* Stop traffic on Tx queues. +* +* @param priv +* Pointer to private structure. +*/ static void priv_txq_stop (struct priv *priv) {
@@ -23,6 +29,15 @@ priv_txq_stop(struct priv *priv)mlx5_priv_txq_release (priv, i); } +/** +* Start traffic on Tx queues. +* +* @param priv +* Pointer to private structure. +* +* @return +* 0 on success, errno on error. +*/ static int priv_txq_start (struct priv *priv) {
@@ -58,6 +73,12 @@ priv_txq_start(struct priv *priv)return ret; } +/** +* Stop traffic on Rx queues. +* +* @param priv +* Pointer to private structure. +*/ static void priv_rxq_stop (struct priv *priv) {
@@ -67,6 +88,15 @@ priv_rxq_stop(struct priv *priv)mlx5_priv_rxq_release (priv, i); } +/** +* Start traffic on Rx queues. +* +* @param priv +* Pointer to private structure. +* +* @return +* 0 on success, errno on error. +*/ static int priv_rxq_start (struct priv *priv) {
Signature · 1 line
2.11.0
PATCH 2/3 net/mlx5: convert return errno to negative ones
--- drivers/net/mlx5/mlx5.c | 19 ++++----- drivers/net/mlx5/mlx5_ethdev.c | 30 ++++++++------ drivers/net/mlx5/mlx5_flow.c | 92 +++++++++++++++++++++-------------------- drivers/net/mlx5/mlx5_mac.c | 7 ++-- drivers/net/mlx5/mlx5_mr.c | 4 +- drivers/net/mlx5/mlx5_rss.c | 16 +++---- drivers/net/mlx5/mlx5_rxq.c | 20 ++++----- drivers/net/mlx5/mlx5_socket.c | 41 ++++++++++++------ drivers/net/mlx5/mlx5_trigger.c | 27 ++++++------ drivers/net/mlx5/mlx5_txq.c | 14 +++---- drivers/net/mlx5/mlx5_vlan.c | 2 +- 11 files changed, 145 insertions(+), 127 deletions(-)
drivers/net/mlx5/mlx5.c +7 -12
@@ -413,7 +413,7 @@ mlx5_args_check(const char *key, const char *val, void *opaque)* Device arguments structure. * * @return -* 0 on success, errno value on failure. +* 0 on success, negative errno value on failure. */ static int mlx5_args (struct mlx5_dev_config *config,struct rte_devargs *devargs)
@@ -446,7 +446,7 @@ mlx5_args(struct mlx5_dev_config *config, struct rte_devargs *devargs) mlx5_args_check, config);if (ret !=0 ) {rte_kvargs_free (kvlist); -return ret; +return -EINVAL ; } } }
@@ -472,7 +472,7 @@ static void *uar_base;* Pointer to private structure. * * @return -* 0 on success, errno value on failure. +* 0 on success, negative errno value on failure. */ static int priv_uar_init_primary (struct priv *priv)
@@ -480,7 +480,6 @@ priv_uar_init_primary(struct priv *priv)void *addr = (void *)0 ;int i;const struct rte_mem_config *mcfg; -int ret;if (uar_base) {/* UAR address space mapped. */ priv->uar_base = uar_base;
@@ -502,8 +501,7 @@ priv_uar_init_primary(struct priv *priv)if (addr ==MAP_FAILED ) {ERROR ("Failed to reserve UAR address space, please adjust " "MLX5_UAR_SIZE or try --base-virtaddr" ); - ret =ENOMEM ; -return ret; +return -ENOMEM ; }/* Accept either same addr or a new addr returned from mmap if target * range occupied.
@@ -522,13 +520,12 @@ priv_uar_init_primary(struct priv *priv)* Pointer to private structure. * * @return -* 0 on success, errno value on failure. +* 0 on success, negative errno value on failure. */ static int priv_uar_init_secondary (struct priv *priv) {void *addr; -int ret;assert (priv->uar_base);if (uar_base) {/* already reserved. */
@@ -541,15 +538,13 @@ priv_uar_init_secondary(struct priv *priv)if (addr ==MAP_FAILED ) {ERROR ("UAR mmap failed: %p size: %llu" , priv->uar_base,MLX5_UAR_SIZE ); - ret =ENXIO ; -return ret; +return -ENXIO ; }if (priv->uar_base != addr) {ERROR ("UAR address %p size %llu occupied, please adjust " "MLX5_UAR_OFFSET or try EAL parameter --base-virtaddr" , priv->uar_base,MLX5_UAR_SIZE ); - ret =ENXIO ; -return ret; +return -ENXIO ; } uar_base = addr;/* process local, don't reserve again */ INFO ("Reserved UAR address space: %p" , addr);
drivers/net/mlx5/mlx5_ethdev.c +17 -13
@@ -314,7 +314,7 @@ priv_set_flags(struct priv *priv, unsigned int keep, unsigned int flags)* Pointer to Ethernet device structure. * * @return -* 0 on success, errno value on failure. +* 0 on success, negative errno value on failure. */ static int dev_configure (struct rte_eth_dev *dev)
@@ -338,26 +338,26 @@ dev_configure(struct rte_eth_dev *dev)ERROR ("Some Tx offloads are not supported " "requested 0x%" PRIx64" supported 0x%" PRIx64, tx_offloads, supp_tx_offloads); -return ENOTSUP ; +return -ENOTSUP ; }if ((rx_offloads & supp_rx_offloads) != rx_offloads) {ERROR ("Some Rx offloads are not supported " "requested 0x%" PRIx64" supported 0x%" PRIx64, rx_offloads, supp_rx_offloads); -return ENOTSUP ; +return -ENOTSUP ; }if (use_app_rss_key && (dev->data->dev_conf.rx_adv_conf.rss_conf.rss_key_len != rss_hash_default_key_len)) {/* MLX5 RSS only support 40bytes key. */ -return EINVAL ; +return -EINVAL ; } priv->rss_conf.rss_key =rte_realloc (priv->rss_conf.rss_key, rss_hash_default_key_len,0 );if (!priv->rss_conf.rss_key) {ERROR ("cannot allocate RSS hash key memory (%u)" , rxqs_n); -return ENOMEM ; +return -ENOMEM ; } memcpy(priv->rss_conf.rss_key, use_app_rss_key ?
@@ -375,7 +375,7 @@ dev_configure(struct rte_eth_dev *dev) }if (rxqs_n > priv->config.ind_table_max_size) {ERROR ("cannot handle this many RX queues (%u)" , rxqs_n); -return EINVAL ; +return -EINVAL ; }if (rxqs_n == priv->rxqs_n)return 0 ;
@@ -389,7 +389,7 @@ dev_configure(struct rte_eth_dev *dev) priv->config.ind_table_max_size : rxqs_n));if (priv_rss_reta_index_resize (priv, reta_idx_n)) -return ENOMEM ; +return -ENOMEM ;/* When the number of RX queues is not a power of two, the remaining * table entries are padded with reused WQs and hashes are not spread * uniformly. */
@@ -420,7 +420,7 @@ mlx5_dev_configure(struct rte_eth_dev *dev) ret =dev_configure (dev);assert (ret >=0 );priv_unlock (priv); -return -ret; +return ret; }/**
@@ -1199,7 +1199,7 @@ priv_dev_interrupt_handler_install(struct priv *priv, struct rte_eth_dev *dev)* Nonzero for link up, otherwise link down. * * @return -* 0 on success, errno value on failure. +* 0 on success, -1 on error and errno is set. */ static int priv_dev_set_link (struct priv *priv,int up)
@@ -1214,7 +1214,7 @@ priv_dev_set_link(struct priv *priv, int up)* Pointer to Ethernet device structure. * * @return -* 0 on success, errno value on failure. +* 0 on success, negative errno value on failure. */ int mlx5_set_link_down (struct rte_eth_dev *dev)
@@ -1225,7 +1225,9 @@ mlx5_set_link_down(struct rte_eth_dev *dev)priv_lock (priv); err =priv_dev_set_link (priv,0 );priv_unlock (priv); -return err; +if (err ==-1 ) +return errno; +return 0 ; }/**
@@ -1235,7 +1237,7 @@ mlx5_set_link_down(struct rte_eth_dev *dev)* Pointer to Ethernet device structure. * * @return -* 0 on success, errno value on failure. +* 0 on success, negative errno value on failure. */ int mlx5_set_link_up (struct rte_eth_dev *dev)
@@ -1246,7 +1248,9 @@ mlx5_set_link_up(struct rte_eth_dev *dev)priv_lock (priv); err =priv_dev_set_link (priv,1 );priv_unlock (priv); -return err; +if (err ==-1 ) +return errno; +return 0 ; }/**
drivers/net/mlx5/mlx5_flow.c +48 -44
353 lines not on this page · raw message
drivers/net/mlx5/mlx5_mac.c +3 -4
@@ -84,14 +84,13 @@ mlx5_mac_addr_remove(struct rte_eth_dev *dev, uint32_t index)* VMDq pool index to associate address with (ignored). * * @return -* 0 on success. +* 0 on success, negative errno on error. */ int mlx5_mac_addr_add (struct rte_eth_dev *dev,struct ether_addr *mac,uint32_t index,uint32_t vmdq) {unsigned int i; -int ret =0 ; (void )vmdq;assert (index <MLX5_MAX_MAC_ADDRESSES );
@@ -103,12 +102,12 @@ mlx5_mac_addr_add(struct rte_eth_dev *dev, struct ether_addr *mac,if (memcmp (&dev->data->mac_addrs[i], mac,sizeof (*mac)))continue ;/* Address already configured elsewhere, return with error. */ -return EADDRINUSE ; +return -EADDRINUSE ; } dev->data->mac_addrs[index] = *mac;if (!dev->data->promiscuous)mlx5_traffic_restart (dev); -return ret; +return 0 ; }/**
drivers/net/mlx5/mlx5_mr.c +2 -2
@@ -333,7 +333,7 @@ priv_mr_get(struct priv *priv, struct rte_mempool *mp)* Pointer to memory region to release. * * @return -* 0 on success, errno on failure. +* 0 on success, negative errno on failure. */ int priv_mr_release (struct priv *priv,struct mlx5_mr *mr)
@@ -348,7 +348,7 @@ priv_mr_release(struct priv *priv, struct mlx5_mr *mr)rte_free (mr);return 0 ; } -return EBUSY ; +return -EBUSY ; }/**
drivers/net/mlx5/mlx5_rss.c +8 -8
@@ -106,7 +106,7 @@ mlx5_rss_hash_conf_get(struct rte_eth_dev *dev,* The size of the array to allocate. * * @return -* 0 on success, errno value on failure. +* 0 on success, negative errno value on failure. */ int priv_rss_reta_index_resize (struct priv *priv,unsigned int reta_size)
@@ -120,7 +120,7 @@ priv_rss_reta_index_resize(struct priv *priv, unsigned int reta_size) mem =rte_realloc (priv->reta_idx, reta_size *sizeof ((*priv->reta_idx)[0 ]),0 );if (!mem) -return ENOMEM ; +return -ENOMEM ; priv->reta_idx = mem; priv->reta_idx_n = reta_size;
@@ -142,7 +142,7 @@ priv_rss_reta_index_resize(struct priv *priv, unsigned int reta_size)* Number of entries. * * @return -* 0 on success, errno value on failure. +* 0 on success, negative errno value on failure. */ static int priv_dev_rss_reta_query(struct priv *priv,
@@ -153,7 +153,7 @@ priv_dev_rss_reta_query(struct priv *priv,unsigned int i;if (!reta_size || reta_size > priv->reta_idx_n) -return EINVAL ; +return -EINVAL ;/* Fill each entry of the table even if its bit is not set. */ for (idx =0 , i =0 ; (i != reta_size); ++i) { idx = i /RTE_RETA_GROUP_SIZE ;
@@ -174,7 +174,7 @@ priv_dev_rss_reta_query(struct priv *priv,* Number of entries. * * @return -* 0 on success, errno value on failure. +* 0 on success, negative errno value on failure. */ static int priv_dev_rss_reta_update(struct priv *priv,
@@ -187,7 +187,7 @@ priv_dev_rss_reta_update(struct priv *priv,int ret;if (!reta_size) -return EINVAL ; +return -EINVAL ; ret =priv_rss_reta_index_resize (priv, reta_size);if (ret)return ret;
@@ -227,7 +227,7 @@ mlx5_dev_rss_reta_query(struct rte_eth_dev *dev,priv_lock (priv); ret =priv_dev_rss_reta_query (priv, reta_conf, reta_size);priv_unlock (priv); -return -ret; +return ret; }/**
@@ -258,5 +258,5 @@ mlx5_dev_rss_reta_update(struct rte_eth_dev *dev,mlx5_dev_stop (dev);mlx5_dev_start (dev); } -return -ret; +return ret; }
drivers/net/mlx5/mlx5_rxq.c +10 -10
@@ -61,7 +61,7 @@ const size_t rss_hash_default_key_len = sizeof(rss_hash_default_key);* Pointer to RX queue structure. * * @return -* 0 on success, errno value on failure. +* 0 on success, negative errno value on failure. */ int rxq_alloc_elts (struct mlx5_rxq_ctrl *rxq_ctrl)
@@ -131,7 +131,7 @@ rxq_alloc_elts(struct mlx5_rxq_ctrl *rxq_ctrl) }DEBUG ("%p: failed, freed everything" , (void *)rxq_ctrl);assert (ret >0 ); -return ret; +return -ret; }/**
@@ -849,7 +849,7 @@ mlx5_priv_rxq_ibv_get(struct priv *priv, uint16_t idx)* Verbs Rx queue object. * * @return -* 0 on success, errno value on failure. +* 0 on success, negative errno value on failure. */ int mlx5_priv_rxq_ibv_release (struct priv *priv,struct mlx5_rxq_ibv *rxq_ibv)
@@ -876,7 +876,7 @@ mlx5_priv_rxq_ibv_release(struct priv *priv, struct mlx5_rxq_ibv *rxq_ibv)rte_free (rxq_ibv);return 0 ; } -return EBUSY ; +return -EBUSY ; }/**
@@ -1084,7 +1084,7 @@ mlx5_priv_rxq_get(struct priv *priv, uint16_t idx)* TX queue index. * * @return -* 0 on success, errno value on failure. +* 0 on success, negative errno value on failure. */ int mlx5_priv_rxq_release (struct priv *priv,uint16_t idx)
@@ -1110,7 +1110,7 @@ mlx5_priv_rxq_release(struct priv *priv, uint16_t idx) (*priv->rxqs)[idx] =NULL ;return 0 ; } -return EBUSY ; +return -EBUSY ; }/**
@@ -1266,7 +1266,7 @@ mlx5_priv_ind_table_ibv_get(struct priv *priv, uint16_t queues[],* Indirection table to release. * * @return -* 0 on success, errno value on failure. +* 0 on success, negative errno value on failure. */ int mlx5_priv_ind_table_ibv_release(struct priv *priv,
@@ -1286,7 +1286,7 @@ mlx5_priv_ind_table_ibv_release(struct priv *priv,rte_free (ind_tbl);return 0 ; } -return EBUSY ; +return -EBUSY ; }/**
@@ -1440,7 +1440,7 @@ mlx5_priv_hrxq_get(struct priv *priv, uint8_t *rss_key, uint8_t rss_key_len,* Pointer to Hash Rx queue to release. * * @return -* 0 on success, errno value on failure. +* 0 on success, negative errno value on failure. */ int mlx5_priv_hrxq_release (struct priv *priv,struct mlx5_hrxq *hrxq)
@@ -1455,7 +1455,7 @@ mlx5_priv_hrxq_release(struct priv *priv, struct mlx5_hrxq *hrxq)return 0 ; }claim_nonzero (mlx5_priv_ind_table_ibv_release (priv, hrxq->ind_table)); -return EBUSY ; +return -EBUSY ; }/**
drivers/net/mlx5/mlx5_socket.c +29 -12
138 lines not on this page · raw message
drivers/net/mlx5/mlx5_trigger.c +14 -13
@@ -36,7 +36,7 @@ priv_txq_stop(struct priv *priv)* Pointer to private structure. * * @return -* 0 on success, errno on error. +* 0 on success, negative errno on error. */ static int priv_txq_start (struct priv *priv)
@@ -60,12 +60,12 @@ priv_txq_start(struct priv *priv)txq_alloc_elts (txq_ctrl); txq_ctrl->ibv =mlx5_priv_txq_ibv_new (priv, i);if (!txq_ctrl->ibv) { - ret =ENOMEM ; + ret = -ENOMEM ; goto error; } } ret =priv_tx_uar_remap (priv, priv->ctx->cmd_fd); -if (ret) +if (!ret) goto error;return ret; error:
@@ -95,7 +95,7 @@ priv_rxq_stop(struct priv *priv)* Pointer to private structure. * * @return -* 0 on success, errno on error. +* 0 on success, negative errno on error. */ static int priv_rxq_start (struct priv *priv)
@@ -113,14 +113,14 @@ priv_rxq_start(struct priv *priv) goto error; rxq_ctrl->ibv =mlx5_priv_rxq_ibv_new (priv, i);if (!rxq_ctrl->ibv) { - ret =ENOMEM ; + ret = -ENOMEM ; goto error; } } -return -ret; +return ret; error:priv_rxq_stop (priv); -return -ret; +return ret; }/**
@@ -239,7 +239,7 @@ mlx5_dev_stop(struct rte_eth_dev *dev)* Pointer to Ethernet device structure. * * @return -* 0 on success. +* 0 on success, negative errno on error. */ int priv_dev_traffic_enable (struct priv *priv,struct rte_eth_dev *dev)
@@ -354,7 +354,7 @@ priv_dev_traffic_enable(struct priv *priv, struct rte_eth_dev *dev) }return 0 ; error: -return rte_errno; +return -rte_errno; }
@@ -386,7 +386,7 @@ priv_dev_traffic_disable(struct priv *priv, struct rte_eth_dev *dev)* Pointer to Ethernet device structure. * * @return -* 0 on success. +* 0 on success, negative errno on error. */ int priv_dev_traffic_restart (struct priv *priv,struct rte_eth_dev *dev)
@@ -405,15 +405,16 @@ priv_dev_traffic_restart(struct priv *priv, struct rte_eth_dev *dev)* Pointer to Ethernet device structure. * * @return -* 0 on success. +* 0 on success, negative errno on error. */ int mlx5_traffic_restart (struct rte_eth_dev *dev) {struct priv *priv = dev->data->dev_private; +int ret;priv_lock (priv); -priv_dev_traffic_restart (priv, dev); + ret =priv_dev_traffic_restart (priv, dev);priv_unlock (priv); -return 0 ; +return ret; }
drivers/net/mlx5/mlx5_txq.c +6 -8
@@ -271,7 +271,7 @@ mlx5_tx_queue_release(void *dpdk_txq)* Verbs file descriptor to map UAR pages. * * @return -* 0 on success, errno value on failure. +* 0 on success, negative errno value on failure. */ int priv_tx_uar_remap (struct priv *priv,int fd)
@@ -287,7 +287,6 @@ priv_tx_uar_remap(struct priv *priv, int fd)struct mlx5_txq_ctrl *txq_ctrl;int already_mapped;size_t page_size =sysconf (_SC_PAGESIZE); -int r;memset (pages,0 , priv->txqs_n *sizeof (uintptr_t ));/*
@@ -326,8 +325,7 @@ priv_tx_uar_remap(struct priv *priv, int fd)/* fixed mmap have to return same address */ ERROR ("call to mmap failed on UAR for txq %d\n" , i); - r =ENXIO ; -return r; +return -ENXIO ; } }if (rte_eal_process_type () ==RTE_PROC_PRIMARY )/* save once */
@@ -575,7 +573,7 @@ mlx5_priv_txq_ibv_get(struct priv *priv, uint16_t idx)* Verbs Tx queue object. * * @return -* 0 on success, errno on failure. +* 0 on success, negative errno on failure. */ int mlx5_priv_txq_ibv_release (struct priv *priv,struct mlx5_txq_ibv *txq_ibv)
@@ -591,7 +589,7 @@ mlx5_priv_txq_ibv_release(struct priv *priv, struct mlx5_txq_ibv *txq_ibv)rte_free (txq_ibv);return 0 ; } -return EBUSY ; +return -EBUSY ; }/**
@@ -830,7 +828,7 @@ mlx5_priv_txq_get(struct priv *priv, uint16_t idx)* TX queue index. * * @return -* 0 on success, errno on failure. +* 0 on success, negative errno on failure. */ int mlx5_priv_txq_release (struct priv *priv,uint16_t idx)
@@ -867,7 +865,7 @@ mlx5_priv_txq_release(struct priv *priv, uint16_t idx) (*priv->txqs)[idx] =NULL ;return 0 ; } -return EBUSY ; +return -EBUSY ; }/**
drivers/net/mlx5/mlx5_vlan.c +1 -1
@@ -80,7 +80,7 @@ mlx5_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on) ++priv->vlan_filter_n; }if (dev->data->dev_started) -priv_dev_traffic_restart (priv, dev); + ret =priv_dev_traffic_restart (priv, dev); out:priv_unlock (priv);return ret;
Signature · 1 line
2.11.0
Re: [PATCH 2/3] net/mlx5: convert return errno to negative ones
How about reusing the title/commit log of its mlx4 counterpart:
net/mlx5: standardize on negative errno values
(see 9d14b27308a0 "net/mlx4: standardize on negative errno values")
More below.
Quoted 21 lines · Nelio Laranjeiro
Signed-off-by Nelio Laranjeiro <[email protected]>Acked-by Yongseok Koh <[email protected]>--- drivers/net/mlx5/mlx5.c | 19 ++++----- drivers/net/mlx5/mlx5_ethdev.c | 30 ++++++++------ drivers/net/mlx5/mlx5_flow.c | 92 +++++++++++++++++++++-------------------- drivers/net/mlx5/mlx5_mac.c | 7 ++-- drivers/net/mlx5/mlx5_mr.c | 4 +- drivers/net/mlx5/mlx5_rss.c | 16 +++---- drivers/net/mlx5/mlx5_rxq.c | 20 ++++----- drivers/net/mlx5/mlx5_socket.c | 41 ++++++++++++------ drivers/net/mlx5/mlx5_trigger.c | 27 ++++++------ drivers/net/mlx5/mlx5_txq.c | 14 +++---- drivers/net/mlx5/mlx5_vlan.c | 2 +- 11 files changed, 145 insertions(+), 127 deletions(-)drivers/net/mlx5/mlx5.c +0
-0
drivers/net/mlx5/mlx5.c mlx5_args_check(const char *key, const char *val, void *opaque) · line 416
Quoted 5 lines
drivers/net/mlx5/mlx5.c +1
-1@@ -413,7 +413,7 @@ mlx5_args_check(const char *key, const char *val, void *opaque)* Device arguments structure. * * @return -* 0 on success, errno value on failure. +* 0 on success, negative errno value on failure.
How about s/on \(failure\|error\)/otherwise/ here and everywhere else? Documentation should be identical for all relevant functions.
<snip>
In mlx5_ethdev.c, priv_get_ifname() is still documented to return "0 on success, -1 on failure and errno is set". You must get rid of the reliance on external errno as part of this commit; you can optionally set rte_errno, but for consistency all int-returning functions must return a valid negative errno value, never -1.
The same applies to:
- priv_sysfs_read
- priv_sysfs_write
- priv_get_sysfs_ulong
- priv_set_sysfs_ulong
- priv_ifreq
- priv_get_num_vfs
- priv_get_mtu
- priv_get_cntr_sysfs
- priv_set_mtu
- priv_set_flags
- mlx5_link_update (lacks documentation)
- mlx5_ibv_device_to_pci_addr
- priv_dev_set_link
- mlx5_flow_item_validate
- mlx5_flow_create_* (unsure)
- priv_rx_intr_vec_enable ("negative" what?)
- mlx5_rx_intr_enable (ditto)
- mlx5_rx_intr_disable (ditto)
- check_cqe (returning a valid errno wouldn't impact performance)
- priv_read_dev_counters ("negative" what?)
- priv_ethtool_get_stats_n
- priv_xstats_get ("negative" what?)
- mlx5_stats_get (lacks documentation)
- mlx5_xstats_get ("negative" what?)
- mlx5_xstats_get_names (lacks documentation)
- priv_dev_traffic_disable (no error defined?)
- mlx5_priv_txq_ibv_releasable (lacks documentation)
- mlx5_priv_txq_ibv_verify (ditto)
- mlx5_vlan_offload_set (ditto, to be checked)
Also, some of them additionally set rte_errno while most of them do not. I'd suggest to *always* set rte_errno in case of error then add the "...and rte_errno is set" to documentation.
mlx4 approach to errors:
if (boom) {
rte_errno = ECRAP;
return -rte_errno;}
Shorter, also valid but frowned upon:
if (boom)
return -(rte_errno = EBOOM);
Alternatively when calling another rte_errno-aware function:
ret = boom();
if (ret)
return ret;
Signature · 2 lines
Adrien Mazarguil 6WIND
PATCH 3/3 net/mlx5: fix traffic restart function to return errors
In reply to Nelio Laranjeiropriv_dev_traffic_restart() was considering nothing could fail whereas it can.
--- drivers/net/mlx5/mlx5_trigger.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-)
drivers/net/mlx5/mlx5_trigger.c +7 -3
@@ -391,11 +391,15 @@ priv_dev_traffic_disable(struct priv *priv, struct rte_eth_dev *dev)int priv_dev_traffic_restart (struct priv *priv,struct rte_eth_dev *dev) { +int ret =0 ; +if (dev->data->dev_started) { -priv_dev_traffic_disable (priv, dev); -priv_dev_traffic_enable (priv, dev); + ret =priv_dev_traffic_disable (priv, dev); +if (ret) +return ret; + ret =priv_dev_traffic_enable (priv, dev); } -return 0 ; +return ret; }/**
Signature · 1 line
2.11.0
Re: [PATCH 3/3] net/mlx5: fix traffic restart function to return errors
Quoted 2 lines · Nelio Laranjeiro
priv_dev_traffic_restart()was considering nothing could fail whereas it can.
How about simply describing it as:
priv_dev_traffic_restart() must not ignore errors.
Quoted 5 lines
Fixes 272733b5ebfd ("net/mlx5: use flow to enable unicast traffic")Signed-off-by Nelio Laranjeiro <[email protected]>Acked-by Yongseok Koh <[email protected]>
Signature · 2 lines
Adrien Mazarguil 6WIND
I hate to sound pedantic but...
Quoted 11 lines · Nelio Laranjeiro
Signed-off-by Nelio Laranjeiro <[email protected]>Acked-by Yongseok Koh <[email protected]>--- drivers/net/mlx5/mlx5_trigger.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+)drivers/net/mlx5/mlx5_trigger.c +0
-0
drivers/net/mlx5/mlx5_trigger.c line 20
Quoted 7 lines
drivers/net/mlx5/mlx5_trigger.c +4
-0@@ -14,6 +14,12 @@#include "mlx5_rxtx.h" #include "mlx5_utils.h" +/** +* Stop traffic on Tx queues. +* +* @param priv
...there's an extra space between @param and priv :)
drivers/net/mlx5/mlx5_trigger.c priv_txq_stop(struct priv *priv) · line 35
Quoted 13 lines
drivers/net/mlx5/mlx5_trigger.c +6
-0+* Pointer to private structure. +*/ static void priv_txq_stop (struct priv *priv) {@@ -23,6 +29,15 @@ priv_txq_stop(struct priv *priv)mlx5_priv_txq_release (priv, i); } +/** +* Start traffic on Tx queues. +* +* @param priv
Ditto.
drivers/net/mlx5/mlx5_trigger.c priv_txq_stop(struct priv *priv) · line 39
Quoted 4 lines
drivers/net/mlx5/mlx5_trigger.c +4
-0+* Pointer to private structure. +* +* @return +* 0 on success, errno on error.
This should more accurately read "0 on success, positive errno value otherwise".
I would suggest to document these functions only after the errno mess is sorted (patch 2/3 should come first) for a smaller amount of changes.
drivers/net/mlx5/mlx5_trigger.c priv_txq_start(struct priv *priv) · line 79
Quoted 12 lines
drivers/net/mlx5/mlx5_trigger.c +5
-0+*/ static int priv_txq_start (struct priv *priv) {@@ -58,6 +73,12 @@ priv_txq_start(struct priv *priv)return ret; } +/** +* Stop traffic on Rx queues. +* +* @param priv
Extra space here also.
drivers/net/mlx5/mlx5_trigger.c priv_rxq_stop(struct priv *priv) · line 94
Quoted 13 lines
drivers/net/mlx5/mlx5_trigger.c +6
-0+* Pointer to private structure. +*/ static void priv_rxq_stop (struct priv *priv) {@@ -67,6 +88,15 @@ priv_rxq_stop(struct priv *priv)mlx5_priv_rxq_release (priv, i); } +/** +* Start traffic on Rx queues. +* +* @param priv
Again.
drivers/net/mlx5/mlx5_trigger.c priv_txq_stop(struct priv *priv) · line 39
Quoted 4 lines
drivers/net/mlx5/mlx5_trigger.c +4
-0+* Pointer to private structure. +* +* @return +* 0 on success, errno on error.
Ditto regarding errno sign.
Quoted 7 lines
drivers/net/mlx5/mlx5_trigger.c +1
-0+*/ static int priv_rxq_start (struct priv *priv) {Signature · 1 line
2.11.0
There are other functions are not properly documented either, you might want to add them for consistency:
mlx5_ethdev.c:
- mlx5_dev_supported_ptypes_get (no documentation)
- mlx5_link_update_unlocked_gset (return value)
- mlx5_link_update_unlocked_gs (return value)
- priv_link_update (return value)
- mlx5_link_update (return value)
mlx5_flow.c:
- mlx5_flow_create_eth (return value)
- mlx5_flow_create_vlan (return value)
- mlx5_flow_create_ipv4 (return value)
- mlx5_flow_create_ipv6 (return value)
- mlx5_flow_create_udp (return value)
- mlx5_flow_create_tcp (return value)
- mlx5_flow_create_vxlan (return value)
- mlx5_flow_create_flag_mark (return value)
- priv_flow_create_drop_queue (return in case of error)
- priv_flow_verify (inconsistent @return syntax)
mlx5_glue.c:
- mlx5_glue_* (too many of them and those are basic wrappers, don't bother)
mlx5_mr.c:
- priv_mr_verify (inconsistent @return syntax)
mlx5_rxq.c:
- mlx5_priv_rxq_ibv_verify (ditto)
- mlx5_priv_rxq_verify (ditto)
- mlx5_priv_ind_table_ibv_verify (ditto)
- mlx5_priv_hrxq_ibv_verify (ditto)
mlx5_rxtx.c:
- mlx5_tx_burst_raw_vec
- mlx5_tx_burst_vec
- mlx5_rx_burst_vec
- priv_check_raw_vec_tx_support
- priv_check_vec_tx_support
- rxq_check_vec_support
- priv_check_vec_rx_support
mlx5_trigger.c:
- Those are taken care of by the current patch.
mlx5_txq.c:
- mlx5_priv_txq_ibv_verify (inconsistent @return syntax)
- mlx5_priv_txq_verify (ditto)
mlx5_vlan.c
- mlx5_vlan_offload_set (return value)
I think that's all.
Signature · 2 lines
Adrien Mazarguil 6WIND
v2 cover net/mlx5: clean driver
In reply to Nelio Laranjeiro- Removes unused SR-IOV flag.
- Adds missing documentation on some functions.
- Removes the spin-lock on the private structure.
- Standardize the return values of all functions as discussed on the mailing list [1].
[1] https://dpdk.org/ml/archives/dev/2018-January/087991.html
Nelio Laranjeiro (10):
net/mlx5: fix sriov flag
net/mlx5: name parameters in function prototypes net/mlx5: mark parameters with unused attribute net/mlx5: normalize function prototypes net/mlx5: add missing function documentation net/mlx5: remove useless empty lines net/mlx5: remove control path locks net/mlx5: prefix all function with mlx5 net/mlx5: change non failing function return values net/mlx5: standardize on negative errno values
drivers/net/mlx5/mlx5.c | 234 ++++++-------- drivers/net/mlx5/mlx5.h | 240 ++++++-------- drivers/net/mlx5/mlx5_ethdev.c | 611 +++++++++++++++-------------------- drivers/net/mlx5/mlx5_flow.c | 664 ++++++++++++++++++++------------------- drivers/net/mlx5/mlx5_mac.c | 42 ++- drivers/net/mlx5/mlx5_mr.c | 130 ++++---- drivers/net/mlx5/mlx5_rss.c | 159 ++++------ drivers/net/mlx5/mlx5_rxmode.c | 28 +- drivers/net/mlx5/mlx5_rxq.c | 488 ++++++++++++++-------------- drivers/net/mlx5/mlx5_rxtx.c | 49 ++- drivers/net/mlx5/mlx5_rxtx.h | 161 +++++----- drivers/net/mlx5/mlx5_rxtx_vec.c | 25 +- drivers/net/mlx5/mlx5_socket.c | 115 ++++--- drivers/net/mlx5/mlx5_stats.c | 189 +++++------ drivers/net/mlx5/mlx5_trigger.c | 234 +++++++------- drivers/net/mlx5/mlx5_txq.c | 229 +++++++------- drivers/net/mlx5/mlx5_vlan.c | 93 ++---- 17 files changed, 1761 insertions(+), 1930 deletions(-)
Signature · 1 line
2.11.0
PATCH v2 1/10 net/mlx5: fix sriov flag
priv_get_num_vfs() was used to help the PMD in prefetching the mbuf in datapath when the PMD was behaving in VF mode.
This knowledge is no more used.
--- drivers/net/mlx5/mlx5.c | 18 ++---------------- drivers/net/mlx5/mlx5.h | 2 -- drivers/net/mlx5/mlx5_ethdev.c | 37 ------------------------------------- 3 files changed, 2 insertions(+), 55 deletions(-)
drivers/net/mlx5/mlx5.c +2 -16
@@ -578,7 +578,6 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev)int err =0 ;struct ibv_context *attr_ctx =NULL ;struct ibv_device_attr_ex device_attr; -unsigned int sriov;unsigned int mps;unsigned int cqe_comp;unsigned int tunnel_en =0 ;
@@ -625,18 +624,8 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) (pci_dev->addr.devid != pci_addr.devid) || (pci_dev->addr.function != pci_addr.function)) continue; - sriov = ((pci_dev->id.device_id == -PCI_DEVICE_ID_MELLANOX_CONNECTX4VF ) || - (pci_dev->id.device_id == -PCI_DEVICE_ID_MELLANOX_CONNECTX4LXVF ) || - (pci_dev->id.device_id == -PCI_DEVICE_ID_MELLANOX_CONNECTX5VF ) || - (pci_dev->id.device_id == -PCI_DEVICE_ID_MELLANOX_CONNECTX5EXVF )); -INFO ("PCI information matches, using device \"%s\"" -" (SR-IOV: %s)" , - list[i]->name, - sriov ?"true" :"false" ); +INFO ("PCI information matches, using device \"%s\"" , + list[i]->name); attr_ctx = mlx5_glue->open_device (list[i]); err = errno;break ;
@@ -709,7 +698,6 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev)struct rte_eth_dev *eth_dev;struct ibv_device_attr_ex device_attr_ex;struct ether_addr mac; -uint16_t num_vfs =0 ;struct ibv_device_attr_ex device_attr;struct mlx5_dev_config config = { .cqe_comp = cqe_comp,
@@ -870,8 +858,6 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev)DEBUG ("hardware RX end alignment padding is %ssupported" , (config.hw_padding ?"" :"not " )); -priv_get_num_vfs (priv, &num_vfs); - config.sriov = (num_vfs || sriov); config.tso = ((device_attr_ex.tso_caps.max_tso >0 ) && (device_attr_ex.tso_caps.supported_qpts & (1 <<IBV_QPT_RAW_PACKET )));
drivers/net/mlx5/mlx5.h +0 -2
@@ -78,7 +78,6 @@ struct mlx5_dev_config { unsigned int hw_vlan_strip:1; /* VLAN stripping is supported. */ unsigned int hw_fcs_strip:1; /* FCS stripping is supported. */ unsigned int hw_padding:1; /* End alignment padding is supported. */ - unsigned int sriov:1; /* This is a VF or PF with VF devices. */ unsigned int mps:2; /* Multi-packet send supported mode. */ unsigned int tunnel_en:1;/* Whether tunnel stateless offloads are supported. */
@@ -209,7 +208,6 @@ struct priv *mlx5_get_priv(struct rte_eth_dev *dev);int mlx5_is_secondary (void );int priv_get_ifname (const struct priv *,char (*)[IF_NAMESIZE ]);int priv_ifreq (const struct priv *,int req,struct ifreq *); -int priv_get_num_vfs (struct priv *,uint16_t *);int priv_get_mtu (struct priv *,uint16_t *);int priv_set_flags (struct priv *,unsigned int ,unsigned int );int mlx5_dev_configure (struct rte_eth_dev *);
drivers/net/mlx5/mlx5_ethdev.c +0 -37
@@ -201,43 +201,6 @@ priv_ifreq(const struct priv *priv, int req, struct ifreq *ifr) }/** -* Return the number of active VFs for the current device. -* -* @param[in] priv -* Pointer to private structure. -* @param[out] num_vfs -* Number of active VFs. -* -* @return -* 0 on success, -1 on failure and errno is set. -*/ -int -priv_get_num_vfs (struct priv *priv,uint16_t *num_vfs) -{ -/* The sysfs entry name depends on the operating system. */ -const char **name = (const char *[]){ -"sriov_numvfs" , -"mlx5_num_vfs" , -NULL , - }; - -do { -int n; -FILE *file; -MKSTR (path,"%s/device/%s" , priv->ibdev_path, *name); - - file =fopen (path,"rb" ); -if (!file) -continue ; - n =fscanf (file,"%" SCNu16, num_vfs); -fclose (file); -if (n ==1 ) -return 0 ; - }while (*(++name)); -return -1 ; -} - -/** * Get device MTU. * * @param priv
Signature · 1 line
2.11.0
PATCH v2 2/10 net/mlx5: name parameters in function prototypes
In reply to Nelio Laranjeiro--- drivers/net/mlx5/mlx5.h | 191 ++++++++++++++++++++++++------------------- drivers/net/mlx5/mlx5_rxtx.h | 162 ++++++++++++++++++++---------------- 2 files changed, 195 insertions(+), 158 deletions(-)
drivers/net/mlx5/mlx5.h +105 -86
@@ -206,113 +206,132 @@ int mlx5_getenv_int(const char *);struct priv *mlx5_get_priv (struct rte_eth_dev *dev);int mlx5_is_secondary (void ); -int priv_get_ifname (const struct priv *,char (*)[IF_NAMESIZE ]); -int priv_ifreq (const struct priv *,int req,struct ifreq *); -int priv_get_mtu (struct priv *,uint16_t *); -int priv_set_flags (struct priv *,unsigned int ,unsigned int ); -int mlx5_dev_configure (struct rte_eth_dev *); -void mlx5_dev_infos_get (struct rte_eth_dev *,struct rte_eth_dev_info *); +int priv_get_ifname (const struct priv *priv,char (*ifname)[IF_NAMESIZE ]); +int priv_ifreq (const struct priv *priv,int req,struct ifreq *ifr); +int priv_get_mtu (struct priv *priv,uint16_t *mtu); +int priv_set_flags (struct priv *priv,unsigned int keep,unsigned int flags); +int mlx5_dev_configure (struct rte_eth_dev *dev); +void mlx5_dev_infos_get (struct rte_eth_dev *dev,struct rte_eth_dev_info *info);const uint32_t *mlx5_dev_supported_ptypes_get (struct rte_eth_dev *dev); -int priv_link_update (struct priv *,int ); -int priv_force_link_status_change (struct priv *,int ); -int mlx5_link_update (struct rte_eth_dev *,int ); -int mlx5_dev_set_mtu (struct rte_eth_dev *,uint16_t ); -int mlx5_dev_get_flow_ctrl (struct rte_eth_dev *,struct rte_eth_fc_conf *); -int mlx5_dev_set_flow_ctrl (struct rte_eth_dev *,struct rte_eth_fc_conf *); -int mlx5_ibv_device_to_pci_addr (const struct ibv_device *, -struct rte_pci_addr *); -void mlx5_dev_link_status_handler (void *); -void mlx5_dev_interrupt_handler (void *); -void priv_dev_interrupt_handler_uninstall (struct priv *,struct rte_eth_dev *); -void priv_dev_interrupt_handler_install (struct priv *,struct rte_eth_dev *); +int priv_link_update (struct priv *priv,int wait_to_complete); +int priv_force_link_status_change (struct priv *priv,int status); +int mlx5_link_update (struct rte_eth_dev *dev,int wait_to_complete); +int mlx5_dev_set_mtu (struct rte_eth_dev *dev,uint16_t mtu); +int mlx5_dev_get_flow_ctrl (struct rte_eth_dev *dev, +struct rte_eth_fc_conf *fc_conf); +int mlx5_dev_set_flow_ctrl (struct rte_eth_dev *dev, +struct rte_eth_fc_conf *fc_conf); +int mlx5_ibv_device_to_pci_addr (const struct ibv_device *device, +struct rte_pci_addr *pci_addr); +void mlx5_dev_link_status_handler (void *arg); +void mlx5_dev_interrupt_handler (void *cb_arg); +void priv_dev_interrupt_handler_uninstall (struct priv *priv, +struct rte_eth_dev *dev); +void priv_dev_interrupt_handler_install (struct priv *priv, +struct rte_eth_dev *dev);int mlx5_set_link_down (struct rte_eth_dev *dev);int mlx5_set_link_up (struct rte_eth_dev *dev); +eth_tx_burst_t priv_select_tx_function (struct priv *priv, +struct rte_eth_dev *dev); +eth_rx_burst_t priv_select_rx_function (struct priv *priv, +struct rte_eth_dev *dev);int mlx5_is_removed (struct rte_eth_dev *dev); -eth_tx_burst_t priv_select_tx_function (struct priv *,struct rte_eth_dev *); -eth_rx_burst_t priv_select_rx_function (struct priv *,struct rte_eth_dev *);/* mlx5_mac.c */ -int priv_get_mac (struct priv *,uint8_t (*)[ETHER_ADDR_LEN ]); -void mlx5_mac_addr_remove (struct rte_eth_dev *,uint32_t ); -int mlx5_mac_addr_add (struct rte_eth_dev *,struct ether_addr *,uint32_t , -uint32_t ); -void mlx5_mac_addr_set (struct rte_eth_dev *,struct ether_addr *); +int priv_get_mac (struct priv *priv,uint8_t (*mac)[ETHER_ADDR_LEN ]); +void mlx5_mac_addr_remove (struct rte_eth_dev *dev,uint32_t index); +int mlx5_mac_addr_add (struct rte_eth_dev *dev,struct ether_addr *mac, +uint32_t index,uint32_t vmdq); +void mlx5_mac_addr_set (struct rte_eth_dev *dev,struct ether_addr *mac_addr);/* mlx5_rss.c */ -int mlx5_rss_hash_update (struct rte_eth_dev *,struct rte_eth_rss_conf *); -int mlx5_rss_hash_conf_get (struct rte_eth_dev *,struct rte_eth_rss_conf *); -int priv_rss_reta_index_resize (struct priv *,unsigned int ); -int mlx5_dev_rss_reta_query (struct rte_eth_dev *, -struct rte_eth_rss_reta_entry64 *,uint16_t ); -int mlx5_dev_rss_reta_update (struct rte_eth_dev *, -struct rte_eth_rss_reta_entry64 *,uint16_t ); +int mlx5_rss_hash_update (struct rte_eth_dev *dev, +struct rte_eth_rss_conf *rss_conf); +int mlx5_rss_hash_conf_get (struct rte_eth_dev *dev, +struct rte_eth_rss_conf *rss_conf); +int priv_rss_reta_index_resize (struct priv *priv,unsigned int reta_size); +int mlx5_dev_rss_reta_query (struct rte_eth_dev *dev, +struct rte_eth_rss_reta_entry64 *reta_conf, +uint16_t reta_size); +int mlx5_dev_rss_reta_update (struct rte_eth_dev *dev, +struct rte_eth_rss_reta_entry64 *reta_conf, +uint16_t reta_size);/* mlx5_rxmode.c */ -void mlx5_promiscuous_enable (struct rte_eth_dev *); -void mlx5_promiscuous_disable (struct rte_eth_dev *); -void mlx5_allmulticast_enable (struct rte_eth_dev *); -void mlx5_allmulticast_disable (struct rte_eth_dev *); +void mlx5_promiscuous_enable (struct rte_eth_dev *dev); +void mlx5_promiscuous_disable (struct rte_eth_dev *dev); +void mlx5_allmulticast_enable (struct rte_eth_dev *dev); +void mlx5_allmulticast_disable (struct rte_eth_dev *dev);/* mlx5_stats.c */ -void priv_xstats_init (struct priv *); -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 ); -void mlx5_xstats_reset (struct rte_eth_dev *); -int mlx5_xstats_get_names (struct rte_eth_dev *, -struct rte_eth_xstat_name *,unsigned int ); +void priv_xstats_init (struct priv *priv); +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_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_get_names (struct rte_eth_dev *dev, +struct rte_eth_xstat_name *xstats_names, +unsigned int n);/* mlx5_vlan.c */ -int mlx5_vlan_filter_set (struct rte_eth_dev *,uint16_t ,int ); -int mlx5_vlan_offload_set (struct rte_eth_dev *,int ); -void mlx5_vlan_strip_queue_set (struct rte_eth_dev *,uint16_t ,int ); +int mlx5_vlan_filter_set (struct rte_eth_dev *dev,uint16_t vlan_id,int on); +void mlx5_vlan_strip_queue_set (struct rte_eth_dev *dev,uint16_t queue,int on); +int mlx5_vlan_offload_set (struct rte_eth_dev *dev,int mask);/* mlx5_trigger.c */ -int mlx5_dev_start (struct rte_eth_dev *); -void mlx5_dev_stop (struct rte_eth_dev *); -int priv_dev_traffic_enable (struct priv *,struct rte_eth_dev *); -int priv_dev_traffic_disable (struct priv *,struct rte_eth_dev *); -int priv_dev_traffic_restart (struct priv *,struct rte_eth_dev *); -int mlx5_traffic_restart (struct rte_eth_dev *); +int mlx5_dev_start (struct rte_eth_dev *dev); +void mlx5_dev_stop (struct rte_eth_dev *dev); +int priv_dev_traffic_enable (struct priv *priv,struct rte_eth_dev *dev); +int priv_dev_traffic_disable (struct priv *priv,struct rte_eth_dev *dev); +int priv_dev_traffic_restart (struct priv *priv,struct rte_eth_dev *dev); +int mlx5_traffic_restart (struct rte_eth_dev *dev);/* mlx5_flow.c */ -int mlx5_dev_filter_ctrl (struct rte_eth_dev *,enum rte_filter_type , -enum rte_filter_op ,void *); -int mlx5_flow_validate (struct rte_eth_dev *,const struct rte_flow_attr *, -const struct rte_flow_item [], -const struct rte_flow_action [], -struct rte_flow_error *); -struct rte_flow *mlx5_flow_create (struct rte_eth_dev *, -const struct rte_flow_attr *, -const struct rte_flow_item [], -const struct rte_flow_action [], -struct rte_flow_error *); -int mlx5_flow_destroy (struct rte_eth_dev *,struct rte_flow *, -struct rte_flow_error *); -void priv_flow_flush (struct priv *,struct mlx5_flows *); -int mlx5_flow_flush (struct rte_eth_dev *,struct rte_flow_error *); -int mlx5_flow_query (struct rte_eth_dev *,struct rte_flow *, -enum rte_flow_action_type ,void *, -struct rte_flow_error *); -int mlx5_flow_isolate (struct rte_eth_dev *,int ,struct rte_flow_error *); -int priv_flow_start (struct priv *,struct mlx5_flows *); -void priv_flow_stop (struct priv *,struct mlx5_flows *); -int priv_flow_verify (struct priv *); -int mlx5_ctrl_flow_vlan (struct rte_eth_dev *,struct rte_flow_item_eth *, -struct rte_flow_item_eth *,struct rte_flow_item_vlan *, -struct rte_flow_item_vlan *); -int mlx5_ctrl_flow (struct rte_eth_dev *,struct rte_flow_item_eth *, -struct rte_flow_item_eth *); -int priv_flow_create_drop_queue (struct priv *); -void priv_flow_delete_drop_queue (struct priv *); +int mlx5_flow_validate (struct rte_eth_dev *dev, +const struct rte_flow_attr *attr, +const struct rte_flow_item items[], +const struct rte_flow_action actions[], +struct rte_flow_error *error); +void priv_flow_flush (struct priv *priv,struct mlx5_flows *list); +int priv_flow_create_drop_queue (struct priv *priv); +void priv_flow_stop (struct priv *priv,struct mlx5_flows *list); +int priv_flow_start (struct priv *priv,struct mlx5_flows *list); +int priv_flow_verify (struct priv *priv); +int priv_flow_create_drop_queue (struct priv *priv); +void priv_flow_delete_drop_queue (struct priv *priv); +int mlx5_ctrl_flow_vlan (struct rte_eth_dev *dev, +struct rte_flow_item_eth *eth_spec, +struct rte_flow_item_eth *eth_mask, +struct rte_flow_item_vlan *vlan_spec, +struct rte_flow_item_vlan *vlan_mask); +int mlx5_ctrl_flow (struct rte_eth_dev *dev, +struct rte_flow_item_eth *eth_spec, +struct rte_flow_item_eth *eth_mask); +struct rte_flow *mlx5_flow_create (struct rte_eth_dev *dev, +const struct rte_flow_attr *attr, +const struct rte_flow_item items[], +const struct rte_flow_action actions[], +struct rte_flow_error *error); +int mlx5_flow_destroy (struct rte_eth_dev *dev,struct rte_flow *flow, +struct rte_flow_error *error); +int mlx5_flow_flush (struct rte_eth_dev *dev,struct rte_flow_error *error); +int mlx5_flow_query (struct rte_eth_dev *dev,struct rte_flow *flow, +enum rte_flow_action_type action,void *data, +struct rte_flow_error *error); +int mlx5_flow_isolate (struct rte_eth_dev *dev,int enable, +struct rte_flow_error *error); +int mlx5_dev_filter_ctrl (struct rte_eth_dev *dev, +enum rte_filter_type filter_type, +enum rte_filter_op filter_op, +void *arg);/* mlx5_socket.c */
@@ -323,9 +342,9 @@ int priv_socket_connect(struct priv *priv);/* mlx5_mr.c */ -struct mlx5_mr *priv_mr_new (struct priv *,struct rte_mempool *); -struct mlx5_mr *priv_mr_get (struct priv *,struct rte_mempool *); -int priv_mr_release (struct priv *,struct mlx5_mr *); -int priv_mr_verify (struct priv *); +struct mlx5_mr *priv_mr_new (struct priv *priv,struct rte_mempool *mp); +struct mlx5_mr *priv_mr_get (struct priv *priv,struct rte_mempool *mp); +int priv_mr_release (struct priv *priv,struct mlx5_mr *mr); +int priv_mr_verify (struct priv *priv);#endif /* RTE_PMD_MLX5_H_ */
drivers/net/mlx5/mlx5_rxtx.h +90 -72
187 lines not on this page · raw message
Signature · 1 line
2.11.0
PATCH v2 3/10 net/mlx5: mark parameters with unused attribute
In reply to Nelio LaranjeiroReplaces all (void)foo; by __rte_unused macro except when variables are under #if statements.
--- drivers/net/mlx5/mlx5.c | 4 ++-- drivers/net/mlx5/mlx5_ethdev.c | 18 +++++---------- drivers/net/mlx5/mlx5_flow.c | 25 ++++++++------------ drivers/net/mlx5/mlx5_mac.c | 3 +-- drivers/net/mlx5/mlx5_mr.c | 10 +++----- drivers/net/mlx5/mlx5_rxq.c | 4 ++-- drivers/net/mlx5/mlx5_rxtx.c | 51 +++++++++++++++++------------------------ drivers/net/mlx5/mlx5_stats.c | 2 +- drivers/net/mlx5/mlx5_trigger.c | 4 ++-- drivers/net/mlx5/mlx5_txq.c | 19 +++++++-------- 10 files changed, 55 insertions(+), 85 deletions(-)
drivers/net/mlx5/mlx5.c +2 -2
@@ -571,7 +571,8 @@ priv_uar_init_secondary(struct priv *priv)* 0 on success, negative errno value on failure. */ static int -mlx5_pci_probe (struct rte_pci_driver *pci_drv,struct rte_pci_device *pci_dev) +mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, +struct rte_pci_device *pci_dev) {struct ibv_device **list;struct ibv_device *ibv_dev;
@@ -588,7 +589,6 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev)struct ibv_counter_set_description cs_desc;#endif - (void )pci_drv;assert (pci_drv == &mlx5_driver);/* Get mlx5_dev[] index. */ idx =mlx5_dev_idx (&pci_dev->addr);
drivers/net/mlx5/mlx5_ethdev.c +6 -12
@@ -467,11 +467,9 @@ mlx5_dev_supported_ptypes_get(struct rte_eth_dev *dev)* * @param dev * Pointer to Ethernet device structure. -* @param wait_to_complete -* Wait for request completion (ignored). */ static int -mlx5_link_update_unlocked_gset (struct rte_eth_dev *dev,int wait_to_complete) +mlx5_link_update_unlocked_gset (struct rte_eth_dev *dev) {struct priv *priv = dev->data->dev_private;struct ethtool_cmd edata = {
@@ -483,7 +481,6 @@ mlx5_link_update_unlocked_gset(struct rte_eth_dev *dev, int wait_to_complete)/* priv_lock() is not taken to allow concurrent calls. */ - (void )wait_to_complete;if (priv_ifreq (priv,SIOCGIFFLAGS , &ifr)) {WARN ("ioctl(SIOCGIFFLAGS) failed: %s" ,strerror (errno));return -1 ;
@@ -533,11 +530,9 @@ mlx5_link_update_unlocked_gset(struct rte_eth_dev *dev, int wait_to_complete)* * @param dev * Pointer to Ethernet device structure. -* @param wait_to_complete -* Wait for request completion (ignored). */ static int -mlx5_link_update_unlocked_gs (struct rte_eth_dev *dev,int wait_to_complete) +mlx5_link_update_unlocked_gs (struct rte_eth_dev *dev) {struct priv *priv = dev->data->dev_private;struct ethtool_link_settings gcmd = { .cmd =ETHTOOL_GLINKSETTINGS };
@@ -545,7 +540,6 @@ mlx5_link_update_unlocked_gs(struct rte_eth_dev *dev, int wait_to_complete)struct rte_eth_link dev_link;uint64_t sc; - (void )wait_to_complete;if (priv_ifreq (priv,SIOCGIFFLAGS , &ifr)) {WARN ("ioctl(SIOCGIFFLAGS) failed: %s" ,strerror (errno));return -1 ;
@@ -675,7 +669,7 @@ priv_link_stop(struct priv *priv)* Wait for request completion (ignored). */ int -priv_link_update (struct priv *priv,int wait_to_complete) +priv_link_update(struct priv *priv, int wait_to_complete __rte_unused) {struct rte_eth_dev *dev = priv->dev;struct utsname utsname;
@@ -687,9 +681,9 @@ priv_link_update(struct priv *priv, int wait_to_complete) sscanf(utsname.release, "%d.%d.%d", &ver[0], &ver[1], &ver[2]) != 3 || KERNEL_VERSION(ver[0], ver[1], ver[2]) < KERNEL_VERSION(4, 9, 0)) - ret =mlx5_link_update_unlocked_gset (dev, wait_to_complete); + ret =mlx5_link_update_unlocked_gset (dev); else - ret =mlx5_link_update_unlocked_gs (dev, wait_to_complete); + ret =mlx5_link_update_unlocked_gs (dev);/* If lsc interrupt is disabled, should always be ready for traffic. */ if (!dev->data->dev_conf.intr_conf.lsc) {priv_link_start (priv);
@@ -741,7 +735,7 @@ priv_force_link_status_change(struct priv *priv, int status)* Wait for request completion (ignored). */ int -mlx5_link_update (struct rte_eth_dev *dev,int wait_to_complete) +mlx5_link_update(struct rte_eth_dev *dev, int wait_to_complete __rte_unused) {struct priv *priv = dev->data->dev_private;int ret;
drivers/net/mlx5/mlx5_flow.c +9 -16
@@ -526,7 +526,7 @@ mlx5_flow_item_validate(const struct rte_flow_item *item,* 0 on success, errno value on failure. */ static int -priv_flow_convert_rss_conf (struct priv *priv, +priv_flow_convert_rss_conf(struct priv *priv __rte_unused,struct mlx5_flow_parse *parser,const struct rte_eth_rss_conf *rss_conf) {
@@ -535,7 +535,6 @@ priv_flow_convert_rss_conf(struct priv *priv,* priv_flow_convert_actions() to initialize the parser with the * device default RSS configuration. */ - (void )priv;if (rss_conf) {if (rss_conf->rss_hf &MLX5_RSS_HF_MASK )return EINVAL ;
@@ -568,13 +567,11 @@ priv_flow_convert_rss_conf(struct priv *priv,* 0 on success, a negative errno value otherwise and rte_errno is set. */ static int -priv_flow_convert_attributes (struct priv *priv, +priv_flow_convert_attributes(struct priv *priv __rte_unused,const struct rte_flow_attr *attr,struct rte_flow_error *error, -struct mlx5_flow_parse *parser) + struct mlx5_flow_parse *parser __rte_unused) { - (void )priv; - (void )parser;if (attr->group) { rte_flow_error_set(error, ENOTSUP, RTE_FLOW_ERROR_TYPE_ATTR_GROUP,
@@ -779,7 +776,7 @@ priv_flow_convert_actions(struct priv *priv,* 0 on success, a negative errno value otherwise and rte_errno is set. */ static int -priv_flow_convert_items_validate (struct priv *priv, +priv_flow_convert_items_validate(struct priv *priv __rte_unused,const struct rte_flow_item items[],struct rte_flow_error *error,struct mlx5_flow_parse *parser)
@@ -787,7 +784,6 @@ priv_flow_convert_items_validate(struct priv *priv,const struct mlx5_flow_items *cur_item = mlx5_flow_items;unsigned int i; - (void )priv;/* Initialise the offsets to start after verbs attribute. */ for (i =0 ; i != hash_rxq_init_n; ++i) parser->queue[i].offset =sizeof (struct ibv_flow_attr );
@@ -871,14 +867,13 @@ priv_flow_convert_items_validate(struct priv *priv,* A verbs flow attribute on success, NULL otherwise. */ static struct ibv_flow_attr * -priv_flow_convert_allocate (struct priv *priv, +priv_flow_convert_allocate(struct priv *priv __rte_unused,unsigned int priority,unsigned int size,struct rte_flow_error *error) {struct ibv_flow_attr *ibv_attr; - (void )priv; ibv_attr =rte_calloc (__func__,1 , size,0 );if (!ibv_attr) { rte_flow_error_set(error, ENOMEM,
@@ -900,7 +895,8 @@ priv_flow_convert_allocate(struct priv *priv,* Internal parser structure. */ static void -priv_flow_convert_finalise (struct priv *priv,struct mlx5_flow_parse *parser) +priv_flow_convert_finalise(struct priv *priv __rte_unused, +struct mlx5_flow_parse *parser) {const unsigned int ipv4 = hash_rxq_init[parser->layer].ip_version ==MLX5_IPV4 ;
@@ -911,7 +907,6 @@ priv_flow_convert_finalise(struct priv *priv, struct mlx5_flow_parse *parser)const enum hash_rxq_type ip = ipv4 ?HASH_RXQ_IPV4 :HASH_RXQ_IPV6 ;unsigned int i; - (void )priv;/* Remove any other flow not matching the pattern. */ if (parser->queues_n ==1 ) {for (i =0 ; i != hash_rxq_init_n; ++i) {
@@ -2424,11 +2419,10 @@ mlx5_ctrl_flow(struct rte_eth_dev *dev,int mlx5_flow_destroy (struct rte_eth_dev *dev,struct rte_flow *flow, -struct rte_flow_error *error) + struct rte_flow_error *error __rte_unused) {struct priv *priv = dev->data->dev_private; - (void )error;priv_lock (priv);priv_flow_destroy (priv, &priv->flows, flow);priv_unlock (priv);
@@ -2443,11 +2437,10 @@ mlx5_flow_destroy(struct rte_eth_dev *dev,*/ int mlx5_flow_flush (struct rte_eth_dev *dev, -struct rte_flow_error *error) + struct rte_flow_error *error __rte_unused) {struct priv *priv = dev->data->dev_private; - (void )error;priv_lock (priv);priv_flow_flush (priv, &priv->flows);priv_unlock (priv);
drivers/net/mlx5/mlx5_mac.c +1 -2
@@ -88,12 +88,11 @@ mlx5_mac_addr_remove(struct rte_eth_dev *dev, uint32_t index)*/ int mlx5_mac_addr_add (struct rte_eth_dev *dev,struct ether_addr *mac, -uint32_t index,uint32_t vmdq) + uint32_t index, uint32_t vmdq __rte_unused) {unsigned int i;int ret =0 ; - (void )vmdq;assert (index <MLX5_MAX_MAC_ADDRESSES );/* First, make sure this address isn't already configured. */ for (i =0 ; (i !=MLX5_MAX_MAC_ADDRESSES ); ++i) {
drivers/net/mlx5/mlx5_mr.c +3 -7
@@ -26,15 +26,12 @@ struct mlx5_check_mempool_data {/* Called by mlx5_check_mempool() when iterating the memory chunks. */ static void -mlx5_check_mempool_cb (struct rte_mempool *mp, +mlx5_check_mempool_cb(struct rte_mempool *mp __rte_unused,void *opaque,struct rte_mempool_memhdr *memhdr, -unsigned int mem_idx) + unsigned int mem_idx __rte_unused) {struct mlx5_check_mempool_data *data = opaque; - (void )mp; - (void )mem_idx; -/* It already failed, skip the next chunks. */ if (data->ret !=0 )return ;
@@ -336,9 +333,8 @@ priv_mr_get(struct priv *priv, struct rte_mempool *mp)* 0 on success, errno on failure. */ int -priv_mr_release (struct priv *priv,struct mlx5_mr *mr) +priv_mr_release(struct priv *priv __rte_unused, struct mlx5_mr *mr) { - (void )priv;assert (mr);DEBUG ("Memory Region %p refcnt: %d" , (void *)mr,rte_atomic32_read (&mr->refcnt));
drivers/net/mlx5/mlx5_rxq.c +2 -2
@@ -910,9 +910,9 @@ mlx5_priv_rxq_ibv_verify(struct priv *priv)* Verbs Rx queue object. */ int -mlx5_priv_rxq_ibv_releasable (struct priv *priv,struct mlx5_rxq_ibv *rxq_ibv) +mlx5_priv_rxq_ibv_releasable(struct priv *priv __rte_unused, +struct mlx5_rxq_ibv *rxq_ibv) { - (void )priv;assert (rxq_ibv);return (rte_atomic32_read (&rxq_ibv->refcnt) ==1 ); }
drivers/net/mlx5/mlx5_rxtx.c +21 -30
101 lines not on this page · raw message
drivers/net/mlx5/mlx5_stats.c +1 -1
@@ -488,7 +488,7 @@ mlx5_xstats_reset(struct rte_eth_dev *dev)* Number of xstats names. */ int -mlx5_xstats_get_names (struct rte_eth_dev *dev, +mlx5_xstats_get_names(struct rte_eth_dev *dev __rte_unused,struct rte_eth_xstat_name *xstats_names,unsigned int n) {struct priv *priv = dev->data->dev_private;
drivers/net/mlx5/mlx5_trigger.c +2 -2
@@ -340,9 +340,9 @@ priv_dev_traffic_enable(struct priv *priv, struct rte_eth_dev *dev)* 0 on success. */ int -priv_dev_traffic_disable (struct priv *priv,struct rte_eth_dev *dev) +priv_dev_traffic_disable (struct priv *priv, + struct rte_eth_dev *dev __rte_unused) { - (void )dev;priv_flow_flush (priv, &priv->ctrl_flows);return 0 ; }
drivers/net/mlx5/mlx5_txq.c +8 -11
@@ -578,9 +578,9 @@ mlx5_priv_txq_ibv_get(struct priv *priv, uint16_t idx)* 0 on success, errno on failure. */ int -mlx5_priv_txq_ibv_release (struct priv *priv,struct mlx5_txq_ibv *txq_ibv) +mlx5_priv_txq_ibv_release(struct priv *priv __rte_unused, +struct mlx5_txq_ibv *txq_ibv) { - (void )priv;assert (txq_ibv);DEBUG ("%p: Verbs Tx queue %p: refcnt %d" , (void *)priv, (void *)txq_ibv,rte_atomic32_read (&txq_ibv->refcnt));
@@ -603,9 +603,9 @@ mlx5_priv_txq_ibv_release(struct priv *priv, struct mlx5_txq_ibv *txq_ibv)* Verbs Tx queue object. */ int -mlx5_priv_txq_ibv_releasable (struct priv *priv,struct mlx5_txq_ibv *txq_ibv) +mlx5_priv_txq_ibv_releasable(struct priv *priv __rte_unused, +struct mlx5_txq_ibv *txq_ibv) { - (void )priv;assert (txq_ibv);return (rte_atomic32_read (&txq_ibv->refcnt) ==1 ); }
@@ -806,13 +806,10 @@ mlx5_priv_txq_get(struct priv *priv, uint16_t idx)mlx5_priv_txq_ibv_get (priv, idx);for (i =0 ; i !=MLX5_PMD_TX_MP_CACHE ; ++i) { -struct mlx5_mr *mr =NULL ; - - (void )mr; -if (ctrl->txq.mp2mr[i]) { - mr =priv_mr_get (priv, ctrl->txq.mp2mr[i]->mp); -assert (mr); - } +if (ctrl->txq.mp2mr[i]) +claim_nonzero + (priv_mr_get (priv, + ctrl->txq.mp2mr[i]->mp)); }rte_atomic32_inc (&ctrl->refcnt); DEBUG("%p: Tx queue %p: refcnt %d", (void *)priv,
Signature · 1 line
2.11.0
PATCH v2 4/10 net/mlx5: normalize function prototypes
In reply to Nelio Laranjeiro--- drivers/net/mlx5/mlx5_flow.c | 2 +- drivers/net/mlx5/mlx5_mr.c | 11 ++++++----- drivers/net/mlx5/mlx5_rxq.c | 16 ++++++++-------- drivers/net/mlx5/mlx5_txq.c | 8 ++++---- 4 files changed, 19 insertions(+), 18 deletions(-)
drivers/net/mlx5/mlx5_flow.c +1 -1
@@ -866,7 +866,7 @@ priv_flow_convert_items_validate(struct priv *priv __rte_unused,* @return * A verbs flow attribute on success, NULL otherwise. */ -static struct ibv_flow_attr * +static struct ibv_flow_attr * priv_flow_convert_allocate(struct priv *priv __rte_unused, unsigned int priority, unsigned int size,
drivers/net/mlx5/mlx5_mr.c +6 -5
@@ -66,8 +66,9 @@ mlx5_check_mempool_cb(struct rte_mempool *mp __rte_unused,* @return * 0 on success (mempool is virtually contiguous), -1 on error. */ -static int mlx5_check_mempool (struct rte_mempool *mp,uintptr_t *start, -uintptr_t *end) +static int +mlx5_check_mempool (struct rte_mempool *mp,uintptr_t *start, +uintptr_t *end) {struct mlx5_check_mempool_data data;
@@ -97,7 +98,7 @@ static int mlx5_check_mempool(struct rte_mempool *mp, uintptr_t *start,* @return * mr on success, NULL on failure. */ -struct mlx5_mr * +struct mlx5_mr *priv_txq_mp2mr_reg (struct priv *priv,struct mlx5_txq_data *txq,struct rte_mempool *mp,unsigned int idx) {
@@ -244,7 +245,7 @@ mlx5_mp2mr_iter(struct rte_mempool *mp, void *arg)* @return * The memory region on success. */ -struct mlx5_mr * +struct mlx5_mr *priv_mr_new (struct priv *priv,struct rte_mempool *mp) {const struct rte_memseg *ms =rte_eal_get_physmem_layout ();
@@ -304,7 +305,7 @@ priv_mr_new(struct priv *priv, struct rte_mempool *mp)* @return * The memory region on success. */ -struct mlx5_mr * +struct mlx5_mr *priv_mr_get (struct priv *priv,struct rte_mempool *mp) {struct mlx5_mr *mr;
drivers/net/mlx5/mlx5_rxq.c +8 -8
@@ -601,7 +601,7 @@ mlx5_rx_intr_disable(struct rte_eth_dev *dev, uint16_t rx_queue_id)* @return * The Verbs object initialised if it can be created. */ -struct mlx5_rxq_ibv * +struct mlx5_rxq_ibv *mlx5_priv_rxq_ibv_new (struct priv *priv,uint16_t idx) {struct mlx5_rxq_data *rxq_data = (*priv->rxqs)[idx];
@@ -819,7 +819,7 @@ mlx5_priv_rxq_ibv_new(struct priv *priv, uint16_t idx)* @return * The Verbs object if it exists. */ -struct mlx5_rxq_ibv * +struct mlx5_rxq_ibv *mlx5_priv_rxq_ibv_get (struct priv *priv,uint16_t idx) {struct mlx5_rxq_data *rxq_data = (*priv->rxqs)[idx];
@@ -932,7 +932,7 @@ mlx5_priv_rxq_ibv_releasable(struct priv *priv __rte_unused,* @return * A DPDK queue object on success. */ -struct mlx5_rxq_ctrl * +struct mlx5_rxq_ctrl *mlx5_priv_rxq_new (struct priv *priv,uint16_t idx,uint16_t desc,unsigned int socket,const struct rte_eth_rxconf *conf,struct rte_mempool *mp)
@@ -1057,7 +1057,7 @@ mlx5_priv_rxq_new(struct priv *priv, uint16_t idx, uint16_t desc,* @return * A pointer to the queue if it exists. */ -struct mlx5_rxq_ctrl * +struct mlx5_rxq_ctrl *mlx5_priv_rxq_get (struct priv *priv,uint16_t idx) {struct mlx5_rxq_ctrl *rxq_ctrl =NULL ;
@@ -1170,7 +1170,7 @@ mlx5_priv_rxq_verify(struct priv *priv)* @return * A new indirection table. */ -struct mlx5_ind_table_ibv * +struct mlx5_ind_table_ibv *mlx5_priv_ind_table_ibv_new (struct priv *priv,uint16_t queues[],uint16_t queues_n) {
@@ -1232,7 +1232,7 @@ mlx5_priv_ind_table_ibv_new(struct priv *priv, uint16_t queues[],* @return * An indirection table if found. */ -struct mlx5_ind_table_ibv * +struct mlx5_ind_table_ibv *mlx5_priv_ind_table_ibv_get (struct priv *priv,uint16_t queues[],uint16_t queues_n) {
@@ -1331,7 +1331,7 @@ mlx5_priv_ind_table_ibv_verify(struct priv *priv)* @return * An hash Rx queue on success. */ -struct mlx5_hrxq * +struct mlx5_hrxq *mlx5_priv_hrxq_new (struct priv *priv,uint8_t *rss_key,uint8_t rss_key_len,uint64_t hash_fields,uint16_t queues[],uint16_t queues_n) {
@@ -1400,7 +1400,7 @@ mlx5_priv_hrxq_new(struct priv *priv, uint8_t *rss_key, uint8_t rss_key_len,* @return * An hash Rx queue on success. */ -struct mlx5_hrxq * +struct mlx5_hrxq *mlx5_priv_hrxq_get (struct priv *priv,uint8_t *rss_key,uint8_t rss_key_len,uint64_t hash_fields,uint16_t queues[],uint16_t queues_n) {
drivers/net/mlx5/mlx5_txq.c +4 -4
@@ -369,7 +369,7 @@ is_empw_burst_func(eth_tx_burst_t tx_pkt_burst)* @return * The Verbs object initialised if it can be created. */ -struct mlx5_txq_ibv * +struct mlx5_txq_ibv *mlx5_priv_txq_ibv_new (struct priv *priv,uint16_t idx) {struct mlx5_txq_data *txq_data = (*priv->txqs)[idx];
@@ -547,7 +547,7 @@ mlx5_priv_txq_ibv_new(struct priv *priv, uint16_t idx)* @return * The Verbs object if it exists. */ -struct mlx5_txq_ibv * +struct mlx5_txq_ibv *mlx5_priv_txq_ibv_get (struct priv *priv,uint16_t idx) {struct mlx5_txq_ctrl *txq_ctrl;
@@ -749,7 +749,7 @@ txq_set_params(struct mlx5_txq_ctrl *txq_ctrl)* @return * A DPDK queue object on success. */ -struct mlx5_txq_ctrl * +struct mlx5_txq_ctrl *mlx5_priv_txq_new (struct priv *priv,uint16_t idx,uint16_t desc,unsigned int socket,const struct rte_eth_txconf *conf)
@@ -794,7 +794,7 @@ mlx5_priv_txq_new(struct priv *priv, uint16_t idx, uint16_t desc,* @return * A pointer to the queue if it exists. */ -struct mlx5_txq_ctrl * +struct mlx5_txq_ctrl *mlx5_priv_txq_get (struct priv *priv,uint16_t idx) {struct mlx5_txq_ctrl *ctrl =NULL ;
Signature · 1 line
2.11.0
PATCH v2 5/10 net/mlx5: add missing function documentation
In reply to Nelio Laranjeiro--- drivers/net/mlx5/mlx5_ethdev.c | 18 ++++++++++++++++++ drivers/net/mlx5/mlx5_mr.c | 7 +++++-- drivers/net/mlx5/mlx5_rxq.c | 20 ++++++++++++-------- drivers/net/mlx5/mlx5_trigger.c | 30 ++++++++++++++++++++++++++++++ drivers/net/mlx5/mlx5_txq.c | 10 ++++++---- 5 files changed, 71 insertions(+), 14 deletions(-)
drivers/net/mlx5/mlx5_ethdev.c +18 -0
@@ -435,6 +435,15 @@ mlx5_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *info)priv_unlock (priv); } +/** +* Get supported packet types. +* +* @param dev +* Pointer to Ethernet device structure. +* +* @return +* A pointer to the supported Packet types array. +*/ const uint32_t *mlx5_dev_supported_ptypes_get (struct rte_eth_dev *dev) {
@@ -467,6 +476,9 @@ mlx5_dev_supported_ptypes_get(struct rte_eth_dev *dev)* * @param dev * Pointer to Ethernet device structure. +* +* @return +* 0 on success, -1 on error. */ static int mlx5_link_update_unlocked_gset (struct rte_eth_dev *dev)
@@ -530,6 +542,9 @@ mlx5_link_update_unlocked_gset(struct rte_eth_dev *dev)* * @param dev * Pointer to Ethernet device structure. +* +* @return +* 0 on success, -1 on error. */ static int mlx5_link_update_unlocked_gs (struct rte_eth_dev *dev)
@@ -733,6 +748,9 @@ priv_force_link_status_change(struct priv *priv, int status)* Pointer to Ethernet device structure. * @param wait_to_complete * Wait for request completion (ignored). +* +* @return +* 0 on success, -1 on error. */ int mlx5_link_update(struct rte_eth_dev *dev, int wait_to_complete __rte_unused)
drivers/net/mlx5/mlx5_mr.c +5 -2
@@ -242,6 +242,7 @@ mlx5_mp2mr_iter(struct rte_mempool *mp, void *arg)* Pointer to private structure. * @param mp * Pointer to the memory pool to register. +* * @return * The memory region on success. */
@@ -302,6 +303,7 @@ priv_mr_new(struct priv *priv, struct rte_mempool *mp)* Pointer to private structure. * @param mp * Pointer to the memory pool to register. +* * @return * The memory region on success. */
@@ -352,9 +354,10 @@ priv_mr_release(struct priv *priv __rte_unused, struct mlx5_mr *mr)* Verify the flow list is empty * * @param priv -* Pointer to private structure. +* Pointer to private structure. * -* @return the number of object not released. +* @return +* The number of object not released. */ int priv_mr_verify (struct priv *priv)
drivers/net/mlx5/mlx5_rxq.c +12 -8
@@ -883,9 +883,10 @@ mlx5_priv_rxq_ibv_release(struct priv *priv, struct mlx5_rxq_ibv *rxq_ibv)* Verify the Verbs Rx queue list is empty * * @param priv -* Pointer to private structure. +* Pointer to private structure. * -* @return the number of object not released. +* @return +* The number of object not released. */ int mlx5_priv_rxq_ibv_verify (struct priv *priv)
@@ -1139,9 +1140,10 @@ mlx5_priv_rxq_releasable(struct priv *priv, uint16_t idx)* Verify the Rx Queue list is empty * * @param priv -* Pointer to private structure. +* Pointer to private structure. * -* @return the number of object not released. +* @return +* The number of object not released. */ int mlx5_priv_rxq_verify (struct priv *priv)
@@ -1293,9 +1295,10 @@ mlx5_priv_ind_table_ibv_release(struct priv *priv,* Verify the Rx Queue list is empty * * @param priv -* Pointer to private structure. +* Pointer to private structure. * -* @return the number of object not released. +* @return +* The number of object not released. */ int mlx5_priv_ind_table_ibv_verify (struct priv *priv)
@@ -1462,9 +1465,10 @@ mlx5_priv_hrxq_release(struct priv *priv, struct mlx5_hrxq *hrxq)* Verify the Rx Queue list is empty * * @param priv -* Pointer to private structure. +* Pointer to private structure. * -* @return the number of object not released. +* @return +* The number of object not released. */ int mlx5_priv_hrxq_ibv_verify (struct priv *priv)
drivers/net/mlx5/mlx5_trigger.c +30 -0
@@ -14,6 +14,12 @@#include "mlx5_rxtx.h" #include "mlx5_utils.h" +/** +* Stop traffic on Tx queues. +* +* @param dev +* Pointer to Ethernet device structure. +*/ static void priv_txq_stop (struct priv *priv) {
@@ -23,6 +29,15 @@ priv_txq_stop(struct priv *priv)mlx5_priv_txq_release (priv, i); } +/** +* Start traffic on Tx queues. +* +* @param dev +* Pointer to Ethernet device structure. +* +* @return +* 0 on success, errno on error. +*/ static int priv_txq_start (struct priv *priv) {
@@ -58,6 +73,12 @@ priv_txq_start(struct priv *priv)return ret; } +/** +* Stop traffic on Rx queues. +* +* @param dev +* Pointer to Ethernet device structure. +*/ static void priv_rxq_stop (struct priv *priv) {
@@ -67,6 +88,15 @@ priv_rxq_stop(struct priv *priv)mlx5_priv_rxq_release (priv, i); } +/** +* Start traffic on Rx queues. +* +* @param dev +* Pointer to Ethernet device structure. +* +* @return +* 0 on success, errno on error. +*/ static int priv_rxq_start (struct priv *priv) {
drivers/net/mlx5/mlx5_txq.c +6 -4
@@ -614,9 +614,10 @@ mlx5_priv_txq_ibv_releasable(struct priv *priv __rte_unused,* Verify the Verbs Tx queue list is empty * * @param priv -* Pointer to private structure. +* Pointer to private structure. * -* @return the number of object not released. +* @return +* The number of object not released. */ int mlx5_priv_txq_ibv_verify (struct priv *priv)
@@ -893,9 +894,10 @@ mlx5_priv_txq_releasable(struct priv *priv, uint16_t idx)* Verify the Tx Queue list is empty * * @param priv -* Pointer to private structure. +* Pointer to private structure. * -* @return the number of object not released. +* @return +* The number of object not released. */ int mlx5_priv_txq_verify (struct priv *priv)
Signature · 1 line
2.11.0
PATCH v2 6/10 net/mlx5: remove useless empty lines
In reply to Nelio LaranjeiroSome empty lines have been added in the middle of the code without any reason. This commit removes them.
--- drivers/net/mlx5/mlx5.c | 20 -------------------- drivers/net/mlx5/mlx5_ethdev.c | 7 ------- drivers/net/mlx5/mlx5_mr.c | 1 - drivers/net/mlx5/mlx5_rss.c | 2 -- drivers/net/mlx5/mlx5_rxq.c | 1 - drivers/net/mlx5/mlx5_vlan.c | 6 ------ 6 files changed, 37 deletions(-)
drivers/net/mlx5/mlx5.c +0 -20
@@ -597,7 +597,6 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,return -ENOMEM ; }DEBUG ("using driver device index %d" , idx); -/* Save PCI address. */ mlx5_dev[idx].pci_addr = pci_dev->addr; list = mlx5_glue->get_device_list (&i);
@@ -644,7 +643,6 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,return -err; } ibv_dev = list[i]; -DEBUG ("device opened" );/* * Multi-packet send is supported by ConnectX-4 Lx PF as well
@@ -685,7 +683,6 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,if (mlx5_glue->query_device_ex (attr_ctx,NULL , &device_attr)) goto error;INFO ("%u port(s) detected" , device_attr.orig_attr.phys_port_cnt); -for (i =0 ; i < device_attr.orig_attr.phys_port_cnt; i++) {char name[RTE_ETH_NAME_MAX_LEN ];int len;
@@ -716,9 +713,7 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, pci_dev->addr.devid, pci_dev->addr.function);if (device_attr.orig_attr.phys_port_cnt >1 )snprintf (name + len,sizeof (name)," port %u" , i); - mlx5_dev[idx].ports |= test; -if (rte_eal_process_type () ==RTE_PROC_SECONDARY ) { eth_dev =rte_eth_dev_attach_secondary (name);if (eth_dev ==NULL ) {
@@ -755,15 +750,12 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,priv_select_tx_function (priv, eth_dev);continue ; } -DEBUG ("using port %u (%08" PRIx32")" , port, test); - ctx = mlx5_glue->open_device (ibv_dev);if (ctx ==NULL ) { err =ENODEV ; goto port_error; } - mlx5_glue->query_device_ex (ctx,NULL , &device_attr);/* Check port status. */ err = mlx5_glue->query_port (ctx, port, &port_attr);
@@ -771,19 +763,16 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,ERROR ("port query failed: %s" ,strerror (err)); goto port_error; } -if (port_attr.link_layer !=IBV_LINK_LAYER_ETHERNET ) {ERROR ("port %d is not configured in Ethernet mode" , port); err =EINVAL ; goto port_error; } -if (port_attr.state !=IBV_PORT_ACTIVE )DEBUG ("port %d is not active: \"%s\" (%d)" , port, mlx5_glue->port_state_str (port_attr.state), port_attr.state); -/* Allocate protection domain. */ pd = mlx5_glue->alloc_pd (ctx);if (pd ==NULL ) {
@@ -791,9 +780,7 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, err =ENOMEM ; goto port_error; } - mlx5_dev[idx].ports |= test; -/* from rte_ethdev.c */ priv = rte_zmalloc("ethdev private structure", sizeof(*priv),
@@ -803,7 +790,6 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, err =ENOMEM ; goto port_error; } - priv->ctx = ctx;strncpy (priv->ibdev_path, priv->ctx->device->ibdev_path,sizeof (priv->ibdev_path));
@@ -906,7 +892,6 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,/* Get actual MTU if possible. */ priv_get_mtu (priv, &priv->mtu);DEBUG ("port %u MTU is %u" , priv->port, priv->mtu); - eth_dev =rte_eth_dev_allocate (name);if (eth_dev ==NULL ) {ERROR ("can not allocate rte ethdev" );
@@ -929,7 +914,6 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,claim_zero (mlx5_mac_addr_add (eth_dev, &mac,0 ,0 ));TAILQ_INIT (&priv->flows);TAILQ_INIT (&priv->ctrl_flows); -/* Hint libmlx5 to use PMD allocator for data plane resources */ struct mlx5dv_ctx_allocators alctr = { .alloc = &mlx5_alloc_verbs_buf,
@@ -946,7 +930,6 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,/* Store device configuration on private structure. */ priv->config = config;continue ; - port_error:if (priv)rte_free (priv);
@@ -956,20 +939,17 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,claim_zero (mlx5_glue->close_device (ctx));break ; } -/* * XXX if something went wrong in the loop above, there is a resource * leak (ctx, pd, priv, dpdk ethdev) but we can do nothing about it as * long as the dpdk does not provide a way to deallocate a ethdev and a * way to enumerate the registered ethdevs to free the previous ones. */ -/* no port found, complain */ if (!mlx5_dev[idx].ports) { err =ENODEV ; goto error; } - error:if (attr_ctx)claim_zero (mlx5_glue->close_device (attr_ctx));
drivers/net/mlx5/mlx5_ethdev.c +0 -7
@@ -403,7 +403,6 @@ mlx5_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *info)char ifname[IF_NAMESIZE ]; info->pci_dev =RTE_ETH_DEV_TO_PCI (dev); -priv_lock (priv);/* FIXME: we should ask the device for these values. */ info->min_rx_bufsize =32 ;
@@ -492,7 +491,6 @@ mlx5_link_update_unlocked_gset(struct rte_eth_dev *dev)int link_speed =0 ;/* priv_lock() is not taken to allow concurrent calls. */ -if (priv_ifreq (priv,SIOCGIFFLAGS , &ifr)) {WARN ("ioctl(SIOCGIFFLAGS) failed: %s" ,strerror (errno));return -1 ;
@@ -838,7 +836,6 @@ mlx5_dev_get_flow_ctrl(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf) strerror(ret)); goto out; } - fc_conf->autoneg = ethpause.autoneg;if (ethpause.rx_pause && ethpause.tx_pause) fc_conf->mode =RTE_FC_FULL ;
@@ -849,7 +846,6 @@ mlx5_dev_get_flow_ctrl(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf)else fc_conf->mode =RTE_FC_NONE ; ret =0 ; - out:priv_unlock (priv);assert (ret >=0 );
@@ -890,7 +886,6 @@ mlx5_dev_set_flow_ctrl(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf) ethpause.tx_pause =1 ; else ethpause.tx_pause = 0; -priv_lock (priv);if (priv_ifreq (priv,SIOCETHTOOL , &ifr)) { ret = errno;
@@ -900,7 +895,6 @@ mlx5_dev_set_flow_ctrl(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf) goto out; } ret =0 ; - out:priv_unlock (priv);assert (ret >=0 );
@@ -1155,7 +1149,6 @@ priv_dev_interrupt_handler_install(struct priv *priv, struct rte_eth_dev *dev)rte_intr_callback_register (&priv->intr_handle, mlx5_dev_interrupt_handler, dev); } - rc =priv_socket_init (priv);if (!rc && priv->primary_socket) { priv->intr_handle_socket.fd = priv->primary_socket;
drivers/net/mlx5/mlx5_mr.c +0 -1
@@ -76,7 +76,6 @@ mlx5_check_mempool(struct rte_mempool *mp, uintptr_t *start,rte_mempool_mem_iter (mp, mlx5_check_mempool_cb, &data); *start = (uintptr_t )data.start; *end = (uintptr_t )data.end; -return data.ret; }
drivers/net/mlx5/mlx5_rss.c +0 -2
@@ -123,7 +123,6 @@ priv_rss_reta_index_resize(struct priv *priv, unsigned int reta_size)return ENOMEM ; priv->reta_idx = mem; priv->reta_idx_n = reta_size; -if (old_size < reta_size) memset(&(*priv->reta_idx)[old_size], 0, (reta_size - old_size) *
@@ -191,7 +190,6 @@ priv_dev_rss_reta_update(struct priv *priv, ret =priv_rss_reta_index_resize (priv, reta_size);if (ret)return ret; -for (idx =0 , i =0 ; (i != reta_size); ++i) { idx = i /RTE_RETA_GROUP_SIZE ; pos = i %RTE_RETA_GROUP_SIZE ;
drivers/net/mlx5/mlx5_rxq.c +0 -1
@@ -1067,7 +1067,6 @@ mlx5_priv_rxq_get(struct priv *priv, uint16_t idx) rxq_ctrl =container_of ((*priv->rxqs)[idx], struct mlx5_rxq_ctrl, rxq); -mlx5_priv_rxq_ibv_get (priv, idx);rte_atomic32_inc (&rxq_ctrl->refcnt); DEBUG("%p: Rx queue %p: refcnt %d", (void *)priv,
drivers/net/mlx5/mlx5_vlan.c +0 -6
@@ -120,14 +120,12 @@ priv_vlan_strip_queue_set(struct priv *priv, uint16_t idx, int on) .flags_mask = IBV_WQ_FLAGS_CVLAN_STRIPPING, .flags = vlan_offloads, }; - err = mlx5_glue->modify_wq (rxq_ctrl->ibv->wq, &mod);if (err) {ERROR ("%p: failed to modified stripping mode: %s" , (void *)priv,strerror (err));return ; } -/* Update related bits in RX queue. */ rxq->vlan_strip = !!on; }
@@ -152,13 +150,11 @@ mlx5_vlan_strip_queue_set(struct rte_eth_dev *dev, uint16_t queue, int on)ERROR ("VLAN stripping is not supported" );return ; } -/* Validate queue number */ if (queue >= priv->rxqs_n) {ERROR ("VLAN stripping, invalid queue number %d" , queue);return ; } -priv_lock (priv);priv_vlan_strip_queue_set (priv, queue, on);priv_unlock (priv);
@@ -186,13 +182,11 @@ mlx5_vlan_offload_set(struct rte_eth_dev *dev, int mask)ERROR ("VLAN stripping is not supported" );return 0 ; } -/* Run on every RX queue and set/reset VLAN stripping. */ priv_lock (priv);for (i =0 ; (i != priv->rxqs_n); i++)priv_vlan_strip_queue_set (priv, i, hw_vlan_strip);priv_unlock (priv); } -return 0 ; }
Signature · 1 line
2.11.0
PATCH v2 7/10 net/mlx5: remove control path locks
In reply to Nelio LaranjeiroIn priv struct only the memory region needs to be protected against concurrent access between the control plane and the data plane.
--- drivers/net/mlx5/mlx5.c | 2 -- drivers/net/mlx5/mlx5.h | 43 +----------------------------- drivers/net/mlx5/mlx5_ethdev.c | 58 +++-------------------------------------- drivers/net/mlx5/mlx5_flow.c | 18 +------------ drivers/net/mlx5/mlx5_mr.c | 4 +-- drivers/net/mlx5/mlx5_rss.c | 8 ------ drivers/net/mlx5/mlx5_rxq.c | 9 ------- drivers/net/mlx5/mlx5_stats.c | 15 +---------- drivers/net/mlx5/mlx5_trigger.c | 7 ----- drivers/net/mlx5/mlx5_txq.c | 5 ---- drivers/net/mlx5/mlx5_vlan.c | 6 ----- 11 files changed, 9 insertions(+), 166 deletions(-)
drivers/net/mlx5/mlx5.c +0 -2
@@ -165,7 +165,6 @@ mlx5_dev_close(struct rte_eth_dev *dev)unsigned int i;int ret; -priv_lock (priv);DEBUG ("%p: closing device \"%s\"" , (void *)dev, ((priv->ctx !=NULL ) ? priv->ctx->device->name :"" ));
@@ -227,7 +226,6 @@ mlx5_dev_close(struct rte_eth_dev *dev) ret =priv_mr_verify (priv);if (ret)WARN ("%p: some Memory Region still remain" , (void *)priv); -priv_unlock (priv);memset (priv,0 ,sizeof (*priv)); }
drivers/net/mlx5/mlx5.h +1 -42
55 lines not on this page · raw message
drivers/net/mlx5/mlx5_ethdev.c +4 -54
179 lines not on this page · raw message
drivers/net/mlx5/mlx5_flow.c +1 -17
@@ -1911,9 +1911,7 @@ mlx5_flow_validate(struct rte_eth_dev *dev,int ret;struct mlx5_flow_parse parser = { .create =0 , }; -priv_lock (priv); ret =priv_flow_convert (priv, attr, items, actions, error, &parser); -priv_unlock (priv);return ret; }
@@ -1933,10 +1931,8 @@ mlx5_flow_create(struct rte_eth_dev *dev,struct priv *priv = dev->data->dev_private;struct rte_flow *flow; -priv_lock (priv); flow =priv_flow_create (priv, &priv->flows, attr, items, actions, error); -priv_unlock (priv);return flow; }
@@ -2423,9 +2419,7 @@ mlx5_flow_destroy(struct rte_eth_dev *dev, {struct priv *priv = dev->data->dev_private; -priv_lock (priv);priv_flow_destroy (priv, &priv->flows, flow); -priv_unlock (priv);return 0 ; }
@@ -2441,9 +2435,7 @@ mlx5_flow_flush(struct rte_eth_dev *dev, {struct priv *priv = dev->data->dev_private; -priv_lock (priv);priv_flow_flush (priv, &priv->flows); -priv_unlock (priv);return 0 ; }
@@ -2501,16 +2493,14 @@ priv_flow_query_count(struct ibv_counter_set *cs,* @see rte_flow_ops */ int -mlx5_flow_query (struct rte_eth_dev *dev, +mlx5_flow_query(struct rte_eth_dev *dev __rte_unused,struct rte_flow *flow, enum rte_flow_action_type action __rte_unused,void *data,struct rte_flow_error *error) { -struct priv *priv = dev->data->dev_private;int res =EINVAL ; -priv_lock (priv);if (flow->cs) { res = priv_flow_query_count(flow->cs, &flow->counter_stats,
@@ -2522,7 +2512,6 @@ mlx5_flow_query(struct rte_eth_dev *dev,NULL , "no counter found for flow"); } -priv_unlock (priv);return -res; }#endif
@@ -2540,13 +2529,11 @@ mlx5_flow_isolate(struct rte_eth_dev *dev, {struct priv *priv = dev->data->dev_private; -priv_lock (priv);if (dev->data->dev_started) {rte_flow_error_set (error,EBUSY ,RTE_FLOW_ERROR_TYPE_UNSPECIFIED ,NULL ,"port must be stopped first" ); -priv_unlock (priv);return -rte_errno; } priv->isolated = !!enable;
@@ -2554,7 +2541,6 @@ mlx5_flow_isolate(struct rte_eth_dev *dev, priv->dev->dev_ops = &mlx5_dev_ops_isolate; else priv->dev->dev_ops = &mlx5_dev_ops; -priv_unlock (priv);return 0 ; }
@@ -3036,9 +3022,7 @@ mlx5_dev_filter_ctrl(struct rte_eth_dev *dev, *(const void **)arg = &mlx5_flow_ops;return 0 ;case RTE_ETH_FILTER_FDIR : -priv_lock (priv); ret =priv_fdir_ctrl_func (priv, filter_op, arg); -priv_unlock (priv);break ;default : ERROR("%p: filter type (%d) not supported",
drivers/net/mlx5/mlx5_mr.c +2 -2
@@ -164,9 +164,9 @@ mlx5_txq_mp2mr_reg(struct mlx5_txq_data *txq, struct rte_mempool *mp, container_of(txq, struct mlx5_txq_ctrl, txq);struct mlx5_mr *mr; -priv_lock (txq_ctrl->priv); +rte_spinlock_lock (&txq_ctrl->priv->mr_lock); mr =priv_txq_mp2mr_reg (txq_ctrl->priv, txq, mp, idx); -priv_unlock (txq_ctrl->priv); +rte_spinlock_unlock (&txq_ctrl->priv->mr_lock);return mr; }
drivers/net/mlx5/mlx5_rss.c +0 -8
@@ -44,7 +44,6 @@ mlx5_rss_hash_update(struct rte_eth_dev *dev,struct priv *priv = dev->data->dev_private;int ret =0 ; -priv_lock (priv);if (rss_conf->rss_hf &MLX5_RSS_HF_MASK ) { ret = -EINVAL ; goto out;
@@ -62,7 +61,6 @@ mlx5_rss_hash_update(struct rte_eth_dev *dev, } priv->rss_conf.rss_hf = rss_conf->rss_hf; out: -priv_unlock (priv);return ret; }
@@ -85,7 +83,6 @@ mlx5_rss_hash_conf_get(struct rte_eth_dev *dev,if (!rss_conf)return -EINVAL ; -priv_lock (priv);if (rss_conf->rss_key && (rss_conf->rss_key_len >= priv->rss_conf.rss_key_len)) { memcpy(rss_conf->rss_key, priv->rss_conf.rss_key,
@@ -93,7 +90,6 @@ mlx5_rss_hash_conf_get(struct rte_eth_dev *dev, } rss_conf->rss_key_len = priv->rss_conf.rss_key_len; rss_conf->rss_hf = priv->rss_conf.rss_hf; -priv_unlock (priv);return 0 ; }
@@ -222,9 +218,7 @@ mlx5_dev_rss_reta_query(struct rte_eth_dev *dev,int ret;struct priv *priv = dev->data->dev_private; -priv_lock (priv); ret =priv_dev_rss_reta_query (priv, reta_conf, reta_size); -priv_unlock (priv);return -ret; }
@@ -249,9 +243,7 @@ mlx5_dev_rss_reta_update(struct rte_eth_dev *dev,int ret;struct priv *priv = dev->data->dev_private; -priv_lock (priv); ret =priv_dev_rss_reta_update (priv, reta_conf, reta_size); -priv_unlock (priv);if (dev->data->dev_started) {mlx5_dev_stop (dev);mlx5_dev_start (dev);
drivers/net/mlx5/mlx5_rxq.c +0 -9
@@ -286,7 +286,6 @@ mlx5_rx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc, container_of(rxq, struct mlx5_rxq_ctrl, rxq);int ret =0 ; -priv_lock (priv);if (!rte_is_power_of_2 (desc)) { desc =1 <<log2above (desc); WARN("%p: increased number of descriptors in RX queue %u"
@@ -298,7 +297,6 @@ mlx5_rx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc,if (idx >= priv->rxqs_n) {ERROR ("%p: queue index out of range (%u >= %u)" , (void *)dev, idx, priv->rxqs_n); -priv_unlock (priv);return -EOVERFLOW ; }if (!priv_is_rx_queue_offloads_allowed (priv, conf->offloads)) {
@@ -329,7 +327,6 @@ mlx5_rx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc, (void *)dev, (void *)rxq_ctrl); (*priv->rxqs)[idx] = &rxq_ctrl->rxq; out: -priv_unlock (priv);return -ret; }
@@ -350,12 +347,10 @@ mlx5_rx_queue_release(void *dpdk_rxq)return ; rxq_ctrl = container_of(rxq, struct mlx5_rxq_ctrl, rxq); priv = rxq_ctrl->priv; -priv_lock (priv);if (!mlx5_priv_rxq_releasable (priv, rxq_ctrl->rxq.stats.idx))rte_panic ("Rx queue %p is still used by a flow and cannot be" " removed\n" , (void *)rxq_ctrl);mlx5_priv_rxq_release (priv, rxq_ctrl->rxq.stats.idx); -priv_unlock (priv); }/**
@@ -512,7 +507,6 @@ mlx5_rx_intr_enable(struct rte_eth_dev *dev, uint16_t rx_queue_id)struct mlx5_rxq_ctrl *rxq_ctrl;int ret =0 ; -priv_lock (priv); rxq_data = (*priv->rxqs)[rx_queue_id];if (!rxq_data) { ret =EINVAL ;
@@ -531,7 +525,6 @@ mlx5_rx_intr_enable(struct rte_eth_dev *dev, uint16_t rx_queue_id)mlx5_priv_rxq_ibv_release (priv, rxq_ibv); } exit: -priv_unlock (priv);if (ret)WARN ("unable to arm interrupt on rx queue %d" , rx_queue_id);return -ret;
@@ -559,7 +552,6 @@ mlx5_rx_intr_disable(struct rte_eth_dev *dev, uint16_t rx_queue_id)void *ev_ctx;int ret =0 ; -priv_lock (priv); rxq_data = (*priv->rxqs)[rx_queue_id];if (!rxq_data) { ret =EINVAL ;
@@ -583,7 +575,6 @@ mlx5_rx_intr_disable(struct rte_eth_dev *dev, uint16_t rx_queue_id) exit:if (rxq_ibv)mlx5_priv_rxq_ibv_release (priv, rxq_ibv); -priv_unlock (priv);if (ret)WARN ("unable to disable interrupt on rx queue %d" , rx_queue_id);
drivers/net/mlx5/mlx5_stats.c +1 -14
@@ -328,7 +328,6 @@ mlx5_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)unsigned int i;unsigned int idx; -priv_lock (priv);/* Add software counters. */ for (i =0 ; (i != priv->rxqs_n); ++i) {struct mlx5_rxq_data *rxq = (*priv->rxqs)[i];
@@ -374,7 +373,6 @@ mlx5_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)/* FIXME: retrieve and add hardware counters. */ #endif *stats = tmp; -priv_unlock (priv);return 0 ; }
@@ -391,7 +389,6 @@ mlx5_stats_reset(struct rte_eth_dev *dev)unsigned int i;unsigned int idx; -priv_lock (priv);for (i =0 ; (i != priv->rxqs_n); ++i) {if ((*priv->rxqs)[i] ==NULL )continue ;
@@ -409,7 +406,6 @@ mlx5_stats_reset(struct rte_eth_dev *dev)#ifndef MLX5_PMD_SOFT_COUNTERS /* FIXME: reset hardware counters. */ #endif -priv_unlock (priv); }/**
@@ -436,16 +432,13 @@ mlx5_xstats_get(struct rte_eth_dev *dev,struct mlx5_xstats_ctrl *xstats_ctrl = &priv->xstats_ctrl;int stats_n; -priv_lock (priv); stats_n =priv_ethtool_get_stats_n (priv);if (stats_n <0 ) { -priv_unlock (priv);return -1 ; }if (xstats_ctrl->stats_n != stats_n)priv_xstats_init (priv); ret =priv_xstats_get (priv, stats); -priv_unlock (priv); }return ret; }
@@ -463,15 +456,12 @@ mlx5_xstats_reset(struct rte_eth_dev *dev)struct mlx5_xstats_ctrl *xstats_ctrl = &priv->xstats_ctrl;int stats_n; -priv_lock (priv); stats_n =priv_ethtool_get_stats_n (priv);if (stats_n <0 ) - goto unlock; +return ;if (xstats_ctrl->stats_n != stats_n)priv_xstats_init (priv);priv_xstats_reset (priv); -unlock: -priv_unlock (priv); }/**
@@ -491,18 +481,15 @@ int mlx5_xstats_get_names(struct rte_eth_dev *dev __rte_unused, struct rte_eth_xstat_name *xstats_names, unsigned int n) { - struct priv *priv = dev->data->dev_private; unsigned int i;if (n >= xstats_n && xstats_names) { -priv_lock (priv);for (i =0 ; i != xstats_n; ++i) {strncpy (xstats_names[i].name, mlx5_counters_init[i].dpdk_name,RTE_ETH_XSTATS_NAME_SIZE ); xstats_names[i].name[RTE_ETH_XSTATS_NAME_SIZE -1 ] =0 ; } -priv_unlock (priv); }return xstats_n; }
drivers/net/mlx5/mlx5_trigger.c +0 -7
@@ -142,7 +142,6 @@ mlx5_dev_start(struct rte_eth_dev *dev)int err; dev->data->dev_started =1 ; -priv_lock (priv); err =priv_flow_create_drop_queue (priv);if (err) { ERROR("%p: Drop queue allocation failed: %s",
@@ -180,7 +179,6 @@ mlx5_dev_start(struct rte_eth_dev *dev) goto error; }priv_dev_interrupt_handler_install (priv, dev); -priv_unlock (priv);return 0 ; error:/* Rollback. */
@@ -192,7 +190,6 @@ mlx5_dev_start(struct rte_eth_dev *dev)priv_txq_stop (priv);priv_rxq_stop (priv);priv_flow_delete_drop_queue (priv); -priv_unlock (priv);return err; }
@@ -210,7 +207,6 @@ mlx5_dev_stop(struct rte_eth_dev *dev)struct priv *priv = dev->data->dev_private;struct mlx5_mr *mr; -priv_lock (priv); dev->data->dev_started =0 ;/* Prevent crashes when queues are still in use. */ dev->rx_pkt_burst = removed_rx_burst;
@@ -227,7 +223,6 @@ mlx5_dev_stop(struct rte_eth_dev *dev)for (mr =LIST_FIRST (&priv->mr); mr; mr =LIST_FIRST (&priv->mr))priv_mr_release (priv, mr);priv_flow_delete_drop_queue (priv); -priv_unlock (priv); }/**
@@ -412,8 +407,6 @@ mlx5_traffic_restart(struct rte_eth_dev *dev) {struct priv *priv = dev->data->dev_private; -priv_lock (priv);priv_dev_traffic_restart (priv, dev); -priv_unlock (priv);return 0 ; }
drivers/net/mlx5/mlx5_txq.c +0 -5
@@ -172,7 +172,6 @@ mlx5_tx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc, container_of(txq, struct mlx5_txq_ctrl, txq);int ret =0 ; -priv_lock (priv);/* * Don't verify port offloads for application which * use the old API.
@@ -205,7 +204,6 @@ mlx5_tx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc,if (idx >= priv->txqs_n) {ERROR ("%p: queue index out of range (%u >= %u)" , (void *)dev, idx, priv->txqs_n); -priv_unlock (priv);return -EOVERFLOW ; }if (!mlx5_priv_txq_releasable (priv, idx)) {
@@ -226,7 +224,6 @@ mlx5_tx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc, (void *)dev, (void *)txq_ctrl); (*priv->txqs)[idx] = &txq_ctrl->txq; out: -priv_unlock (priv);return -ret; }
@@ -248,7 +245,6 @@ mlx5_tx_queue_release(void *dpdk_txq)return ; txq_ctrl = container_of(txq, struct mlx5_txq_ctrl, txq); priv = txq_ctrl->priv; -priv_lock (priv);for (i =0 ; (i != priv->txqs_n); ++i)if ((*priv->txqs)[i] == txq) { DEBUG("%p: removing TX queue %p from list",
@@ -256,7 +252,6 @@ mlx5_tx_queue_release(void *dpdk_txq)mlx5_priv_txq_release (priv, i);break ; } -priv_unlock (priv); }
drivers/net/mlx5/mlx5_vlan.c +0 -6
@@ -46,7 +46,6 @@ mlx5_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on)unsigned int i;int ret =0 ; -priv_lock (priv);DEBUG ("%p: %s VLAN filter ID %" PRIu16, (void *)dev, (on ?"enable" :"disable" ), vlan_id);assert (priv->vlan_filter_n <=RTE_DIM (priv->vlan_filter));
@@ -82,7 +81,6 @@ mlx5_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on)if (dev->data->dev_started)priv_dev_traffic_restart (priv, dev); out: -priv_unlock (priv);return ret; }
@@ -155,9 +153,7 @@ mlx5_vlan_strip_queue_set(struct rte_eth_dev *dev, uint16_t queue, int on)ERROR ("VLAN stripping, invalid queue number %d" , queue);return ; } -priv_lock (priv);priv_vlan_strip_queue_set (priv, queue, on); -priv_unlock (priv); }/**
@@ -183,10 +179,8 @@ mlx5_vlan_offload_set(struct rte_eth_dev *dev, int mask)return 0 ; }/* Run on every RX queue and set/reset VLAN stripping. */ -priv_lock (priv);for (i =0 ; (i != priv->rxqs_n); i++)priv_vlan_strip_queue_set (priv, i, hw_vlan_strip); -priv_unlock (priv); }return 0 ; }
Signature · 1 line
2.11.0
PATCH v2 8/10 net/mlx5: prefix all function with mlx5
In reply to Nelio LaranjeiroThis change removes the need to distinguish unlocked priv_*() functions which are therefore renamed using a mlx5_*() prefix for consistency.
At the same time, all functions from mlx5 uses a pointer to the ETH device instead of the one to the PMD private data.
--- drivers/net/mlx5/mlx5.c | 104 ++++++------ drivers/net/mlx5/mlx5.h | 90 +++++------ drivers/net/mlx5/mlx5_ethdev.c | 288 ++++++++++++++------------------- drivers/net/mlx5/mlx5_flow.c | 342 +++++++++++++++++++-------------------- drivers/net/mlx5/mlx5_mac.c | 8 +- drivers/net/mlx5/mlx5_mr.c | 86 ++++------ drivers/net/mlx5/mlx5_rss.c | 107 ++++-------- drivers/net/mlx5/mlx5_rxq.c | 285 ++++++++++++++++---------------- drivers/net/mlx5/mlx5_rxtx.c | 10 +- drivers/net/mlx5/mlx5_rxtx.h | 115 +++++++------ drivers/net/mlx5/mlx5_rxtx_vec.c | 25 ++- drivers/net/mlx5/mlx5_socket.c | 29 ++-- drivers/net/mlx5/mlx5_stats.c | 135 ++++++---------- drivers/net/mlx5/mlx5_trigger.c | 118 ++++++-------- drivers/net/mlx5/mlx5_txq.c | 134 +++++++-------- drivers/net/mlx5/mlx5_vlan.c | 61 +++---- 16 files changed, 868 insertions(+), 1069 deletions(-)
drivers/net/mlx5/mlx5.c +52 -52
@@ -169,8 +169,8 @@ mlx5_dev_close(struct rte_eth_dev *dev) (void *)dev, ((priv->ctx != NULL) ? priv->ctx->device->name : ""));/* In case mlx5_dev_stop() has not been called. */ -priv_dev_interrupt_handler_uninstall (priv, dev); -priv_dev_traffic_disable (priv, dev); +mlx5_dev_interrupt_handler_uninstall (dev); +mlx5_traffic_disable (dev);/* Prevent crashes when queues are still in use. */ dev->rx_pkt_burst = removed_rx_burst; dev->tx_pkt_burst = removed_tx_burst;
@@ -178,7 +178,7 @@ mlx5_dev_close(struct rte_eth_dev *dev)/* XXX race condition if mlx5_rx_burst() is still running. */ usleep (1000 );for (i =0 ; (i != priv->rxqs_n); ++i) -mlx5_priv_rxq_release (priv, i); +mlx5_rxq_release (dev, i); priv->rxqs_n =0 ; priv->rxqs =NULL ; }
@@ -186,7 +186,7 @@ mlx5_dev_close(struct rte_eth_dev *dev)/* XXX race condition if mlx5_tx_burst() is still running. */ usleep (1000 );for (i =0 ; (i != priv->txqs_n); ++i) -mlx5_priv_txq_release (priv, i); +mlx5_txq_release (dev, i); priv->txqs_n =0 ; priv->txqs =NULL ; }
@@ -201,31 +201,31 @@ mlx5_dev_close(struct rte_eth_dev *dev)if (priv->reta_idx !=NULL )rte_free (priv->reta_idx);if (priv->primary_socket) -priv_socket_uninit (priv); - ret =mlx5_priv_hrxq_ibv_verify (priv); +mlx5_socket_uninit (dev); + ret =mlx5_hrxq_ibv_verify (dev);if (ret) -WARN ("%p: some Hash Rx queue still remain" , (void *)priv); - ret =mlx5_priv_ind_table_ibv_verify (priv); +WARN ("%p: some Hash Rx queue still remain" , (void *)dev); + ret =mlx5_ind_table_ibv_verify (dev);if (ret) -WARN ("%p: some Indirection table still remain" , (void *)priv); - ret =mlx5_priv_rxq_ibv_verify (priv); +WARN ("%p: some Indirection table still remain" , (void *)dev); + ret =mlx5_rxq_ibv_verify (dev);if (ret) -WARN ("%p: some Verbs Rx queue still remain" , (void *)priv); - ret =mlx5_priv_rxq_verify (priv); +WARN ("%p: some Verbs Rx queue still remain" , (void *)dev); + ret =mlx5_rxq_verify (dev);if (ret) -WARN ("%p: some Rx Queues still remain" , (void *)priv); - ret =mlx5_priv_txq_ibv_verify (priv); +WARN ("%p: some Rx Queues still remain" , (void *)dev); + ret =mlx5_txq_ibv_verify (dev);if (ret) -WARN ("%p: some Verbs Tx queue still remain" , (void *)priv); - ret =mlx5_priv_txq_verify (priv); +WARN ("%p: some Verbs Tx queue still remain" , (void *)dev); + ret =mlx5_txq_verify (dev);if (ret) -WARN ("%p: some Tx Queues still remain" , (void *)priv); - ret =priv_flow_verify (priv); +WARN ("%p: some Tx Queues still remain" , (void *)dev); + ret =mlx5_flow_verify (dev);if (ret) -WARN ("%p: some flows still remain" , (void *)priv); - ret =priv_mr_verify (priv); +WARN ("%p: some flows still remain" , (void *)dev); + ret =mlx5_mr_verify (dev);if (ret) -WARN ("%p: some Memory Region still remain" , (void *)priv); +WARN ("%p: some Memory Region still remain" , (void *)dev);memset (priv,0 ,sizeof (*priv)); }
@@ -466,15 +466,16 @@ static void *uar_base;/** * Reserve UAR address space for primary process. * -* @param[in] priv -* Pointer to private structure. +* @param[in] dev +* Pointer to Ethernet device. * * @return * 0 on success, errno value on failure. */ static int -priv_uar_init_primary (struct priv *priv) +mlx5_uar_init_primary (struct rte_eth_dev *dev) { +struct priv *priv = dev->data->dev_private;void *addr = (void *)0 ;int i;const struct rte_mem_config *mcfg;
@@ -516,15 +517,16 @@ priv_uar_init_primary(struct priv *priv)* Reserve UAR address space for secondary process, align with * primary process. * -* @param[in] priv -* Pointer to private structure. +* @param[in] dev +* Pointer to Ethernet device. * * @return * 0 on success, errno value on failure. */ static int -priv_uar_init_secondary (struct priv *priv) +mlx5_uar_init_secondary (struct rte_eth_dev *dev) { +struct priv *priv = dev->data->dev_private;void *addr;int ret;
@@ -690,7 +692,7 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,struct ibv_port_attr port_attr;struct ibv_pd *pd =NULL ;struct priv *priv =NULL ; -struct rte_eth_dev *eth_dev; +struct rte_eth_dev *eth_dev =NULL ;struct ibv_device_attr_ex device_attr_ex;struct ether_addr mac;struct ibv_device_attr_ex device_attr;
@@ -721,20 +723,19 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, } eth_dev->device = &pci_dev->device; eth_dev->dev_ops = &mlx5_dev_sec_ops; - priv = eth_dev->data->dev_private; - err =priv_uar_init_secondary (priv); + err =mlx5_uar_init_secondary (eth_dev);if (err <0 ) { err = -err; goto error; }/* Receive command fd from primary process */ - err =priv_socket_connect (priv); + err =mlx5_socket_connect (eth_dev);if (err <0 ) { err = -err; goto error; }/* Remap UAR for Tx queues. */ - err =priv_tx_uar_remap (priv, err); + err =mlx5_tx_uar_remap (eth_dev, err);if (err) goto error;/*
@@ -743,9 +744,9 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,* secondary process. */ eth_dev->rx_pkt_burst = -priv_select_rx_function (priv, eth_dev); +mlx5_select_rx_function (eth_dev); eth_dev->tx_pkt_burst = -priv_select_tx_function (priv, eth_dev); +mlx5_select_tx_function (eth_dev);continue ; }DEBUG ("using port %u (%08" PRIx32")" , port, test);
@@ -861,11 +862,23 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,WARN ("Rx CQE compression isn't supported" ); config.cqe_comp =0 ; } - err =priv_uar_init_primary (priv); + eth_dev =rte_eth_dev_allocate (name); +if (eth_dev ==NULL ) { +ERROR ("can not allocate rte ethdev" ); + err =ENOMEM ; + goto port_error; + } + eth_dev->data->dev_private = priv; + priv->dev = eth_dev; + eth_dev->data->mac_addrs = priv->mac; + eth_dev->device = &pci_dev->device; +rte_eth_copy_pci_info (eth_dev, pci_dev); + eth_dev->device->driver = &mlx5_driver.driver; + err =mlx5_uar_init_primary (eth_dev);if (err) goto port_error;/* Configure the first MAC address by default. */ -if (priv_get_mac (priv, &mac.addr_bytes)) { +if (mlx5_get_mac (eth_dev, &mac.addr_bytes)) {ERROR ("cannot get MAC address, is mlx5_en loaded?" " (errno: %s)" ,strerror (errno)); err =ENODEV ;
@@ -880,7 +893,7 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, {char ifname[IF_NAMESIZE ]; -if (priv_get_ifname (priv, &ifname) ==0 ) +if (mlx5_get_ifname (eth_dev, &ifname) ==0 )DEBUG ("port %u ifname is \"%s\"" , priv->port, ifname);else
@@ -888,25 +901,13 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, }#endif /* Get actual MTU if possible. */ -priv_get_mtu (priv, &priv->mtu); +mlx5_get_mtu (eth_dev, &priv->mtu);DEBUG ("port %u MTU is %u" , priv->port, priv->mtu); - eth_dev =rte_eth_dev_allocate (name); -if (eth_dev ==NULL ) { -ERROR ("can not allocate rte ethdev" ); - err =ENOMEM ; - goto port_error; - } - eth_dev->data->dev_private = priv; - eth_dev->data->mac_addrs = priv->mac; - eth_dev->device = &pci_dev->device; -rte_eth_copy_pci_info (eth_dev, pci_dev); - eth_dev->device->driver = &mlx5_driver.driver;/* * Initialize burst functions to prevent crashes before link-up. */ eth_dev->rx_pkt_burst = removed_rx_burst; eth_dev->tx_pkt_burst = removed_tx_burst; - priv->dev = eth_dev; eth_dev->dev_ops = &mlx5_dev_ops;/* Register MAC address. */ claim_zero (mlx5_mac_addr_add (eth_dev, &mac,0 ,0 ));
@@ -921,10 +922,9 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, mlx5_glue->dv_set_context_attr (ctx,MLX5DV_CTX_ATTR_BUF_ALLOCATORS , (void *)((uintptr_t )&alctr)); -/* Bring Ethernet device up. */ DEBUG ("forcing Ethernet interface up" ); -priv_set_flags (priv, ~IFF_UP ,IFF_UP ); +mlx5_set_flags (eth_dev, ~IFF_UP ,IFF_UP );/* Store device configuration on private structure. */ priv->config = config;continue ;
drivers/net/mlx5/mlx5.h +41 -49
156 lines not on this page · raw message
drivers/net/mlx5/mlx5_ethdev.c +118 -170
640 lines not on this page · raw message
drivers/net/mlx5/mlx5_flow.c +167 -175
900 lines not on this page · raw message
drivers/net/mlx5/mlx5_mac.c +4 -4
@@ -35,8 +35,8 @@/** * Get MAC address by querying netdevice. * -* @param[in] priv -* struct priv for the requested device. +* @param[in] dev +* Pointer to Ethernet device. * @param[out] mac * MAC address output buffer. *
@@ -44,11 +44,11 @@* 0 on success, -1 on failure and errno is set. */ int -priv_get_mac (struct priv *priv,uint8_t (*mac)[ETHER_ADDR_LEN ]) +mlx5_get_mac (struct rte_eth_dev *dev,uint8_t (*mac)[ETHER_ADDR_LEN ]) {struct ifreq request; -if (priv_ifreq (priv,SIOCGIFHWADDR , &request)) +if (mlx5_ifreq (dev,SIOCGIFHWADDR , &request))return -1 ;memcpy (mac, request.ifr_hwaddr.sa_data,ETHER_ADDR_LEN );return 0 ;
drivers/net/mlx5/mlx5_mr.c +31 -55
190 lines not on this page · raw message
drivers/net/mlx5/mlx5_rss.c +30 -77
161 lines not on this page · raw message
drivers/net/mlx5/mlx5_rxq.c +146 -139
706 lines not on this page · raw message
drivers/net/mlx5/mlx5_rxtx.h +54 -61
115 lines not on this page · raw message
drivers/net/mlx5/mlx5_stats.c +51 -84
135 lines not on this page · raw message
drivers/net/mlx5/mlx5_trigger.c +51 -67
118 lines not on this page · raw message
drivers/net/mlx5/mlx5_txq.c +69 -65
134 lines not on this page · raw message
drivers/net/mlx5/mlx5_vlan.c +22 -39
61 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Signature · 1 line
2.11.0
Part of the diff is not shown here. View the raw message.
PATCH v2 9/10 net/mlx5: change non failing function return values
In reply to Nelio LaranjeiroThese functions return int although they are not supposed to fail, resulting in unnecessary checks in their callers.
Some are returning error where is should be a boolean.
--- drivers/net/mlx5/mlx5.h | 4 ++-- drivers/net/mlx5/mlx5_mr.c | 4 ++-- drivers/net/mlx5/mlx5_rxq.c | 25 ++++++++++--------------- drivers/net/mlx5/mlx5_socket.c | 6 +----- drivers/net/mlx5/mlx5_trigger.c | 6 +----- drivers/net/mlx5/mlx5_txq.c | 17 ++++++----------- 6 files changed, 22 insertions(+), 40 deletions(-)
drivers/net/mlx5/mlx5.h +2 -2
@@ -242,7 +242,7 @@ int mlx5_vlan_offload_set(struct rte_eth_dev *dev, int mask);int mlx5_dev_start (struct rte_eth_dev *dev);void mlx5_dev_stop (struct rte_eth_dev *dev);int mlx5_traffic_enable (struct rte_eth_dev *dev); -int mlx5_traffic_disable (struct rte_eth_dev *dev); +void mlx5_traffic_disable (struct rte_eth_dev *dev);int mlx5_traffic_restart (struct rte_eth_dev *dev);/* mlx5_flow.c */
@@ -287,7 +287,7 @@ void mlx5_flow_delete_drop_queue(struct rte_eth_dev *dev);/* mlx5_socket.c */ int mlx5_socket_init (struct rte_eth_dev *priv); -int mlx5_socket_uninit (struct rte_eth_dev *priv); +void mlx5_socket_uninit (struct rte_eth_dev *priv);void mlx5_socket_handle (struct rte_eth_dev *priv);int mlx5_socket_connect (struct rte_eth_dev *priv);
drivers/net/mlx5/mlx5_mr.c +2 -2
@@ -307,7 +307,7 @@ mlx5_mr_get(struct rte_eth_dev *dev, struct rte_mempool *mp)* Pointer to memory region to release. * * @return -* 0 on success, errno on failure. +* 1 while a reference on it exists, 0 when freed. */ int mlx5_mr_release (struct mlx5_mr *mr)
@@ -321,7 +321,7 @@ mlx5_mr_release(struct mlx5_mr *mr)rte_free (mr);return 0 ; } -return EBUSY ; +return 1 ; }/**
drivers/net/mlx5/mlx5_rxq.c +10 -15
@@ -840,7 +840,7 @@ mlx5_rxq_ibv_get(struct rte_eth_dev *dev, uint16_t idx)* Verbs Rx queue object. * * @return -* 0 on success, errno value on failure. +* 1 while a reference on it exists, 0 when freed. */ int mlx5_rxq_ibv_release (struct mlx5_rxq_ibv *rxq_ibv)
@@ -867,7 +867,7 @@ mlx5_rxq_ibv_release(struct mlx5_rxq_ibv *rxq_ibv)rte_free (rxq_ibv);return 0 ; } -return EBUSY ; +return 1 ; }/**
@@ -1074,7 +1074,7 @@ mlx5_rxq_get(struct rte_eth_dev *dev, uint16_t idx)* TX queue index. * * @return -* 0 on success, errno value on failure. +* 1 while a reference on it exists, 0 when freed. */ int mlx5_rxq_release (struct rte_eth_dev *dev,uint16_t idx)
@@ -1086,13 +1086,8 @@ mlx5_rxq_release(struct rte_eth_dev *dev, uint16_t idx)return 0 ; rxq_ctrl = container_of((*priv->rxqs)[idx], struct mlx5_rxq_ctrl, rxq);assert (rxq_ctrl->priv); -if (rxq_ctrl->ibv) { -int ret; - - ret =mlx5_rxq_ibv_release (rxq_ctrl->ibv); -if (!ret) - rxq_ctrl->ibv =NULL ; - } +if (rxq_ctrl->ibv && !mlx5_rxq_ibv_release (rxq_ctrl->ibv)) + rxq_ctrl->ibv =NULL ;DEBUG ("%p: Rx queue %p: refcnt %d" , (void *)dev, (void *)rxq_ctrl,rte_atomic32_read (&rxq_ctrl->refcnt));if (rte_atomic32_dec_and_test (&rxq_ctrl->refcnt)) {
@@ -1101,7 +1096,7 @@ mlx5_rxq_release(struct rte_eth_dev *dev, uint16_t idx) (*priv->rxqs)[idx] =NULL ;return 0 ; } -return EBUSY ; +return 1 ; }/**
@@ -1261,7 +1256,7 @@ mlx5_ind_table_ibv_get(struct rte_eth_dev *dev, uint16_t queues[],* Indirection table to release. * * @return -* 0 on success, errno value on failure. +* 1 while a reference on it exists, 0 when freed. */ int mlx5_ind_table_ibv_release(struct rte_eth_dev *dev,
@@ -1281,7 +1276,7 @@ mlx5_ind_table_ibv_release(struct rte_eth_dev *dev,rte_free (ind_tbl);return 0 ; } -return EBUSY ; +return 1 ; }/**
@@ -1439,7 +1434,7 @@ mlx5_hrxq_get(struct rte_eth_dev *dev, uint8_t *rss_key, uint8_t rss_key_len,* Pointer to Hash Rx queue to release. * * @return -* 0 on success, errno value on failure. +* 1 while a reference on it exists, 0 when freed. */ int mlx5_hrxq_release (struct rte_eth_dev *dev,struct mlx5_hrxq *hrxq)
@@ -1454,7 +1449,7 @@ mlx5_hrxq_release(struct rte_eth_dev *dev, struct mlx5_hrxq *hrxq)return 0 ; }claim_nonzero (mlx5_ind_table_ibv_release (dev, hrxq->ind_table)); -return EBUSY ; +return 1 ; }/**
drivers/net/mlx5/mlx5_socket.c +1 -5
@@ -82,11 +82,8 @@ mlx5_socket_init(struct rte_eth_dev *dev)* * @param[in] dev * Pointer to Ethernet device. -* -* @return -* 0 on success, errno value on failure. */ -int +void mlx5_socket_uninit (struct rte_eth_dev *dev) {struct priv *priv = dev->data->dev_private;
@@ -95,7 +92,6 @@ mlx5_socket_uninit(struct rte_eth_dev *dev)claim_zero (close (priv->primary_socket)); priv->primary_socket =0 ;claim_zero (remove (path)); -return 0 ; }/**
drivers/net/mlx5/mlx5_trigger.c +1 -5
@@ -363,17 +363,13 @@ mlx5_traffic_enable(struct rte_eth_dev *dev)* * @param dev * Pointer to Ethernet device private data. -* -* @return -* 0 on success. */ -int +void mlx5_traffic_disable (struct rte_eth_dev *dev) {struct priv *priv = dev->data->dev_private;mlx5_flow_list_flush (dev, &priv->ctrl_flows); -return 0 ; }/**
drivers/net/mlx5/mlx5_txq.c +6 -11
@@ -572,7 +572,7 @@ mlx5_txq_ibv_get(struct rte_eth_dev *dev, uint16_t idx)* Verbs Tx queue object. * * @return -* 0 on success, errno on failure. +* 1 while a reference on it exists, 0 when freed. */ int mlx5_txq_ibv_release (struct mlx5_txq_ibv *txq_ibv)
@@ -587,7 +587,7 @@ mlx5_txq_ibv_release(struct mlx5_txq_ibv *txq_ibv)rte_free (txq_ibv);return 0 ; } -return EBUSY ; +return 1 ; }/**
@@ -824,7 +824,7 @@ mlx5_txq_get(struct rte_eth_dev *dev, uint16_t idx)* TX queue index. * * @return -* 0 on success, errno on failure. +* 1 while a reference on it exists, 0 when freed. */ int mlx5_txq_release (struct rte_eth_dev *dev,uint16_t idx)
@@ -839,13 +839,8 @@ mlx5_txq_release(struct rte_eth_dev *dev, uint16_t idx) txq = container_of((*priv->txqs)[idx], struct mlx5_txq_ctrl, txq);DEBUG ("%p: Tx queue %p: refcnt %d" , (void *)dev, (void *)txq,rte_atomic32_read (&txq->refcnt)); -if (txq->ibv) { -int ret; - - ret =mlx5_txq_ibv_release (txq->ibv); -if (!ret) - txq->ibv =NULL ; - } +if (txq->ibv &&mlx5_txq_ibv_release (txq->ibv)) + txq->ibv =NULL ;for (i =0 ; i !=MLX5_PMD_TX_MP_CACHE ; ++i) {if (txq->txq.mp2mr[i]) {mlx5_mr_release (txq->txq.mp2mr[i]);
@@ -862,7 +857,7 @@ mlx5_txq_release(struct rte_eth_dev *dev, uint16_t idx) (*priv->txqs)[idx] =NULL ;return 0 ; } -return EBUSY ; +return 1 ; }/**
Signature · 1 line
2.11.0
PATCH v2 10/10 net/mlx5: standardize on negative errno values
In reply to Nelio LaranjeiroSet rte_errno systematically as well.
--- drivers/net/mlx5/mlx5.c | 88 ++++++----- drivers/net/mlx5/mlx5_ethdev.c | 231 ++++++++++++++++------------- drivers/net/mlx5/mlx5_flow.c | 317 +++++++++++++++++++++++----------------- drivers/net/mlx5/mlx5_mac.c | 33 +++-- drivers/net/mlx5/mlx5_mr.c | 15 +- drivers/net/mlx5/mlx5_rss.c | 50 ++++--- drivers/net/mlx5/mlx5_rxmode.c | 28 +++- drivers/net/mlx5/mlx5_rxq.c | 142 ++++++++++-------- drivers/net/mlx5/mlx5_socket.c | 82 +++++++---- drivers/net/mlx5/mlx5_stats.c | 53 +++++-- drivers/net/mlx5/mlx5_trigger.c | 89 ++++++----- drivers/net/mlx5/mlx5_txq.c | 54 ++++--- drivers/net/mlx5/mlx5_vlan.c | 24 +-- 13 files changed, 719 insertions(+), 487 deletions(-)
drivers/net/mlx5/mlx5.c +49 -39
@@ -108,7 +108,7 @@ mlx5_getenv_int(const char *name)* A pointer to the callback data. * * @return -* a pointer to the allocate space. +* Allocated buffer, NULL otherwise and rte_errno is set. */ static void *mlx5_alloc_verbs_buf (size_t size,void *data)
@@ -130,6 +130,8 @@ mlx5_alloc_verbs_buf(size_t size, void *data) }assert (data !=NULL ); ret =rte_malloc_socket (__func__, size, alignment, socket); +if (!ret && size) + rte_errno =ENOMEM ;DEBUG ("Extern alloc size: %lu, align: %lu: %p" , size, alignment, ret);return ret; }
@@ -365,7 +367,7 @@ mlx5_dev_idx(struct rte_pci_addr *pci_addr)* User data. * * @return -* 0 on success, negative errno value on failure. +* 0 on success, a negative errno value otherwise and rte_errno is set. */ static int mlx5_args_check (const char *key,const char *val,void *opaque)
@@ -376,8 +378,9 @@ mlx5_args_check(const char *key, const char *val, void *opaque) errno =0 ; tmp =strtoul (val,NULL ,0 );if (errno) { + rte_errno = errno;WARN ("%s: \"%s\" is not a valid integer" , key, val); -return errno; +return -rte_errno; }if (strcmp (MLX5_RXQ_CQE_COMP_EN , key) ==0 ) { config->cqe_comp = !!tmp;
@@ -397,7 +400,8 @@ mlx5_args_check(const char *key, const char *val, void *opaque) config->rx_vec_en = !!tmp; }else {WARN ("%s: unknown parameter" , key); -return -EINVAL ; + rte_errno =EINVAL ; +return -rte_errno; }return 0 ; }
@@ -411,7 +415,7 @@ mlx5_args_check(const char *key, const char *val, void *opaque)* Device arguments structure. * * @return -* 0 on success, errno value on failure. +* 0 on success, a negative errno value otherwise and rte_errno is set. */ static int mlx5_args (struct mlx5_dev_config *config,struct rte_devargs *devargs)
@@ -442,9 +446,10 @@ mlx5_args(struct mlx5_dev_config *config, struct rte_devargs *devargs)if (rte_kvargs_count (kvlist, params[i])) { ret =rte_kvargs_process (kvlist, params[i], mlx5_args_check, config); -if (ret !=0 ) { +if (ret) { + rte_errno =EINVAL ;rte_kvargs_free (kvlist); -return ret; +return -rte_errno; } } }
@@ -470,7 +475,7 @@ static void *uar_base;* Pointer to Ethernet device. * * @return -* 0 on success, errno value on failure. +* 0 on success, a negative errno value otherwise and rte_errno is set. */ static int mlx5_uar_init_primary (struct rte_eth_dev *dev)
@@ -479,7 +484,6 @@ mlx5_uar_init_primary(struct rte_eth_dev *dev)void *addr = (void *)0 ;int i;const struct rte_mem_config *mcfg; -int ret;if (uar_base) {/* UAR address space mapped. */ priv->uar_base = uar_base;
@@ -501,8 +505,8 @@ mlx5_uar_init_primary(struct rte_eth_dev *dev)if (addr ==MAP_FAILED ) {ERROR ("Failed to reserve UAR address space, please adjust " "MLX5_UAR_SIZE or try --base-virtaddr" ); - ret =ENOMEM ; -return ret; + rte_errno =ENOMEM ; +return -rte_errno; }/* Accept either same addr or a new addr returned from mmap if target * range occupied.
@@ -521,14 +525,13 @@ mlx5_uar_init_primary(struct rte_eth_dev *dev)* Pointer to Ethernet device. * * @return -* 0 on success, errno value on failure. +* 0 on success, a negative errno value otherwise and rte_errno is set. */ static int mlx5_uar_init_secondary (struct rte_eth_dev *dev) {struct priv *priv = dev->data->dev_private;void *addr; -int ret;assert (priv->uar_base);if (uar_base) {/* already reserved. */
@@ -541,15 +544,15 @@ mlx5_uar_init_secondary(struct rte_eth_dev *dev)if (addr ==MAP_FAILED ) {ERROR ("UAR mmap failed: %p size: %llu" , priv->uar_base,MLX5_UAR_SIZE ); - ret =ENXIO ; -return ret; + rte_errno =ENXIO ; +return -rte_errno; }if (priv->uar_base != addr) {ERROR ("UAR address %p size %llu occupied, please adjust " "MLX5_UAR_OFFSET or try EAL parameter --base-virtaddr" , priv->uar_base,MLX5_UAR_SIZE ); - ret =ENXIO ; -return ret; + rte_errno =ENXIO ; +return -rte_errno; } uar_base = addr;/* process local, don't reserve again */ INFO ("Reserved UAR address space: %p" , addr);
@@ -568,13 +571,13 @@ mlx5_uar_init_secondary(struct rte_eth_dev *dev)* PCI device information. * * @return -* 0 on success, negative errno value on failure. +* 0 on success, a negative errno value otherwise and rte_errno is set. */ static int mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,struct rte_pci_device *pci_dev) { -struct ibv_device **list; +struct ibv_device **list =NULL ;struct ibv_device *ibv_dev;int err =0 ;struct ibv_context *attr_ctx =NULL ;
@@ -594,7 +597,8 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, idx =mlx5_dev_idx (&pci_dev->addr);if (idx ==-1 ) {ERROR ("this driver cannot support any more adapters" ); -return -ENOMEM ; + err =ENOMEM ; + goto error; }DEBUG ("using driver device index %d" , idx);/* Save PCI address. */
@@ -602,9 +606,10 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, list = mlx5_glue->get_device_list (&i);if (list ==NULL ) {assert (errno); + err = errno;if (errno ==ENOSYS )ERROR ("cannot list devices, is ib_uverbs loaded?" ); -return -errno; + goto error; }assert (i >=0 );/*
@@ -626,7 +631,8 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,INFO ("PCI information matches, using device \"%s\"" , list[i]->name); attr_ctx = mlx5_glue->open_device (list[i]); - err = errno; + rte_errno = errno; + err = rte_errno;break ; }if (attr_ctx ==NULL ) {
@@ -634,13 +640,12 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,switch (err) {case 0 :ERROR ("cannot access device, is mlx5_ib loaded?" ); -return -ENODEV ; + err =ENODEV ; + goto error;case EINVAL :ERROR ("cannot use device, are drivers up to date?" ); -return -EINVAL ; + goto error; } -assert (err >0 ); -return -err; } ibv_dev = list[i];DEBUG ("device opened" );
@@ -680,8 +685,10 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,#else WARN ("Tunnel offloading disabled due to old OFED/rdma-core version" );#endif -if (mlx5_glue->query_device_ex (attr_ctx,NULL , &device_attr)) +if (mlx5_glue->query_device_ex (attr_ctx,NULL , &device_attr)) { + err = errno; goto error; + }INFO ("%u port(s) detected" , device_attr.orig_attr.phys_port_cnt);for (i =0 ; i < device_attr.orig_attr.phys_port_cnt; i++) {char name[RTE_ETH_NAME_MAX_LEN ];
@@ -718,22 +725,19 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, eth_dev =rte_eth_dev_attach_secondary (name);if (eth_dev ==NULL ) {ERROR ("can not attach rte ethdev" ); - err =ENOMEM ; + rte_errno =ENOMEM ; + err = rte_errno; goto error; } eth_dev->device = &pci_dev->device; eth_dev->dev_ops = &mlx5_dev_sec_ops; err =mlx5_uar_init_secondary (eth_dev); -if (err <0 ) { - err = -err; +if (err) goto error; - }/* Receive command fd from primary process */ err =mlx5_socket_connect (eth_dev); -if (err <0 ) { - err = -err; +if (err) goto error; - }/* Remap UAR for Tx queues. */ err =mlx5_tx_uar_remap (eth_dev, err);if (err)
@@ -804,6 +808,7 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, }if (mlx5_glue->query_device_ex (ctx,NULL , &device_attr_ex)) {ERROR ("ibv_query_device_ex() failed" ); + err = errno; goto port_error; }
@@ -901,7 +906,9 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, }#endif /* Get actual MTU if possible. */ -mlx5_get_mtu (eth_dev, &priv->mtu); + err =mlx5_get_mtu (eth_dev, &priv->mtu); +if (err) + goto port_error;DEBUG ("port %u MTU is %u" , priv->port, priv->mtu);/* * Initialize burst functions to prevent crashes before link-up.
@@ -945,16 +952,19 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,*/ /* no port found, complain */ if (!mlx5_dev[idx].ports) { - err =ENODEV ; - goto error; + rte_errno =ENODEV ; + err = rte_errno; } error:if (attr_ctx)claim_zero (mlx5_glue->close_device (attr_ctx));if (list) mlx5_glue->free_device_list (list); -assert (err >=0 ); -return -err; +if (err) { + rte_errno = err; +return -rte_errno; + } +return 0 ; }static const struct rte_pci_id mlx5_pci_id_map[] = {
drivers/net/mlx5/mlx5_ethdev.c +133 -98
541 lines not on this page · raw message
drivers/net/mlx5/mlx5_flow.c +183 -134
847 lines not on this page · raw message
drivers/net/mlx5/mlx5_mac.c +22 -11
@@ -41,15 +41,17 @@* MAC address output buffer. * * @return -* 0 on success, -1 on failure and errno is set. +* 0 on success, a negative errno value otherwise and rte_errno is set. */ int mlx5_get_mac (struct rte_eth_dev *dev,uint8_t (*mac)[ETHER_ADDR_LEN ]) {struct ifreq request; +int ret; -if (mlx5_ifreq (dev,SIOCGIFHWADDR , &request)) -return -1 ; + ret =mlx5_ifreq (dev,SIOCGIFHWADDR , &request); +if (ret) +return ret;memcpy (mac, request.ifr_hwaddr.sa_data,ETHER_ADDR_LEN );return 0 ; }
@@ -67,8 +69,13 @@ mlx5_mac_addr_remove(struct rte_eth_dev *dev, uint32_t index) {assert (index <MLX5_MAX_MAC_ADDRESSES );memset (&dev->data->mac_addrs[index],0 ,sizeof (struct ether_addr )); -if (!dev->data->promiscuous) -mlx5_traffic_restart (dev); +if (!dev->data->promiscuous) { +int ret =mlx5_traffic_restart (dev); + +if (ret) +ERROR ("%p cannot remove mac address: %s" , (void *)dev, +strerror (rte_errno)); + } }/**
@@ -84,14 +91,13 @@ mlx5_mac_addr_remove(struct rte_eth_dev *dev, uint32_t index)* VMDq pool index to associate address with (ignored). * * @return -* 0 on success. +* 0 on success, a negative errno value otherwise and rte_errno is set. */ int mlx5_mac_addr_add (struct rte_eth_dev *dev,struct ether_addr *mac, uint32_t index, uint32_t vmdq __rte_unused) {unsigned int i; -int ret =0 ;assert (index <MLX5_MAX_MAC_ADDRESSES );/* First, make sure this address isn't already configured. */
@@ -102,12 +108,13 @@ mlx5_mac_addr_add(struct rte_eth_dev *dev, struct ether_addr *mac,if (memcmp (&dev->data->mac_addrs[i], mac,sizeof (*mac)))continue ;/* Address already configured elsewhere, return with error. */ -return EADDRINUSE ; + rte_errno =EADDRINUSE ; +return -rte_errno; } dev->data->mac_addrs[index] = *mac;if (!dev->data->promiscuous) -mlx5_traffic_restart (dev); -return ret; +return mlx5_traffic_restart (dev); +return 0 ; }/**
@@ -121,6 +128,10 @@ mlx5_mac_addr_add(struct rte_eth_dev *dev, struct ether_addr *mac,void mlx5_mac_addr_set (struct rte_eth_dev *dev,struct ether_addr *mac_addr) { +int ret; +DEBUG ("%p: setting primary MAC address" , (void *)dev); -mlx5_mac_addr_add (dev, mac_addr,0 ,0 ); + ret =mlx5_mac_addr_add (dev, mac_addr,0 ,0 ); +if (ret) +ERROR ("cannot set mac address: %s" ,strerror (rte_errno)); }
drivers/net/mlx5/mlx5_mr.c +12 -3
@@ -91,7 +91,7 @@ mlx5_check_mempool(struct rte_mempool *mp, uintptr_t *start,* Index of the next available entry. * * @return -* mr on success, NULL on failure. +* mr on success, NULL on failure and rte_errno is set. */ struct mlx5_mr * mlx5_txq_mp2mr_reg(struct mlx5_txq_data *txq, struct rte_mempool *mp,
@@ -115,6 +115,7 @@ mlx5_txq_mp2mr_reg(struct mlx5_txq_data *txq, struct rte_mempool *mp," rte_eth_dev_start()" , (void *)mp, mp->name);rte_spinlock_unlock (&txq_ctrl->priv->mr_lock); + rte_errno =ENOTSUP ;return NULL ; } mr =mlx5_mr_new (dev, mp);
@@ -203,7 +204,9 @@ mlx5_mp2mr_iter(struct rte_mempool *mp, void *arg)mlx5_mr_release (mr);return ; } -mlx5_mr_new (priv->dev, mp); + mr =mlx5_mr_new (priv->dev, mp); +if (!mr) +ERROR ("cannot create memory region: %s" ,strerror (rte_errno)); }/**
@@ -216,7 +219,7 @@ mlx5_mp2mr_iter(struct rte_mempool *mp, void *arg)* Pointer to the memory pool to register. * * @return -* The memory region on success. +* The memory region on success, NULL on failure and rte_errno is set. */ struct mlx5_mr *mlx5_mr_new (struct rte_eth_dev *dev,struct rte_mempool *mp)
@@ -231,11 +234,13 @@ mlx5_mr_new(struct rte_eth_dev *dev, struct rte_mempool *mp) mr =rte_zmalloc_socket (__func__,sizeof (*mr),0 , mp->socket_id);if (!mr) {DEBUG ("unable to configure MR, ibv_reg_mr() failed." ); + rte_errno =ENOMEM ;return NULL ; }if (mlx5_check_mempool (mp, &start, &end) !=0 ) {ERROR ("mempool %p: not virtually contiguous" , (void *)mp); + rte_errno =ENOMEM ;return NULL ; } DEBUG("mempool %p area start=%p end=%p size=%zu",
@@ -260,6 +265,10 @@ mlx5_mr_new(struct rte_eth_dev *dev, struct rte_mempool *mp) (size_t)(end - start)); mr->mr = mlx5_glue->reg_mr (priv->pd, (void *)start, end - start,IBV_ACCESS_LOCAL_WRITE ); +if (!mr->mr) { + rte_errno =ENOMEM ; +return NULL ; + } mr->mp = mp; mr->lkey =rte_cpu_to_be_32 (mr->mr->lkey);rte_atomic32_inc (&mr->refcnt);
drivers/net/mlx5/mlx5_rss.c +28 -22
128 lines not on this page · raw message
drivers/net/mlx5/mlx5_rxmode.c +24 -4
@@ -32,8 +32,13 @@void mlx5_promiscuous_enable (struct rte_eth_dev *dev) { +int ret; + dev->data->promiscuous =1 ; -mlx5_traffic_restart (dev); + ret =mlx5_traffic_restart (dev); +if (ret) +ERROR ("%p cannot enable promiscuous mode: %s" , (void *)dev, +strerror (rte_errno)); }/**
@@ -45,8 +50,13 @@ mlx5_promiscuous_enable(struct rte_eth_dev *dev)void mlx5_promiscuous_disable (struct rte_eth_dev *dev) { +int ret; + dev->data->promiscuous =0 ; -mlx5_traffic_restart (dev); + ret =mlx5_traffic_restart (dev); +if (ret) +ERROR ("%p cannot disable promiscuous mode: %s" , (void *)dev, +strerror (rte_errno)); }/**
@@ -58,8 +68,13 @@ mlx5_promiscuous_disable(struct rte_eth_dev *dev)void mlx5_allmulticast_enable (struct rte_eth_dev *dev) { +int ret; + dev->data->all_multicast =1 ; -mlx5_traffic_restart (dev); + ret =mlx5_traffic_restart (dev); +if (ret) +ERROR ("%p cannot enable allmulicast mode: %s" , (void *)dev, +strerror (rte_errno)); }/**
@@ -71,6 +86,11 @@ mlx5_allmulticast_enable(struct rte_eth_dev *dev)void mlx5_allmulticast_disable (struct rte_eth_dev *dev) { +int ret; + dev->data->all_multicast =0 ; -mlx5_traffic_restart (dev); + ret =mlx5_traffic_restart (dev); +if (ret) +ERROR ("%p cannot disable allmulicast mode: %s" , (void *)dev, +strerror (rte_errno)); }
drivers/net/mlx5/mlx5_rxq.c +85 -57
456 lines not on this page · raw message
drivers/net/mlx5/mlx5_socket.c +50 -32
212 lines not on this page · raw message
drivers/net/mlx5/mlx5_stats.c +38 -15
144 lines not on this page · raw message
drivers/net/mlx5/mlx5_trigger.c +49 -40
214 lines not on this page · raw message
drivers/net/mlx5/mlx5_txq.c +33 -21
12 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Signature · 1 line
2.11.0
Part of the diff is not shown here. View the raw message.
v3 cover net/mlx5: clean driver
In reply to Nelio Laranjeiro- Removes unused SR-IOV flag.
- Adds missing documentation on some functions.
- Removes the spin-lock on the private structure.
- Standardize the return values of all functions as discussed on the mailing list [1].
[1] https://dpdk.org/ml/archives/dev/2018-January/087991.html
Changes in v2:
- fix a segfault in Tx queue release.
Nelio Laranjeiro (10):
net/mlx5: fix sriov flag
net/mlx5: name parameters in function prototypes net/mlx5: mark parameters with unused attribute net/mlx5: normalize function prototypes net/mlx5: add missing function documentation net/mlx5: remove useless empty lines net/mlx5: remove control path locks net/mlx5: prefix all function with mlx5 net/mlx5: change non failing function return values net/mlx5: standardize on negative errno values
drivers/net/mlx5/mlx5.c | 236 ++++++-------- drivers/net/mlx5/mlx5.h | 240 ++++++-------- drivers/net/mlx5/mlx5_ethdev.c | 611 +++++++++++++++-------------------- drivers/net/mlx5/mlx5_flow.c | 664 ++++++++++++++++++++------------------- drivers/net/mlx5/mlx5_mac.c | 42 ++- drivers/net/mlx5/mlx5_mr.c | 130 ++++---- drivers/net/mlx5/mlx5_rss.c | 159 ++++------ drivers/net/mlx5/mlx5_rxmode.c | 28 +- drivers/net/mlx5/mlx5_rxq.c | 488 ++++++++++++++-------------- drivers/net/mlx5/mlx5_rxtx.c | 49 ++- drivers/net/mlx5/mlx5_rxtx.h | 161 +++++----- drivers/net/mlx5/mlx5_rxtx_vec.c | 25 +- drivers/net/mlx5/mlx5_socket.c | 115 ++++--- drivers/net/mlx5/mlx5_stats.c | 189 +++++------ drivers/net/mlx5/mlx5_trigger.c | 234 +++++++------- drivers/net/mlx5/mlx5_txq.c | 229 +++++++------- drivers/net/mlx5/mlx5_vlan.c | 93 ++---- 17 files changed, 1761 insertions(+), 1932 deletions(-)
Signature · 1 line
2.11.0
PATCH v3 1/10 net/mlx5: fix sriov flag
priv_get_num_vfs() was used to help the PMD in prefetching the mbuf in datapath when the PMD was behaving in VF mode.
This knowledge is no more used.
--- drivers/net/mlx5/mlx5.c | 18 ++---------------- drivers/net/mlx5/mlx5.h | 2 -- drivers/net/mlx5/mlx5_ethdev.c | 37 ------------------------------------- 3 files changed, 2 insertions(+), 55 deletions(-)
drivers/net/mlx5/mlx5.c +2 -16
@@ -578,7 +578,6 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev)int err =0 ;struct ibv_context *attr_ctx =NULL ;struct ibv_device_attr_ex device_attr; -unsigned int sriov;unsigned int mps;unsigned int cqe_comp;unsigned int tunnel_en =0 ;
@@ -625,18 +624,8 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) (pci_dev->addr.devid != pci_addr.devid) || (pci_dev->addr.function != pci_addr.function)) continue; - sriov = ((pci_dev->id.device_id == -PCI_DEVICE_ID_MELLANOX_CONNECTX4VF ) || - (pci_dev->id.device_id == -PCI_DEVICE_ID_MELLANOX_CONNECTX4LXVF ) || - (pci_dev->id.device_id == -PCI_DEVICE_ID_MELLANOX_CONNECTX5VF ) || - (pci_dev->id.device_id == -PCI_DEVICE_ID_MELLANOX_CONNECTX5EXVF )); -INFO ("PCI information matches, using device \"%s\"" -" (SR-IOV: %s)" , - list[i]->name, - sriov ?"true" :"false" ); +INFO ("PCI information matches, using device \"%s\"" , + list[i]->name); attr_ctx = mlx5_glue->open_device (list[i]); err = errno;break ;
@@ -709,7 +698,6 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev)struct rte_eth_dev *eth_dev;struct ibv_device_attr_ex device_attr_ex;struct ether_addr mac; -uint16_t num_vfs =0 ;struct ibv_device_attr_ex device_attr;struct mlx5_dev_config config = { .cqe_comp = cqe_comp,
@@ -870,8 +858,6 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev)DEBUG ("hardware RX end alignment padding is %ssupported" , (config.hw_padding ?"" :"not " )); -priv_get_num_vfs (priv, &num_vfs); - config.sriov = (num_vfs || sriov); config.tso = ((device_attr_ex.tso_caps.max_tso >0 ) && (device_attr_ex.tso_caps.supported_qpts & (1 <<IBV_QPT_RAW_PACKET )));
drivers/net/mlx5/mlx5.h +0 -2
@@ -78,7 +78,6 @@ struct mlx5_dev_config { unsigned int hw_vlan_strip:1; /* VLAN stripping is supported. */ unsigned int hw_fcs_strip:1; /* FCS stripping is supported. */ unsigned int hw_padding:1; /* End alignment padding is supported. */ - unsigned int sriov:1; /* This is a VF or PF with VF devices. */ unsigned int mps:2; /* Multi-packet send supported mode. */ unsigned int tunnel_en:1;/* Whether tunnel stateless offloads are supported. */
@@ -209,7 +208,6 @@ struct priv *mlx5_get_priv(struct rte_eth_dev *dev);int mlx5_is_secondary (void );int priv_get_ifname (const struct priv *,char (*)[IF_NAMESIZE ]);int priv_ifreq (const struct priv *,int req,struct ifreq *); -int priv_get_num_vfs (struct priv *,uint16_t *);int priv_get_mtu (struct priv *,uint16_t *);int priv_set_flags (struct priv *,unsigned int ,unsigned int );int mlx5_dev_configure (struct rte_eth_dev *);
drivers/net/mlx5/mlx5_ethdev.c +0 -37
@@ -201,43 +201,6 @@ priv_ifreq(const struct priv *priv, int req, struct ifreq *ifr) }/** -* Return the number of active VFs for the current device. -* -* @param[in] priv -* Pointer to private structure. -* @param[out] num_vfs -* Number of active VFs. -* -* @return -* 0 on success, -1 on failure and errno is set. -*/ -int -priv_get_num_vfs (struct priv *priv,uint16_t *num_vfs) -{ -/* The sysfs entry name depends on the operating system. */ -const char **name = (const char *[]){ -"sriov_numvfs" , -"mlx5_num_vfs" , -NULL , - }; - -do { -int n; -FILE *file; -MKSTR (path,"%s/device/%s" , priv->ibdev_path, *name); - - file =fopen (path,"rb" ); -if (!file) -continue ; - n =fscanf (file,"%" SCNu16, num_vfs); -fclose (file); -if (n ==1 ) -return 0 ; - }while (*(++name)); -return -1 ; -} - -/** * Get device MTU. * * @param priv
Signature · 1 line
2.11.0
PATCH v3 2/10 net/mlx5: name parameters in function prototypes
In reply to Nelio Laranjeiro--- drivers/net/mlx5/mlx5.h | 191 ++++++++++++++++++++++++------------------- drivers/net/mlx5/mlx5_rxtx.h | 162 ++++++++++++++++++++---------------- 2 files changed, 195 insertions(+), 158 deletions(-)
drivers/net/mlx5/mlx5.h +105 -86
@@ -206,113 +206,132 @@ int mlx5_getenv_int(const char *);struct priv *mlx5_get_priv (struct rte_eth_dev *dev);int mlx5_is_secondary (void ); -int priv_get_ifname (const struct priv *,char (*)[IF_NAMESIZE ]); -int priv_ifreq (const struct priv *,int req,struct ifreq *); -int priv_get_mtu (struct priv *,uint16_t *); -int priv_set_flags (struct priv *,unsigned int ,unsigned int ); -int mlx5_dev_configure (struct rte_eth_dev *); -void mlx5_dev_infos_get (struct rte_eth_dev *,struct rte_eth_dev_info *); +int priv_get_ifname (const struct priv *priv,char (*ifname)[IF_NAMESIZE ]); +int priv_ifreq (const struct priv *priv,int req,struct ifreq *ifr); +int priv_get_mtu (struct priv *priv,uint16_t *mtu); +int priv_set_flags (struct priv *priv,unsigned int keep,unsigned int flags); +int mlx5_dev_configure (struct rte_eth_dev *dev); +void mlx5_dev_infos_get (struct rte_eth_dev *dev,struct rte_eth_dev_info *info);const uint32_t *mlx5_dev_supported_ptypes_get (struct rte_eth_dev *dev); -int priv_link_update (struct priv *,int ); -int priv_force_link_status_change (struct priv *,int ); -int mlx5_link_update (struct rte_eth_dev *,int ); -int mlx5_dev_set_mtu (struct rte_eth_dev *,uint16_t ); -int mlx5_dev_get_flow_ctrl (struct rte_eth_dev *,struct rte_eth_fc_conf *); -int mlx5_dev_set_flow_ctrl (struct rte_eth_dev *,struct rte_eth_fc_conf *); -int mlx5_ibv_device_to_pci_addr (const struct ibv_device *, -struct rte_pci_addr *); -void mlx5_dev_link_status_handler (void *); -void mlx5_dev_interrupt_handler (void *); -void priv_dev_interrupt_handler_uninstall (struct priv *,struct rte_eth_dev *); -void priv_dev_interrupt_handler_install (struct priv *,struct rte_eth_dev *); +int priv_link_update (struct priv *priv,int wait_to_complete); +int priv_force_link_status_change (struct priv *priv,int status); +int mlx5_link_update (struct rte_eth_dev *dev,int wait_to_complete); +int mlx5_dev_set_mtu (struct rte_eth_dev *dev,uint16_t mtu); +int mlx5_dev_get_flow_ctrl (struct rte_eth_dev *dev, +struct rte_eth_fc_conf *fc_conf); +int mlx5_dev_set_flow_ctrl (struct rte_eth_dev *dev, +struct rte_eth_fc_conf *fc_conf); +int mlx5_ibv_device_to_pci_addr (const struct ibv_device *device, +struct rte_pci_addr *pci_addr); +void mlx5_dev_link_status_handler (void *arg); +void mlx5_dev_interrupt_handler (void *cb_arg); +void priv_dev_interrupt_handler_uninstall (struct priv *priv, +struct rte_eth_dev *dev); +void priv_dev_interrupt_handler_install (struct priv *priv, +struct rte_eth_dev *dev);int mlx5_set_link_down (struct rte_eth_dev *dev);int mlx5_set_link_up (struct rte_eth_dev *dev); +eth_tx_burst_t priv_select_tx_function (struct priv *priv, +struct rte_eth_dev *dev); +eth_rx_burst_t priv_select_rx_function (struct priv *priv, +struct rte_eth_dev *dev);int mlx5_is_removed (struct rte_eth_dev *dev); -eth_tx_burst_t priv_select_tx_function (struct priv *,struct rte_eth_dev *); -eth_rx_burst_t priv_select_rx_function (struct priv *,struct rte_eth_dev *);/* mlx5_mac.c */ -int priv_get_mac (struct priv *,uint8_t (*)[ETHER_ADDR_LEN ]); -void mlx5_mac_addr_remove (struct rte_eth_dev *,uint32_t ); -int mlx5_mac_addr_add (struct rte_eth_dev *,struct ether_addr *,uint32_t , -uint32_t ); -void mlx5_mac_addr_set (struct rte_eth_dev *,struct ether_addr *); +int priv_get_mac (struct priv *priv,uint8_t (*mac)[ETHER_ADDR_LEN ]); +void mlx5_mac_addr_remove (struct rte_eth_dev *dev,uint32_t index); +int mlx5_mac_addr_add (struct rte_eth_dev *dev,struct ether_addr *mac, +uint32_t index,uint32_t vmdq); +void mlx5_mac_addr_set (struct rte_eth_dev *dev,struct ether_addr *mac_addr);/* mlx5_rss.c */ -int mlx5_rss_hash_update (struct rte_eth_dev *,struct rte_eth_rss_conf *); -int mlx5_rss_hash_conf_get (struct rte_eth_dev *,struct rte_eth_rss_conf *); -int priv_rss_reta_index_resize (struct priv *,unsigned int ); -int mlx5_dev_rss_reta_query (struct rte_eth_dev *, -struct rte_eth_rss_reta_entry64 *,uint16_t ); -int mlx5_dev_rss_reta_update (struct rte_eth_dev *, -struct rte_eth_rss_reta_entry64 *,uint16_t ); +int mlx5_rss_hash_update (struct rte_eth_dev *dev, +struct rte_eth_rss_conf *rss_conf); +int mlx5_rss_hash_conf_get (struct rte_eth_dev *dev, +struct rte_eth_rss_conf *rss_conf); +int priv_rss_reta_index_resize (struct priv *priv,unsigned int reta_size); +int mlx5_dev_rss_reta_query (struct rte_eth_dev *dev, +struct rte_eth_rss_reta_entry64 *reta_conf, +uint16_t reta_size); +int mlx5_dev_rss_reta_update (struct rte_eth_dev *dev, +struct rte_eth_rss_reta_entry64 *reta_conf, +uint16_t reta_size);/* mlx5_rxmode.c */ -void mlx5_promiscuous_enable (struct rte_eth_dev *); -void mlx5_promiscuous_disable (struct rte_eth_dev *); -void mlx5_allmulticast_enable (struct rte_eth_dev *); -void mlx5_allmulticast_disable (struct rte_eth_dev *); +void mlx5_promiscuous_enable (struct rte_eth_dev *dev); +void mlx5_promiscuous_disable (struct rte_eth_dev *dev); +void mlx5_allmulticast_enable (struct rte_eth_dev *dev); +void mlx5_allmulticast_disable (struct rte_eth_dev *dev);/* mlx5_stats.c */ -void priv_xstats_init (struct priv *); -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 ); -void mlx5_xstats_reset (struct rte_eth_dev *); -int mlx5_xstats_get_names (struct rte_eth_dev *, -struct rte_eth_xstat_name *,unsigned int ); +void priv_xstats_init (struct priv *priv); +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_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_get_names (struct rte_eth_dev *dev, +struct rte_eth_xstat_name *xstats_names, +unsigned int n);/* mlx5_vlan.c */ -int mlx5_vlan_filter_set (struct rte_eth_dev *,uint16_t ,int ); -int mlx5_vlan_offload_set (struct rte_eth_dev *,int ); -void mlx5_vlan_strip_queue_set (struct rte_eth_dev *,uint16_t ,int ); +int mlx5_vlan_filter_set (struct rte_eth_dev *dev,uint16_t vlan_id,int on); +void mlx5_vlan_strip_queue_set (struct rte_eth_dev *dev,uint16_t queue,int on); +int mlx5_vlan_offload_set (struct rte_eth_dev *dev,int mask);/* mlx5_trigger.c */ -int mlx5_dev_start (struct rte_eth_dev *); -void mlx5_dev_stop (struct rte_eth_dev *); -int priv_dev_traffic_enable (struct priv *,struct rte_eth_dev *); -int priv_dev_traffic_disable (struct priv *,struct rte_eth_dev *); -int priv_dev_traffic_restart (struct priv *,struct rte_eth_dev *); -int mlx5_traffic_restart (struct rte_eth_dev *); +int mlx5_dev_start (struct rte_eth_dev *dev); +void mlx5_dev_stop (struct rte_eth_dev *dev); +int priv_dev_traffic_enable (struct priv *priv,struct rte_eth_dev *dev); +int priv_dev_traffic_disable (struct priv *priv,struct rte_eth_dev *dev); +int priv_dev_traffic_restart (struct priv *priv,struct rte_eth_dev *dev); +int mlx5_traffic_restart (struct rte_eth_dev *dev);/* mlx5_flow.c */ -int mlx5_dev_filter_ctrl (struct rte_eth_dev *,enum rte_filter_type , -enum rte_filter_op ,void *); -int mlx5_flow_validate (struct rte_eth_dev *,const struct rte_flow_attr *, -const struct rte_flow_item [], -const struct rte_flow_action [], -struct rte_flow_error *); -struct rte_flow *mlx5_flow_create (struct rte_eth_dev *, -const struct rte_flow_attr *, -const struct rte_flow_item [], -const struct rte_flow_action [], -struct rte_flow_error *); -int mlx5_flow_destroy (struct rte_eth_dev *,struct rte_flow *, -struct rte_flow_error *); -void priv_flow_flush (struct priv *,struct mlx5_flows *); -int mlx5_flow_flush (struct rte_eth_dev *,struct rte_flow_error *); -int mlx5_flow_query (struct rte_eth_dev *,struct rte_flow *, -enum rte_flow_action_type ,void *, -struct rte_flow_error *); -int mlx5_flow_isolate (struct rte_eth_dev *,int ,struct rte_flow_error *); -int priv_flow_start (struct priv *,struct mlx5_flows *); -void priv_flow_stop (struct priv *,struct mlx5_flows *); -int priv_flow_verify (struct priv *); -int mlx5_ctrl_flow_vlan (struct rte_eth_dev *,struct rte_flow_item_eth *, -struct rte_flow_item_eth *,struct rte_flow_item_vlan *, -struct rte_flow_item_vlan *); -int mlx5_ctrl_flow (struct rte_eth_dev *,struct rte_flow_item_eth *, -struct rte_flow_item_eth *); -int priv_flow_create_drop_queue (struct priv *); -void priv_flow_delete_drop_queue (struct priv *); +int mlx5_flow_validate (struct rte_eth_dev *dev, +const struct rte_flow_attr *attr, +const struct rte_flow_item items[], +const struct rte_flow_action actions[], +struct rte_flow_error *error); +void priv_flow_flush (struct priv *priv,struct mlx5_flows *list); +int priv_flow_create_drop_queue (struct priv *priv); +void priv_flow_stop (struct priv *priv,struct mlx5_flows *list); +int priv_flow_start (struct priv *priv,struct mlx5_flows *list); +int priv_flow_verify (struct priv *priv); +int priv_flow_create_drop_queue (struct priv *priv); +void priv_flow_delete_drop_queue (struct priv *priv); +int mlx5_ctrl_flow_vlan (struct rte_eth_dev *dev, +struct rte_flow_item_eth *eth_spec, +struct rte_flow_item_eth *eth_mask, +struct rte_flow_item_vlan *vlan_spec, +struct rte_flow_item_vlan *vlan_mask); +int mlx5_ctrl_flow (struct rte_eth_dev *dev, +struct rte_flow_item_eth *eth_spec, +struct rte_flow_item_eth *eth_mask); +struct rte_flow *mlx5_flow_create (struct rte_eth_dev *dev, +const struct rte_flow_attr *attr, +const struct rte_flow_item items[], +const struct rte_flow_action actions[], +struct rte_flow_error *error); +int mlx5_flow_destroy (struct rte_eth_dev *dev,struct rte_flow *flow, +struct rte_flow_error *error); +int mlx5_flow_flush (struct rte_eth_dev *dev,struct rte_flow_error *error); +int mlx5_flow_query (struct rte_eth_dev *dev,struct rte_flow *flow, +enum rte_flow_action_type action,void *data, +struct rte_flow_error *error); +int mlx5_flow_isolate (struct rte_eth_dev *dev,int enable, +struct rte_flow_error *error); +int mlx5_dev_filter_ctrl (struct rte_eth_dev *dev, +enum rte_filter_type filter_type, +enum rte_filter_op filter_op, +void *arg);/* mlx5_socket.c */
@@ -323,9 +342,9 @@ int priv_socket_connect(struct priv *priv);/* mlx5_mr.c */ -struct mlx5_mr *priv_mr_new (struct priv *,struct rte_mempool *); -struct mlx5_mr *priv_mr_get (struct priv *,struct rte_mempool *); -int priv_mr_release (struct priv *,struct mlx5_mr *); -int priv_mr_verify (struct priv *); +struct mlx5_mr *priv_mr_new (struct priv *priv,struct rte_mempool *mp); +struct mlx5_mr *priv_mr_get (struct priv *priv,struct rte_mempool *mp); +int priv_mr_release (struct priv *priv,struct mlx5_mr *mr); +int priv_mr_verify (struct priv *priv);#endif /* RTE_PMD_MLX5_H_ */
drivers/net/mlx5/mlx5_rxtx.h +90 -72
187 lines not on this page · raw message
Signature · 1 line
2.11.0
PATCH v3 3/10 net/mlx5: mark parameters with unused attribute
In reply to Nelio LaranjeiroReplaces all (void)foo; by __rte_unused macro except when variables are under #if statements.
--- drivers/net/mlx5/mlx5.c | 4 ++-- drivers/net/mlx5/mlx5_ethdev.c | 18 +++++---------- drivers/net/mlx5/mlx5_flow.c | 25 ++++++++------------ drivers/net/mlx5/mlx5_mac.c | 3 +-- drivers/net/mlx5/mlx5_mr.c | 10 +++----- drivers/net/mlx5/mlx5_rxq.c | 4 ++-- drivers/net/mlx5/mlx5_rxtx.c | 51 +++++++++++++++++------------------------ drivers/net/mlx5/mlx5_stats.c | 2 +- drivers/net/mlx5/mlx5_trigger.c | 4 ++-- drivers/net/mlx5/mlx5_txq.c | 19 +++++++-------- 10 files changed, 55 insertions(+), 85 deletions(-)
drivers/net/mlx5/mlx5.c +2 -2
@@ -571,7 +571,8 @@ priv_uar_init_secondary(struct priv *priv)* 0 on success, negative errno value on failure. */ static int -mlx5_pci_probe (struct rte_pci_driver *pci_drv,struct rte_pci_device *pci_dev) +mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, +struct rte_pci_device *pci_dev) {struct ibv_device **list;struct ibv_device *ibv_dev;
@@ -588,7 +589,6 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev)struct ibv_counter_set_description cs_desc;#endif - (void )pci_drv;assert (pci_drv == &mlx5_driver);/* Get mlx5_dev[] index. */ idx =mlx5_dev_idx (&pci_dev->addr);
drivers/net/mlx5/mlx5_ethdev.c +6 -12
@@ -467,11 +467,9 @@ mlx5_dev_supported_ptypes_get(struct rte_eth_dev *dev)* * @param dev * Pointer to Ethernet device structure. -* @param wait_to_complete -* Wait for request completion (ignored). */ static int -mlx5_link_update_unlocked_gset (struct rte_eth_dev *dev,int wait_to_complete) +mlx5_link_update_unlocked_gset (struct rte_eth_dev *dev) {struct priv *priv = dev->data->dev_private;struct ethtool_cmd edata = {
@@ -483,7 +481,6 @@ mlx5_link_update_unlocked_gset(struct rte_eth_dev *dev, int wait_to_complete)/* priv_lock() is not taken to allow concurrent calls. */ - (void )wait_to_complete;if (priv_ifreq (priv,SIOCGIFFLAGS , &ifr)) {WARN ("ioctl(SIOCGIFFLAGS) failed: %s" ,strerror (errno));return -1 ;
@@ -533,11 +530,9 @@ mlx5_link_update_unlocked_gset(struct rte_eth_dev *dev, int wait_to_complete)* * @param dev * Pointer to Ethernet device structure. -* @param wait_to_complete -* Wait for request completion (ignored). */ static int -mlx5_link_update_unlocked_gs (struct rte_eth_dev *dev,int wait_to_complete) +mlx5_link_update_unlocked_gs (struct rte_eth_dev *dev) {struct priv *priv = dev->data->dev_private;struct ethtool_link_settings gcmd = { .cmd =ETHTOOL_GLINKSETTINGS };
@@ -545,7 +540,6 @@ mlx5_link_update_unlocked_gs(struct rte_eth_dev *dev, int wait_to_complete)struct rte_eth_link dev_link;uint64_t sc; - (void )wait_to_complete;if (priv_ifreq (priv,SIOCGIFFLAGS , &ifr)) {WARN ("ioctl(SIOCGIFFLAGS) failed: %s" ,strerror (errno));return -1 ;
@@ -675,7 +669,7 @@ priv_link_stop(struct priv *priv)* Wait for request completion (ignored). */ int -priv_link_update (struct priv *priv,int wait_to_complete) +priv_link_update(struct priv *priv, int wait_to_complete __rte_unused) {struct rte_eth_dev *dev = priv->dev;struct utsname utsname;
@@ -687,9 +681,9 @@ priv_link_update(struct priv *priv, int wait_to_complete) sscanf(utsname.release, "%d.%d.%d", &ver[0], &ver[1], &ver[2]) != 3 || KERNEL_VERSION(ver[0], ver[1], ver[2]) < KERNEL_VERSION(4, 9, 0)) - ret =mlx5_link_update_unlocked_gset (dev, wait_to_complete); + ret =mlx5_link_update_unlocked_gset (dev); else - ret =mlx5_link_update_unlocked_gs (dev, wait_to_complete); + ret =mlx5_link_update_unlocked_gs (dev);/* If lsc interrupt is disabled, should always be ready for traffic. */ if (!dev->data->dev_conf.intr_conf.lsc) {priv_link_start (priv);
@@ -741,7 +735,7 @@ priv_force_link_status_change(struct priv *priv, int status)* Wait for request completion (ignored). */ int -mlx5_link_update (struct rte_eth_dev *dev,int wait_to_complete) +mlx5_link_update(struct rte_eth_dev *dev, int wait_to_complete __rte_unused) {struct priv *priv = dev->data->dev_private;int ret;
drivers/net/mlx5/mlx5_flow.c +9 -16
@@ -526,7 +526,7 @@ mlx5_flow_item_validate(const struct rte_flow_item *item,* 0 on success, errno value on failure. */ static int -priv_flow_convert_rss_conf (struct priv *priv, +priv_flow_convert_rss_conf(struct priv *priv __rte_unused,struct mlx5_flow_parse *parser,const struct rte_eth_rss_conf *rss_conf) {
@@ -535,7 +535,6 @@ priv_flow_convert_rss_conf(struct priv *priv,* priv_flow_convert_actions() to initialize the parser with the * device default RSS configuration. */ - (void )priv;if (rss_conf) {if (rss_conf->rss_hf &MLX5_RSS_HF_MASK )return EINVAL ;
@@ -568,13 +567,11 @@ priv_flow_convert_rss_conf(struct priv *priv,* 0 on success, a negative errno value otherwise and rte_errno is set. */ static int -priv_flow_convert_attributes (struct priv *priv, +priv_flow_convert_attributes(struct priv *priv __rte_unused,const struct rte_flow_attr *attr,struct rte_flow_error *error, -struct mlx5_flow_parse *parser) + struct mlx5_flow_parse *parser __rte_unused) { - (void )priv; - (void )parser;if (attr->group) { rte_flow_error_set(error, ENOTSUP, RTE_FLOW_ERROR_TYPE_ATTR_GROUP,
@@ -779,7 +776,7 @@ priv_flow_convert_actions(struct priv *priv,* 0 on success, a negative errno value otherwise and rte_errno is set. */ static int -priv_flow_convert_items_validate (struct priv *priv, +priv_flow_convert_items_validate(struct priv *priv __rte_unused,const struct rte_flow_item items[],struct rte_flow_error *error,struct mlx5_flow_parse *parser)
@@ -787,7 +784,6 @@ priv_flow_convert_items_validate(struct priv *priv,const struct mlx5_flow_items *cur_item = mlx5_flow_items;unsigned int i; - (void )priv;/* Initialise the offsets to start after verbs attribute. */ for (i =0 ; i != hash_rxq_init_n; ++i) parser->queue[i].offset =sizeof (struct ibv_flow_attr );
@@ -871,14 +867,13 @@ priv_flow_convert_items_validate(struct priv *priv,* A verbs flow attribute on success, NULL otherwise. */ static struct ibv_flow_attr * -priv_flow_convert_allocate (struct priv *priv, +priv_flow_convert_allocate(struct priv *priv __rte_unused,unsigned int priority,unsigned int size,struct rte_flow_error *error) {struct ibv_flow_attr *ibv_attr; - (void )priv; ibv_attr =rte_calloc (__func__,1 , size,0 );if (!ibv_attr) { rte_flow_error_set(error, ENOMEM,
@@ -900,7 +895,8 @@ priv_flow_convert_allocate(struct priv *priv,* Internal parser structure. */ static void -priv_flow_convert_finalise (struct priv *priv,struct mlx5_flow_parse *parser) +priv_flow_convert_finalise(struct priv *priv __rte_unused, +struct mlx5_flow_parse *parser) {const unsigned int ipv4 = hash_rxq_init[parser->layer].ip_version ==MLX5_IPV4 ;
@@ -911,7 +907,6 @@ priv_flow_convert_finalise(struct priv *priv, struct mlx5_flow_parse *parser)const enum hash_rxq_type ip = ipv4 ?HASH_RXQ_IPV4 :HASH_RXQ_IPV6 ;unsigned int i; - (void )priv;/* Remove any other flow not matching the pattern. */ if (parser->queues_n ==1 ) {for (i =0 ; i != hash_rxq_init_n; ++i) {
@@ -2424,11 +2419,10 @@ mlx5_ctrl_flow(struct rte_eth_dev *dev,int mlx5_flow_destroy (struct rte_eth_dev *dev,struct rte_flow *flow, -struct rte_flow_error *error) + struct rte_flow_error *error __rte_unused) {struct priv *priv = dev->data->dev_private; - (void )error;priv_lock (priv);priv_flow_destroy (priv, &priv->flows, flow);priv_unlock (priv);
@@ -2443,11 +2437,10 @@ mlx5_flow_destroy(struct rte_eth_dev *dev,*/ int mlx5_flow_flush (struct rte_eth_dev *dev, -struct rte_flow_error *error) + struct rte_flow_error *error __rte_unused) {struct priv *priv = dev->data->dev_private; - (void )error;priv_lock (priv);priv_flow_flush (priv, &priv->flows);priv_unlock (priv);
drivers/net/mlx5/mlx5_mac.c +1 -2
@@ -88,12 +88,11 @@ mlx5_mac_addr_remove(struct rte_eth_dev *dev, uint32_t index)*/ int mlx5_mac_addr_add (struct rte_eth_dev *dev,struct ether_addr *mac, -uint32_t index,uint32_t vmdq) + uint32_t index, uint32_t vmdq __rte_unused) {unsigned int i;int ret =0 ; - (void )vmdq;assert (index <MLX5_MAX_MAC_ADDRESSES );/* First, make sure this address isn't already configured. */ for (i =0 ; (i !=MLX5_MAX_MAC_ADDRESSES ); ++i) {
drivers/net/mlx5/mlx5_mr.c +3 -7
@@ -26,15 +26,12 @@ struct mlx5_check_mempool_data {/* Called by mlx5_check_mempool() when iterating the memory chunks. */ static void -mlx5_check_mempool_cb (struct rte_mempool *mp, +mlx5_check_mempool_cb(struct rte_mempool *mp __rte_unused,void *opaque,struct rte_mempool_memhdr *memhdr, -unsigned int mem_idx) + unsigned int mem_idx __rte_unused) {struct mlx5_check_mempool_data *data = opaque; - (void )mp; - (void )mem_idx; -/* It already failed, skip the next chunks. */ if (data->ret !=0 )return ;
@@ -336,9 +333,8 @@ priv_mr_get(struct priv *priv, struct rte_mempool *mp)* 0 on success, errno on failure. */ int -priv_mr_release (struct priv *priv,struct mlx5_mr *mr) +priv_mr_release(struct priv *priv __rte_unused, struct mlx5_mr *mr) { - (void )priv;assert (mr);DEBUG ("Memory Region %p refcnt: %d" , (void *)mr,rte_atomic32_read (&mr->refcnt));
drivers/net/mlx5/mlx5_rxq.c +2 -2
@@ -910,9 +910,9 @@ mlx5_priv_rxq_ibv_verify(struct priv *priv)* Verbs Rx queue object. */ int -mlx5_priv_rxq_ibv_releasable (struct priv *priv,struct mlx5_rxq_ibv *rxq_ibv) +mlx5_priv_rxq_ibv_releasable(struct priv *priv __rte_unused, +struct mlx5_rxq_ibv *rxq_ibv) { - (void )priv;assert (rxq_ibv);return (rte_atomic32_read (&rxq_ibv->refcnt) ==1 ); }
drivers/net/mlx5/mlx5_rxtx.c +21 -30
101 lines not on this page · raw message
drivers/net/mlx5/mlx5_stats.c +1 -1
@@ -488,7 +488,7 @@ mlx5_xstats_reset(struct rte_eth_dev *dev)* Number of xstats names. */ int -mlx5_xstats_get_names (struct rte_eth_dev *dev, +mlx5_xstats_get_names(struct rte_eth_dev *dev __rte_unused,struct rte_eth_xstat_name *xstats_names,unsigned int n) {struct priv *priv = dev->data->dev_private;
drivers/net/mlx5/mlx5_trigger.c +2 -2
@@ -340,9 +340,9 @@ priv_dev_traffic_enable(struct priv *priv, struct rte_eth_dev *dev)* 0 on success. */ int -priv_dev_traffic_disable (struct priv *priv,struct rte_eth_dev *dev) +priv_dev_traffic_disable (struct priv *priv, + struct rte_eth_dev *dev __rte_unused) { - (void )dev;priv_flow_flush (priv, &priv->ctrl_flows);return 0 ; }
drivers/net/mlx5/mlx5_txq.c +8 -11
@@ -578,9 +578,9 @@ mlx5_priv_txq_ibv_get(struct priv *priv, uint16_t idx)* 0 on success, errno on failure. */ int -mlx5_priv_txq_ibv_release (struct priv *priv,struct mlx5_txq_ibv *txq_ibv) +mlx5_priv_txq_ibv_release(struct priv *priv __rte_unused, +struct mlx5_txq_ibv *txq_ibv) { - (void )priv;assert (txq_ibv);DEBUG ("%p: Verbs Tx queue %p: refcnt %d" , (void *)priv, (void *)txq_ibv,rte_atomic32_read (&txq_ibv->refcnt));
@@ -603,9 +603,9 @@ mlx5_priv_txq_ibv_release(struct priv *priv, struct mlx5_txq_ibv *txq_ibv)* Verbs Tx queue object. */ int -mlx5_priv_txq_ibv_releasable (struct priv *priv,struct mlx5_txq_ibv *txq_ibv) +mlx5_priv_txq_ibv_releasable(struct priv *priv __rte_unused, +struct mlx5_txq_ibv *txq_ibv) { - (void )priv;assert (txq_ibv);return (rte_atomic32_read (&txq_ibv->refcnt) ==1 ); }
@@ -806,13 +806,10 @@ mlx5_priv_txq_get(struct priv *priv, uint16_t idx)mlx5_priv_txq_ibv_get (priv, idx);for (i =0 ; i !=MLX5_PMD_TX_MP_CACHE ; ++i) { -struct mlx5_mr *mr =NULL ; - - (void )mr; -if (ctrl->txq.mp2mr[i]) { - mr =priv_mr_get (priv, ctrl->txq.mp2mr[i]->mp); -assert (mr); - } +if (ctrl->txq.mp2mr[i]) +claim_nonzero + (priv_mr_get (priv, + ctrl->txq.mp2mr[i]->mp)); }rte_atomic32_inc (&ctrl->refcnt); DEBUG("%p: Tx queue %p: refcnt %d", (void *)priv,
Signature · 1 line
2.11.0
PATCH v3 4/10 net/mlx5: normalize function prototypes
In reply to Nelio Laranjeiro--- drivers/net/mlx5/mlx5_flow.c | 2 +- drivers/net/mlx5/mlx5_mr.c | 11 ++++++----- drivers/net/mlx5/mlx5_rxq.c | 16 ++++++++-------- drivers/net/mlx5/mlx5_txq.c | 8 ++++---- 4 files changed, 19 insertions(+), 18 deletions(-)
drivers/net/mlx5/mlx5_flow.c +1 -1
@@ -866,7 +866,7 @@ priv_flow_convert_items_validate(struct priv *priv __rte_unused,* @return * A verbs flow attribute on success, NULL otherwise. */ -static struct ibv_flow_attr * +static struct ibv_flow_attr * priv_flow_convert_allocate(struct priv *priv __rte_unused, unsigned int priority, unsigned int size,
drivers/net/mlx5/mlx5_mr.c +6 -5
@@ -66,8 +66,9 @@ mlx5_check_mempool_cb(struct rte_mempool *mp __rte_unused,* @return * 0 on success (mempool is virtually contiguous), -1 on error. */ -static int mlx5_check_mempool (struct rte_mempool *mp,uintptr_t *start, -uintptr_t *end) +static int +mlx5_check_mempool (struct rte_mempool *mp,uintptr_t *start, +uintptr_t *end) {struct mlx5_check_mempool_data data;
@@ -97,7 +98,7 @@ static int mlx5_check_mempool(struct rte_mempool *mp, uintptr_t *start,* @return * mr on success, NULL on failure. */ -struct mlx5_mr * +struct mlx5_mr *priv_txq_mp2mr_reg (struct priv *priv,struct mlx5_txq_data *txq,struct rte_mempool *mp,unsigned int idx) {
@@ -244,7 +245,7 @@ mlx5_mp2mr_iter(struct rte_mempool *mp, void *arg)* @return * The memory region on success. */ -struct mlx5_mr * +struct mlx5_mr *priv_mr_new (struct priv *priv,struct rte_mempool *mp) {const struct rte_memseg *ms =rte_eal_get_physmem_layout ();
@@ -304,7 +305,7 @@ priv_mr_new(struct priv *priv, struct rte_mempool *mp)* @return * The memory region on success. */ -struct mlx5_mr * +struct mlx5_mr *priv_mr_get (struct priv *priv,struct rte_mempool *mp) {struct mlx5_mr *mr;
drivers/net/mlx5/mlx5_rxq.c +8 -8
@@ -601,7 +601,7 @@ mlx5_rx_intr_disable(struct rte_eth_dev *dev, uint16_t rx_queue_id)* @return * The Verbs object initialised if it can be created. */ -struct mlx5_rxq_ibv * +struct mlx5_rxq_ibv *mlx5_priv_rxq_ibv_new (struct priv *priv,uint16_t idx) {struct mlx5_rxq_data *rxq_data = (*priv->rxqs)[idx];
@@ -819,7 +819,7 @@ mlx5_priv_rxq_ibv_new(struct priv *priv, uint16_t idx)* @return * The Verbs object if it exists. */ -struct mlx5_rxq_ibv * +struct mlx5_rxq_ibv *mlx5_priv_rxq_ibv_get (struct priv *priv,uint16_t idx) {struct mlx5_rxq_data *rxq_data = (*priv->rxqs)[idx];
@@ -932,7 +932,7 @@ mlx5_priv_rxq_ibv_releasable(struct priv *priv __rte_unused,* @return * A DPDK queue object on success. */ -struct mlx5_rxq_ctrl * +struct mlx5_rxq_ctrl *mlx5_priv_rxq_new (struct priv *priv,uint16_t idx,uint16_t desc,unsigned int socket,const struct rte_eth_rxconf *conf,struct rte_mempool *mp)
@@ -1057,7 +1057,7 @@ mlx5_priv_rxq_new(struct priv *priv, uint16_t idx, uint16_t desc,* @return * A pointer to the queue if it exists. */ -struct mlx5_rxq_ctrl * +struct mlx5_rxq_ctrl *mlx5_priv_rxq_get (struct priv *priv,uint16_t idx) {struct mlx5_rxq_ctrl *rxq_ctrl =NULL ;
@@ -1170,7 +1170,7 @@ mlx5_priv_rxq_verify(struct priv *priv)* @return * A new indirection table. */ -struct mlx5_ind_table_ibv * +struct mlx5_ind_table_ibv *mlx5_priv_ind_table_ibv_new (struct priv *priv,uint16_t queues[],uint16_t queues_n) {
@@ -1232,7 +1232,7 @@ mlx5_priv_ind_table_ibv_new(struct priv *priv, uint16_t queues[],* @return * An indirection table if found. */ -struct mlx5_ind_table_ibv * +struct mlx5_ind_table_ibv *mlx5_priv_ind_table_ibv_get (struct priv *priv,uint16_t queues[],uint16_t queues_n) {
@@ -1331,7 +1331,7 @@ mlx5_priv_ind_table_ibv_verify(struct priv *priv)* @return * An hash Rx queue on success. */ -struct mlx5_hrxq * +struct mlx5_hrxq *mlx5_priv_hrxq_new (struct priv *priv,uint8_t *rss_key,uint8_t rss_key_len,uint64_t hash_fields,uint16_t queues[],uint16_t queues_n) {
@@ -1400,7 +1400,7 @@ mlx5_priv_hrxq_new(struct priv *priv, uint8_t *rss_key, uint8_t rss_key_len,* @return * An hash Rx queue on success. */ -struct mlx5_hrxq * +struct mlx5_hrxq *mlx5_priv_hrxq_get (struct priv *priv,uint8_t *rss_key,uint8_t rss_key_len,uint64_t hash_fields,uint16_t queues[],uint16_t queues_n) {
drivers/net/mlx5/mlx5_txq.c +4 -4
@@ -369,7 +369,7 @@ is_empw_burst_func(eth_tx_burst_t tx_pkt_burst)* @return * The Verbs object initialised if it can be created. */ -struct mlx5_txq_ibv * +struct mlx5_txq_ibv *mlx5_priv_txq_ibv_new (struct priv *priv,uint16_t idx) {struct mlx5_txq_data *txq_data = (*priv->txqs)[idx];
@@ -547,7 +547,7 @@ mlx5_priv_txq_ibv_new(struct priv *priv, uint16_t idx)* @return * The Verbs object if it exists. */ -struct mlx5_txq_ibv * +struct mlx5_txq_ibv *mlx5_priv_txq_ibv_get (struct priv *priv,uint16_t idx) {struct mlx5_txq_ctrl *txq_ctrl;
@@ -749,7 +749,7 @@ txq_set_params(struct mlx5_txq_ctrl *txq_ctrl)* @return * A DPDK queue object on success. */ -struct mlx5_txq_ctrl * +struct mlx5_txq_ctrl *mlx5_priv_txq_new (struct priv *priv,uint16_t idx,uint16_t desc,unsigned int socket,const struct rte_eth_txconf *conf)
@@ -794,7 +794,7 @@ mlx5_priv_txq_new(struct priv *priv, uint16_t idx, uint16_t desc,* @return * A pointer to the queue if it exists. */ -struct mlx5_txq_ctrl * +struct mlx5_txq_ctrl *mlx5_priv_txq_get (struct priv *priv,uint16_t idx) {struct mlx5_txq_ctrl *ctrl =NULL ;
Signature · 1 line
2.11.0
PATCH v3 5/10 net/mlx5: add missing function documentation
In reply to Nelio Laranjeiro--- drivers/net/mlx5/mlx5_ethdev.c | 18 ++++++++++++++++++ drivers/net/mlx5/mlx5_mr.c | 7 +++++-- drivers/net/mlx5/mlx5_rxq.c | 20 ++++++++++++-------- drivers/net/mlx5/mlx5_trigger.c | 30 ++++++++++++++++++++++++++++++ drivers/net/mlx5/mlx5_txq.c | 10 ++++++---- 5 files changed, 71 insertions(+), 14 deletions(-)
drivers/net/mlx5/mlx5_ethdev.c +18 -0
@@ -435,6 +435,15 @@ mlx5_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *info)priv_unlock (priv); } +/** +* Get supported packet types. +* +* @param dev +* Pointer to Ethernet device structure. +* +* @return +* A pointer to the supported Packet types array. +*/ const uint32_t *mlx5_dev_supported_ptypes_get (struct rte_eth_dev *dev) {
@@ -467,6 +476,9 @@ mlx5_dev_supported_ptypes_get(struct rte_eth_dev *dev)* * @param dev * Pointer to Ethernet device structure. +* +* @return +* 0 on success, -1 on error. */ static int mlx5_link_update_unlocked_gset (struct rte_eth_dev *dev)
@@ -530,6 +542,9 @@ mlx5_link_update_unlocked_gset(struct rte_eth_dev *dev)* * @param dev * Pointer to Ethernet device structure. +* +* @return +* 0 on success, -1 on error. */ static int mlx5_link_update_unlocked_gs (struct rte_eth_dev *dev)
@@ -733,6 +748,9 @@ priv_force_link_status_change(struct priv *priv, int status)* Pointer to Ethernet device structure. * @param wait_to_complete * Wait for request completion (ignored). +* +* @return +* 0 on success, -1 on error. */ int mlx5_link_update(struct rte_eth_dev *dev, int wait_to_complete __rte_unused)
drivers/net/mlx5/mlx5_mr.c +5 -2
@@ -242,6 +242,7 @@ mlx5_mp2mr_iter(struct rte_mempool *mp, void *arg)* Pointer to private structure. * @param mp * Pointer to the memory pool to register. +* * @return * The memory region on success. */
@@ -302,6 +303,7 @@ priv_mr_new(struct priv *priv, struct rte_mempool *mp)* Pointer to private structure. * @param mp * Pointer to the memory pool to register. +* * @return * The memory region on success. */
@@ -352,9 +354,10 @@ priv_mr_release(struct priv *priv __rte_unused, struct mlx5_mr *mr)* Verify the flow list is empty * * @param priv -* Pointer to private structure. +* Pointer to private structure. * -* @return the number of object not released. +* @return +* The number of object not released. */ int priv_mr_verify (struct priv *priv)
drivers/net/mlx5/mlx5_rxq.c +12 -8
@@ -883,9 +883,10 @@ mlx5_priv_rxq_ibv_release(struct priv *priv, struct mlx5_rxq_ibv *rxq_ibv)* Verify the Verbs Rx queue list is empty * * @param priv -* Pointer to private structure. +* Pointer to private structure. * -* @return the number of object not released. +* @return +* The number of object not released. */ int mlx5_priv_rxq_ibv_verify (struct priv *priv)
@@ -1139,9 +1140,10 @@ mlx5_priv_rxq_releasable(struct priv *priv, uint16_t idx)* Verify the Rx Queue list is empty * * @param priv -* Pointer to private structure. +* Pointer to private structure. * -* @return the number of object not released. +* @return +* The number of object not released. */ int mlx5_priv_rxq_verify (struct priv *priv)
@@ -1293,9 +1295,10 @@ mlx5_priv_ind_table_ibv_release(struct priv *priv,* Verify the Rx Queue list is empty * * @param priv -* Pointer to private structure. +* Pointer to private structure. * -* @return the number of object not released. +* @return +* The number of object not released. */ int mlx5_priv_ind_table_ibv_verify (struct priv *priv)
@@ -1462,9 +1465,10 @@ mlx5_priv_hrxq_release(struct priv *priv, struct mlx5_hrxq *hrxq)* Verify the Rx Queue list is empty * * @param priv -* Pointer to private structure. +* Pointer to private structure. * -* @return the number of object not released. +* @return +* The number of object not released. */ int mlx5_priv_hrxq_ibv_verify (struct priv *priv)
drivers/net/mlx5/mlx5_trigger.c +30 -0
@@ -14,6 +14,12 @@#include "mlx5_rxtx.h" #include "mlx5_utils.h" +/** +* Stop traffic on Tx queues. +* +* @param dev +* Pointer to Ethernet device structure. +*/ static void priv_txq_stop (struct priv *priv) {
@@ -23,6 +29,15 @@ priv_txq_stop(struct priv *priv)mlx5_priv_txq_release (priv, i); } +/** +* Start traffic on Tx queues. +* +* @param dev +* Pointer to Ethernet device structure. +* +* @return +* 0 on success, errno on error. +*/ static int priv_txq_start (struct priv *priv) {
@@ -58,6 +73,12 @@ priv_txq_start(struct priv *priv)return ret; } +/** +* Stop traffic on Rx queues. +* +* @param dev +* Pointer to Ethernet device structure. +*/ static void priv_rxq_stop (struct priv *priv) {
@@ -67,6 +88,15 @@ priv_rxq_stop(struct priv *priv)mlx5_priv_rxq_release (priv, i); } +/** +* Start traffic on Rx queues. +* +* @param dev +* Pointer to Ethernet device structure. +* +* @return +* 0 on success, errno on error. +*/ static int priv_rxq_start (struct priv *priv) {
drivers/net/mlx5/mlx5_txq.c +6 -4
@@ -614,9 +614,10 @@ mlx5_priv_txq_ibv_releasable(struct priv *priv __rte_unused,* Verify the Verbs Tx queue list is empty * * @param priv -* Pointer to private structure. +* Pointer to private structure. * -* @return the number of object not released. +* @return +* The number of object not released. */ int mlx5_priv_txq_ibv_verify (struct priv *priv)
@@ -893,9 +894,10 @@ mlx5_priv_txq_releasable(struct priv *priv, uint16_t idx)* Verify the Tx Queue list is empty * * @param priv -* Pointer to private structure. +* Pointer to private structure. * -* @return the number of object not released. +* @return +* The number of object not released. */ int mlx5_priv_txq_verify (struct priv *priv)
Signature · 1 line
2.11.0
PATCH v3 6/10 net/mlx5: remove useless empty lines
In reply to Nelio LaranjeiroSome empty lines have been added in the middle of the code without any reason. This commit removes them.
--- drivers/net/mlx5/mlx5.c | 22 ---------------------- drivers/net/mlx5/mlx5_ethdev.c | 7 ------- drivers/net/mlx5/mlx5_mr.c | 1 - drivers/net/mlx5/mlx5_rss.c | 2 -- drivers/net/mlx5/mlx5_rxq.c | 1 - drivers/net/mlx5/mlx5_vlan.c | 6 ------ 6 files changed, 39 deletions(-)
drivers/net/mlx5/mlx5.c +0 -22
@@ -597,7 +597,6 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,return -ENOMEM ; }DEBUG ("using driver device index %d" , idx); -/* Save PCI address. */ mlx5_dev[idx].pci_addr = pci_dev->addr; list = mlx5_glue->get_device_list (&i);
@@ -644,7 +643,6 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,return -err; } ibv_dev = list[i]; -DEBUG ("device opened" );/* * Multi-packet send is supported by ConnectX-4 Lx PF as well
@@ -685,7 +683,6 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,if (mlx5_glue->query_device_ex (attr_ctx,NULL , &device_attr)) goto error;INFO ("%u port(s) detected" , device_attr.orig_attr.phys_port_cnt); -for (i =0 ; i < device_attr.orig_attr.phys_port_cnt; i++) {char name[RTE_ETH_NAME_MAX_LEN ];int len;
@@ -716,9 +713,7 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, pci_dev->addr.devid, pci_dev->addr.function);if (device_attr.orig_attr.phys_port_cnt >1 )snprintf (name + len,sizeof (name)," port %u" , i); - mlx5_dev[idx].ports |= test; -if (rte_eal_process_type () ==RTE_PROC_SECONDARY ) { eth_dev =rte_eth_dev_attach_secondary (name);if (eth_dev ==NULL ) {
@@ -755,15 +750,12 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,priv_select_tx_function (priv, eth_dev);continue ; } -DEBUG ("using port %u (%08" PRIx32")" , port, test); - ctx = mlx5_glue->open_device (ibv_dev);if (ctx ==NULL ) { err =ENODEV ; goto port_error; } - mlx5_glue->query_device_ex (ctx,NULL , &device_attr);/* Check port status. */ err = mlx5_glue->query_port (ctx, port, &port_attr);
@@ -771,19 +763,16 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,ERROR ("port query failed: %s" ,strerror (err)); goto port_error; } -if (port_attr.link_layer !=IBV_LINK_LAYER_ETHERNET ) {ERROR ("port %d is not configured in Ethernet mode" , port); err =EINVAL ; goto port_error; } -if (port_attr.state !=IBV_PORT_ACTIVE )DEBUG ("port %d is not active: \"%s\" (%d)" , port, mlx5_glue->port_state_str (port_attr.state), port_attr.state); -/* Allocate protection domain. */ pd = mlx5_glue->alloc_pd (ctx);if (pd ==NULL ) {
@@ -791,9 +780,7 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, err =ENOMEM ; goto port_error; } - mlx5_dev[idx].ports |= test; -/* from rte_ethdev.c */ priv = rte_zmalloc("ethdev private structure", sizeof(*priv),
@@ -803,7 +790,6 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, err =ENOMEM ; goto port_error; } - priv->ctx = ctx;strncpy (priv->ibdev_path, priv->ctx->device->ibdev_path,sizeof (priv->ibdev_path));
@@ -821,7 +807,6 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,ERROR ("ibv_query_device_ex() failed" ); goto port_error; } - config.hw_csum = !!(device_attr_ex.device_cap_flags_ex &IBV_DEVICE_RAW_IP_CSUM ); DEBUG("checksum offloading is %ssupported",
@@ -857,7 +842,6 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,#endif DEBUG ("hardware RX end alignment padding is %ssupported" , (config.hw_padding ?"" :"not " )); - config.tso = ((device_attr_ex.tso_caps.max_tso >0 ) && (device_attr_ex.tso_caps.supported_qpts & (1 <<IBV_QPT_RAW_PACKET )));
@@ -906,7 +890,6 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,/* Get actual MTU if possible. */ priv_get_mtu (priv, &priv->mtu);DEBUG ("port %u MTU is %u" , priv->port, priv->mtu); - eth_dev =rte_eth_dev_allocate (name);if (eth_dev ==NULL ) {ERROR ("can not allocate rte ethdev" );
@@ -929,7 +912,6 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,claim_zero (mlx5_mac_addr_add (eth_dev, &mac,0 ,0 ));TAILQ_INIT (&priv->flows);TAILQ_INIT (&priv->ctrl_flows); -/* Hint libmlx5 to use PMD allocator for data plane resources */ struct mlx5dv_ctx_allocators alctr = { .alloc = &mlx5_alloc_verbs_buf,
@@ -946,7 +928,6 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,/* Store device configuration on private structure. */ priv->config = config;continue ; - port_error:if (priv)rte_free (priv);
@@ -956,20 +937,17 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,claim_zero (mlx5_glue->close_device (ctx));break ; } -/* * XXX if something went wrong in the loop above, there is a resource * leak (ctx, pd, priv, dpdk ethdev) but we can do nothing about it as * long as the dpdk does not provide a way to deallocate a ethdev and a * way to enumerate the registered ethdevs to free the previous ones. */ -/* no port found, complain */ if (!mlx5_dev[idx].ports) { err =ENODEV ; goto error; } - error:if (attr_ctx)claim_zero (mlx5_glue->close_device (attr_ctx));
drivers/net/mlx5/mlx5_ethdev.c +0 -7
@@ -403,7 +403,6 @@ mlx5_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *info)char ifname[IF_NAMESIZE ]; info->pci_dev =RTE_ETH_DEV_TO_PCI (dev); -priv_lock (priv);/* FIXME: we should ask the device for these values. */ info->min_rx_bufsize =32 ;
@@ -492,7 +491,6 @@ mlx5_link_update_unlocked_gset(struct rte_eth_dev *dev)int link_speed =0 ;/* priv_lock() is not taken to allow concurrent calls. */ -if (priv_ifreq (priv,SIOCGIFFLAGS , &ifr)) {WARN ("ioctl(SIOCGIFFLAGS) failed: %s" ,strerror (errno));return -1 ;
@@ -838,7 +836,6 @@ mlx5_dev_get_flow_ctrl(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf) strerror(ret)); goto out; } - fc_conf->autoneg = ethpause.autoneg;if (ethpause.rx_pause && ethpause.tx_pause) fc_conf->mode =RTE_FC_FULL ;
@@ -849,7 +846,6 @@ mlx5_dev_get_flow_ctrl(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf)else fc_conf->mode =RTE_FC_NONE ; ret =0 ; - out:priv_unlock (priv);assert (ret >=0 );
@@ -890,7 +886,6 @@ mlx5_dev_set_flow_ctrl(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf) ethpause.tx_pause =1 ; else ethpause.tx_pause = 0; -priv_lock (priv);if (priv_ifreq (priv,SIOCETHTOOL , &ifr)) { ret = errno;
@@ -900,7 +895,6 @@ mlx5_dev_set_flow_ctrl(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf) goto out; } ret =0 ; - out:priv_unlock (priv);assert (ret >=0 );
@@ -1155,7 +1149,6 @@ priv_dev_interrupt_handler_install(struct priv *priv, struct rte_eth_dev *dev)rte_intr_callback_register (&priv->intr_handle, mlx5_dev_interrupt_handler, dev); } - rc =priv_socket_init (priv);if (!rc && priv->primary_socket) { priv->intr_handle_socket.fd = priv->primary_socket;
drivers/net/mlx5/mlx5_mr.c +0 -1
@@ -76,7 +76,6 @@ mlx5_check_mempool(struct rte_mempool *mp, uintptr_t *start,rte_mempool_mem_iter (mp, mlx5_check_mempool_cb, &data); *start = (uintptr_t )data.start; *end = (uintptr_t )data.end; -return data.ret; }
drivers/net/mlx5/mlx5_rss.c +0 -2
@@ -123,7 +123,6 @@ priv_rss_reta_index_resize(struct priv *priv, unsigned int reta_size)return ENOMEM ; priv->reta_idx = mem; priv->reta_idx_n = reta_size; -if (old_size < reta_size) memset(&(*priv->reta_idx)[old_size], 0, (reta_size - old_size) *
@@ -191,7 +190,6 @@ priv_dev_rss_reta_update(struct priv *priv, ret =priv_rss_reta_index_resize (priv, reta_size);if (ret)return ret; -for (idx =0 , i =0 ; (i != reta_size); ++i) { idx = i /RTE_RETA_GROUP_SIZE ; pos = i %RTE_RETA_GROUP_SIZE ;
drivers/net/mlx5/mlx5_rxq.c +0 -1
@@ -1067,7 +1067,6 @@ mlx5_priv_rxq_get(struct priv *priv, uint16_t idx) rxq_ctrl =container_of ((*priv->rxqs)[idx], struct mlx5_rxq_ctrl, rxq); -mlx5_priv_rxq_ibv_get (priv, idx);rte_atomic32_inc (&rxq_ctrl->refcnt); DEBUG("%p: Rx queue %p: refcnt %d", (void *)priv,
drivers/net/mlx5/mlx5_vlan.c +0 -6
@@ -120,14 +120,12 @@ priv_vlan_strip_queue_set(struct priv *priv, uint16_t idx, int on) .flags_mask = IBV_WQ_FLAGS_CVLAN_STRIPPING, .flags = vlan_offloads, }; - err = mlx5_glue->modify_wq (rxq_ctrl->ibv->wq, &mod);if (err) {ERROR ("%p: failed to modified stripping mode: %s" , (void *)priv,strerror (err));return ; } -/* Update related bits in RX queue. */ rxq->vlan_strip = !!on; }
@@ -152,13 +150,11 @@ mlx5_vlan_strip_queue_set(struct rte_eth_dev *dev, uint16_t queue, int on)ERROR ("VLAN stripping is not supported" );return ; } -/* Validate queue number */ if (queue >= priv->rxqs_n) {ERROR ("VLAN stripping, invalid queue number %d" , queue);return ; } -priv_lock (priv);priv_vlan_strip_queue_set (priv, queue, on);priv_unlock (priv);
@@ -186,13 +182,11 @@ mlx5_vlan_offload_set(struct rte_eth_dev *dev, int mask)ERROR ("VLAN stripping is not supported" );return 0 ; } -/* Run on every RX queue and set/reset VLAN stripping. */ priv_lock (priv);for (i =0 ; (i != priv->rxqs_n); i++)priv_vlan_strip_queue_set (priv, i, hw_vlan_strip);priv_unlock (priv); } -return 0 ; }
Signature · 1 line
2.11.0
PATCH v3 7/10 net/mlx5: remove control path locks
In reply to Nelio LaranjeiroIn priv struct only the memory region needs to be protected against concurrent access between the control plane and the data plane.
--- drivers/net/mlx5/mlx5.c | 2 -- drivers/net/mlx5/mlx5.h | 43 +----------------------------- drivers/net/mlx5/mlx5_ethdev.c | 58 +++-------------------------------------- drivers/net/mlx5/mlx5_flow.c | 18 +------------ drivers/net/mlx5/mlx5_mr.c | 4 +-- drivers/net/mlx5/mlx5_rss.c | 8 ------ drivers/net/mlx5/mlx5_rxq.c | 9 ------- drivers/net/mlx5/mlx5_stats.c | 15 +---------- drivers/net/mlx5/mlx5_trigger.c | 7 ----- drivers/net/mlx5/mlx5_txq.c | 5 ---- drivers/net/mlx5/mlx5_vlan.c | 6 ----- 11 files changed, 9 insertions(+), 166 deletions(-)
drivers/net/mlx5/mlx5.c +0 -2
@@ -165,7 +165,6 @@ mlx5_dev_close(struct rte_eth_dev *dev)unsigned int i;int ret; -priv_lock (priv);DEBUG ("%p: closing device \"%s\"" , (void *)dev, ((priv->ctx !=NULL ) ? priv->ctx->device->name :"" ));
@@ -227,7 +226,6 @@ mlx5_dev_close(struct rte_eth_dev *dev) ret =priv_mr_verify (priv);if (ret)WARN ("%p: some Memory Region still remain" , (void *)priv); -priv_unlock (priv);memset (priv,0 ,sizeof (*priv)); }
drivers/net/mlx5/mlx5.h +1 -42
55 lines not on this page · raw message
drivers/net/mlx5/mlx5_ethdev.c +4 -54
179 lines not on this page · raw message
drivers/net/mlx5/mlx5_flow.c +1 -17
@@ -1911,9 +1911,7 @@ mlx5_flow_validate(struct rte_eth_dev *dev,int ret;struct mlx5_flow_parse parser = { .create =0 , }; -priv_lock (priv); ret =priv_flow_convert (priv, attr, items, actions, error, &parser); -priv_unlock (priv);return ret; }
@@ -1933,10 +1931,8 @@ mlx5_flow_create(struct rte_eth_dev *dev,struct priv *priv = dev->data->dev_private;struct rte_flow *flow; -priv_lock (priv); flow =priv_flow_create (priv, &priv->flows, attr, items, actions, error); -priv_unlock (priv);return flow; }
@@ -2423,9 +2419,7 @@ mlx5_flow_destroy(struct rte_eth_dev *dev, {struct priv *priv = dev->data->dev_private; -priv_lock (priv);priv_flow_destroy (priv, &priv->flows, flow); -priv_unlock (priv);return 0 ; }
@@ -2441,9 +2435,7 @@ mlx5_flow_flush(struct rte_eth_dev *dev, {struct priv *priv = dev->data->dev_private; -priv_lock (priv);priv_flow_flush (priv, &priv->flows); -priv_unlock (priv);return 0 ; }
@@ -2501,16 +2493,14 @@ priv_flow_query_count(struct ibv_counter_set *cs,* @see rte_flow_ops */ int -mlx5_flow_query (struct rte_eth_dev *dev, +mlx5_flow_query(struct rte_eth_dev *dev __rte_unused,struct rte_flow *flow, enum rte_flow_action_type action __rte_unused,void *data,struct rte_flow_error *error) { -struct priv *priv = dev->data->dev_private;int res =EINVAL ; -priv_lock (priv);if (flow->cs) { res = priv_flow_query_count(flow->cs, &flow->counter_stats,
@@ -2522,7 +2512,6 @@ mlx5_flow_query(struct rte_eth_dev *dev,NULL , "no counter found for flow"); } -priv_unlock (priv);return -res; }#endif
@@ -2540,13 +2529,11 @@ mlx5_flow_isolate(struct rte_eth_dev *dev, {struct priv *priv = dev->data->dev_private; -priv_lock (priv);if (dev->data->dev_started) {rte_flow_error_set (error,EBUSY ,RTE_FLOW_ERROR_TYPE_UNSPECIFIED ,NULL ,"port must be stopped first" ); -priv_unlock (priv);return -rte_errno; } priv->isolated = !!enable;
@@ -2554,7 +2541,6 @@ mlx5_flow_isolate(struct rte_eth_dev *dev, priv->dev->dev_ops = &mlx5_dev_ops_isolate; else priv->dev->dev_ops = &mlx5_dev_ops; -priv_unlock (priv);return 0 ; }
@@ -3036,9 +3022,7 @@ mlx5_dev_filter_ctrl(struct rte_eth_dev *dev, *(const void **)arg = &mlx5_flow_ops;return 0 ;case RTE_ETH_FILTER_FDIR : -priv_lock (priv); ret =priv_fdir_ctrl_func (priv, filter_op, arg); -priv_unlock (priv);break ;default : ERROR("%p: filter type (%d) not supported",
drivers/net/mlx5/mlx5_mr.c +2 -2
@@ -164,9 +164,9 @@ mlx5_txq_mp2mr_reg(struct mlx5_txq_data *txq, struct rte_mempool *mp, container_of(txq, struct mlx5_txq_ctrl, txq);struct mlx5_mr *mr; -priv_lock (txq_ctrl->priv); +rte_spinlock_lock (&txq_ctrl->priv->mr_lock); mr =priv_txq_mp2mr_reg (txq_ctrl->priv, txq, mp, idx); -priv_unlock (txq_ctrl->priv); +rte_spinlock_unlock (&txq_ctrl->priv->mr_lock);return mr; }
drivers/net/mlx5/mlx5_rss.c +0 -8
@@ -44,7 +44,6 @@ mlx5_rss_hash_update(struct rte_eth_dev *dev,struct priv *priv = dev->data->dev_private;int ret =0 ; -priv_lock (priv);if (rss_conf->rss_hf &MLX5_RSS_HF_MASK ) { ret = -EINVAL ; goto out;
@@ -62,7 +61,6 @@ mlx5_rss_hash_update(struct rte_eth_dev *dev, } priv->rss_conf.rss_hf = rss_conf->rss_hf; out: -priv_unlock (priv);return ret; }
@@ -85,7 +83,6 @@ mlx5_rss_hash_conf_get(struct rte_eth_dev *dev,if (!rss_conf)return -EINVAL ; -priv_lock (priv);if (rss_conf->rss_key && (rss_conf->rss_key_len >= priv->rss_conf.rss_key_len)) { memcpy(rss_conf->rss_key, priv->rss_conf.rss_key,
@@ -93,7 +90,6 @@ mlx5_rss_hash_conf_get(struct rte_eth_dev *dev, } rss_conf->rss_key_len = priv->rss_conf.rss_key_len; rss_conf->rss_hf = priv->rss_conf.rss_hf; -priv_unlock (priv);return 0 ; }
@@ -222,9 +218,7 @@ mlx5_dev_rss_reta_query(struct rte_eth_dev *dev,int ret;struct priv *priv = dev->data->dev_private; -priv_lock (priv); ret =priv_dev_rss_reta_query (priv, reta_conf, reta_size); -priv_unlock (priv);return -ret; }
@@ -249,9 +243,7 @@ mlx5_dev_rss_reta_update(struct rte_eth_dev *dev,int ret;struct priv *priv = dev->data->dev_private; -priv_lock (priv); ret =priv_dev_rss_reta_update (priv, reta_conf, reta_size); -priv_unlock (priv);if (dev->data->dev_started) {mlx5_dev_stop (dev);mlx5_dev_start (dev);
drivers/net/mlx5/mlx5_rxq.c +0 -9
@@ -286,7 +286,6 @@ mlx5_rx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc, container_of(rxq, struct mlx5_rxq_ctrl, rxq);int ret =0 ; -priv_lock (priv);if (!rte_is_power_of_2 (desc)) { desc =1 <<log2above (desc); WARN("%p: increased number of descriptors in RX queue %u"
@@ -298,7 +297,6 @@ mlx5_rx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc,if (idx >= priv->rxqs_n) {ERROR ("%p: queue index out of range (%u >= %u)" , (void *)dev, idx, priv->rxqs_n); -priv_unlock (priv);return -EOVERFLOW ; }if (!priv_is_rx_queue_offloads_allowed (priv, conf->offloads)) {
@@ -329,7 +327,6 @@ mlx5_rx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc, (void *)dev, (void *)rxq_ctrl); (*priv->rxqs)[idx] = &rxq_ctrl->rxq; out: -priv_unlock (priv);return -ret; }
@@ -350,12 +347,10 @@ mlx5_rx_queue_release(void *dpdk_rxq)return ; rxq_ctrl = container_of(rxq, struct mlx5_rxq_ctrl, rxq); priv = rxq_ctrl->priv; -priv_lock (priv);if (!mlx5_priv_rxq_releasable (priv, rxq_ctrl->rxq.stats.idx))rte_panic ("Rx queue %p is still used by a flow and cannot be" " removed\n" , (void *)rxq_ctrl);mlx5_priv_rxq_release (priv, rxq_ctrl->rxq.stats.idx); -priv_unlock (priv); }/**
@@ -512,7 +507,6 @@ mlx5_rx_intr_enable(struct rte_eth_dev *dev, uint16_t rx_queue_id)struct mlx5_rxq_ctrl *rxq_ctrl;int ret =0 ; -priv_lock (priv); rxq_data = (*priv->rxqs)[rx_queue_id];if (!rxq_data) { ret =EINVAL ;
@@ -531,7 +525,6 @@ mlx5_rx_intr_enable(struct rte_eth_dev *dev, uint16_t rx_queue_id)mlx5_priv_rxq_ibv_release (priv, rxq_ibv); } exit: -priv_unlock (priv);if (ret)WARN ("unable to arm interrupt on rx queue %d" , rx_queue_id);return -ret;
@@ -559,7 +552,6 @@ mlx5_rx_intr_disable(struct rte_eth_dev *dev, uint16_t rx_queue_id)void *ev_ctx;int ret =0 ; -priv_lock (priv); rxq_data = (*priv->rxqs)[rx_queue_id];if (!rxq_data) { ret =EINVAL ;
@@ -583,7 +575,6 @@ mlx5_rx_intr_disable(struct rte_eth_dev *dev, uint16_t rx_queue_id) exit:if (rxq_ibv)mlx5_priv_rxq_ibv_release (priv, rxq_ibv); -priv_unlock (priv);if (ret)WARN ("unable to disable interrupt on rx queue %d" , rx_queue_id);
drivers/net/mlx5/mlx5_stats.c +1 -14
@@ -328,7 +328,6 @@ mlx5_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)unsigned int i;unsigned int idx; -priv_lock (priv);/* Add software counters. */ for (i =0 ; (i != priv->rxqs_n); ++i) {struct mlx5_rxq_data *rxq = (*priv->rxqs)[i];
@@ -374,7 +373,6 @@ mlx5_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)/* FIXME: retrieve and add hardware counters. */ #endif *stats = tmp; -priv_unlock (priv);return 0 ; }
@@ -391,7 +389,6 @@ mlx5_stats_reset(struct rte_eth_dev *dev)unsigned int i;unsigned int idx; -priv_lock (priv);for (i =0 ; (i != priv->rxqs_n); ++i) {if ((*priv->rxqs)[i] ==NULL )continue ;
@@ -409,7 +406,6 @@ mlx5_stats_reset(struct rte_eth_dev *dev)#ifndef MLX5_PMD_SOFT_COUNTERS /* FIXME: reset hardware counters. */ #endif -priv_unlock (priv); }/**
@@ -436,16 +432,13 @@ mlx5_xstats_get(struct rte_eth_dev *dev,struct mlx5_xstats_ctrl *xstats_ctrl = &priv->xstats_ctrl;int stats_n; -priv_lock (priv); stats_n =priv_ethtool_get_stats_n (priv);if (stats_n <0 ) { -priv_unlock (priv);return -1 ; }if (xstats_ctrl->stats_n != stats_n)priv_xstats_init (priv); ret =priv_xstats_get (priv, stats); -priv_unlock (priv); }return ret; }
@@ -463,15 +456,12 @@ mlx5_xstats_reset(struct rte_eth_dev *dev)struct mlx5_xstats_ctrl *xstats_ctrl = &priv->xstats_ctrl;int stats_n; -priv_lock (priv); stats_n =priv_ethtool_get_stats_n (priv);if (stats_n <0 ) - goto unlock; +return ;if (xstats_ctrl->stats_n != stats_n)priv_xstats_init (priv);priv_xstats_reset (priv); -unlock: -priv_unlock (priv); }/**
@@ -491,18 +481,15 @@ int mlx5_xstats_get_names(struct rte_eth_dev *dev __rte_unused, struct rte_eth_xstat_name *xstats_names, unsigned int n) { - struct priv *priv = dev->data->dev_private; unsigned int i;if (n >= xstats_n && xstats_names) { -priv_lock (priv);for (i =0 ; i != xstats_n; ++i) {strncpy (xstats_names[i].name, mlx5_counters_init[i].dpdk_name,RTE_ETH_XSTATS_NAME_SIZE ); xstats_names[i].name[RTE_ETH_XSTATS_NAME_SIZE -1 ] =0 ; } -priv_unlock (priv); }return xstats_n; }
drivers/net/mlx5/mlx5_trigger.c +0 -7
@@ -142,7 +142,6 @@ mlx5_dev_start(struct rte_eth_dev *dev)int err; dev->data->dev_started =1 ; -priv_lock (priv); err =priv_flow_create_drop_queue (priv);if (err) { ERROR("%p: Drop queue allocation failed: %s",
@@ -180,7 +179,6 @@ mlx5_dev_start(struct rte_eth_dev *dev) goto error; }priv_dev_interrupt_handler_install (priv, dev); -priv_unlock (priv);return 0 ; error:/* Rollback. */
@@ -192,7 +190,6 @@ mlx5_dev_start(struct rte_eth_dev *dev)priv_txq_stop (priv);priv_rxq_stop (priv);priv_flow_delete_drop_queue (priv); -priv_unlock (priv);return err; }
@@ -210,7 +207,6 @@ mlx5_dev_stop(struct rte_eth_dev *dev)struct priv *priv = dev->data->dev_private;struct mlx5_mr *mr; -priv_lock (priv); dev->data->dev_started =0 ;/* Prevent crashes when queues are still in use. */ dev->rx_pkt_burst = removed_rx_burst;
@@ -227,7 +223,6 @@ mlx5_dev_stop(struct rte_eth_dev *dev)for (mr =LIST_FIRST (&priv->mr); mr; mr =LIST_FIRST (&priv->mr))priv_mr_release (priv, mr);priv_flow_delete_drop_queue (priv); -priv_unlock (priv); }/**
@@ -412,8 +407,6 @@ mlx5_traffic_restart(struct rte_eth_dev *dev) {struct priv *priv = dev->data->dev_private; -priv_lock (priv);priv_dev_traffic_restart (priv, dev); -priv_unlock (priv);return 0 ; }
drivers/net/mlx5/mlx5_txq.c +0 -5
@@ -172,7 +172,6 @@ mlx5_tx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc, container_of(txq, struct mlx5_txq_ctrl, txq);int ret =0 ; -priv_lock (priv);/* * Don't verify port offloads for application which * use the old API.
@@ -205,7 +204,6 @@ mlx5_tx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc,if (idx >= priv->txqs_n) {ERROR ("%p: queue index out of range (%u >= %u)" , (void *)dev, idx, priv->txqs_n); -priv_unlock (priv);return -EOVERFLOW ; }if (!mlx5_priv_txq_releasable (priv, idx)) {
@@ -226,7 +224,6 @@ mlx5_tx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc, (void *)dev, (void *)txq_ctrl); (*priv->txqs)[idx] = &txq_ctrl->txq; out: -priv_unlock (priv);return -ret; }
@@ -248,7 +245,6 @@ mlx5_tx_queue_release(void *dpdk_txq)return ; txq_ctrl = container_of(txq, struct mlx5_txq_ctrl, txq); priv = txq_ctrl->priv; -priv_lock (priv);for (i =0 ; (i != priv->txqs_n); ++i)if ((*priv->txqs)[i] == txq) { DEBUG("%p: removing TX queue %p from list",
@@ -256,7 +252,6 @@ mlx5_tx_queue_release(void *dpdk_txq)mlx5_priv_txq_release (priv, i);break ; } -priv_unlock (priv); }
drivers/net/mlx5/mlx5_vlan.c +0 -6
@@ -46,7 +46,6 @@ mlx5_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on)unsigned int i;int ret =0 ; -priv_lock (priv);DEBUG ("%p: %s VLAN filter ID %" PRIu16, (void *)dev, (on ?"enable" :"disable" ), vlan_id);assert (priv->vlan_filter_n <=RTE_DIM (priv->vlan_filter));
@@ -82,7 +81,6 @@ mlx5_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on)if (dev->data->dev_started)priv_dev_traffic_restart (priv, dev); out: -priv_unlock (priv);return ret; }
@@ -155,9 +153,7 @@ mlx5_vlan_strip_queue_set(struct rte_eth_dev *dev, uint16_t queue, int on)ERROR ("VLAN stripping, invalid queue number %d" , queue);return ; } -priv_lock (priv);priv_vlan_strip_queue_set (priv, queue, on); -priv_unlock (priv); }/**
@@ -183,10 +179,8 @@ mlx5_vlan_offload_set(struct rte_eth_dev *dev, int mask)return 0 ; }/* Run on every RX queue and set/reset VLAN stripping. */ -priv_lock (priv);for (i =0 ; (i != priv->rxqs_n); i++)priv_vlan_strip_queue_set (priv, i, hw_vlan_strip); -priv_unlock (priv); }return 0 ; }
Signature · 1 line
2.11.0
PATCH v3 8/10 net/mlx5: prefix all function with mlx5
In reply to Nelio LaranjeiroThis change removes the need to distinguish unlocked priv_*() functions which are therefore renamed using a mlx5_*() prefix for consistency.
At the same time, all functions from mlx5 uses a pointer to the ETH device instead of the one to the PMD private data.
--- drivers/net/mlx5/mlx5.c | 104 ++++++------ drivers/net/mlx5/mlx5.h | 90 +++++------ drivers/net/mlx5/mlx5_ethdev.c | 288 ++++++++++++++------------------- drivers/net/mlx5/mlx5_flow.c | 342 +++++++++++++++++++-------------------- drivers/net/mlx5/mlx5_mac.c | 8 +- drivers/net/mlx5/mlx5_mr.c | 86 ++++------ drivers/net/mlx5/mlx5_rss.c | 107 ++++-------- drivers/net/mlx5/mlx5_rxq.c | 285 ++++++++++++++++---------------- drivers/net/mlx5/mlx5_rxtx.c | 10 +- drivers/net/mlx5/mlx5_rxtx.h | 115 +++++++------ drivers/net/mlx5/mlx5_rxtx_vec.c | 25 ++- drivers/net/mlx5/mlx5_socket.c | 29 ++-- drivers/net/mlx5/mlx5_stats.c | 135 ++++++---------- drivers/net/mlx5/mlx5_trigger.c | 118 ++++++-------- drivers/net/mlx5/mlx5_txq.c | 134 +++++++-------- drivers/net/mlx5/mlx5_vlan.c | 61 +++---- 16 files changed, 868 insertions(+), 1069 deletions(-)
drivers/net/mlx5/mlx5.c +52 -52
@@ -169,8 +169,8 @@ mlx5_dev_close(struct rte_eth_dev *dev) (void *)dev, ((priv->ctx != NULL) ? priv->ctx->device->name : ""));/* In case mlx5_dev_stop() has not been called. */ -priv_dev_interrupt_handler_uninstall (priv, dev); -priv_dev_traffic_disable (priv, dev); +mlx5_dev_interrupt_handler_uninstall (dev); +mlx5_traffic_disable (dev);/* Prevent crashes when queues are still in use. */ dev->rx_pkt_burst = removed_rx_burst; dev->tx_pkt_burst = removed_tx_burst;
@@ -178,7 +178,7 @@ mlx5_dev_close(struct rte_eth_dev *dev)/* XXX race condition if mlx5_rx_burst() is still running. */ usleep (1000 );for (i =0 ; (i != priv->rxqs_n); ++i) -mlx5_priv_rxq_release (priv, i); +mlx5_rxq_release (dev, i); priv->rxqs_n =0 ; priv->rxqs =NULL ; }
@@ -186,7 +186,7 @@ mlx5_dev_close(struct rte_eth_dev *dev)/* XXX race condition if mlx5_tx_burst() is still running. */ usleep (1000 );for (i =0 ; (i != priv->txqs_n); ++i) -mlx5_priv_txq_release (priv, i); +mlx5_txq_release (dev, i); priv->txqs_n =0 ; priv->txqs =NULL ; }
@@ -201,31 +201,31 @@ mlx5_dev_close(struct rte_eth_dev *dev)if (priv->reta_idx !=NULL )rte_free (priv->reta_idx);if (priv->primary_socket) -priv_socket_uninit (priv); - ret =mlx5_priv_hrxq_ibv_verify (priv); +mlx5_socket_uninit (dev); + ret =mlx5_hrxq_ibv_verify (dev);if (ret) -WARN ("%p: some Hash Rx queue still remain" , (void *)priv); - ret =mlx5_priv_ind_table_ibv_verify (priv); +WARN ("%p: some Hash Rx queue still remain" , (void *)dev); + ret =mlx5_ind_table_ibv_verify (dev);if (ret) -WARN ("%p: some Indirection table still remain" , (void *)priv); - ret =mlx5_priv_rxq_ibv_verify (priv); +WARN ("%p: some Indirection table still remain" , (void *)dev); + ret =mlx5_rxq_ibv_verify (dev);if (ret) -WARN ("%p: some Verbs Rx queue still remain" , (void *)priv); - ret =mlx5_priv_rxq_verify (priv); +WARN ("%p: some Verbs Rx queue still remain" , (void *)dev); + ret =mlx5_rxq_verify (dev);if (ret) -WARN ("%p: some Rx Queues still remain" , (void *)priv); - ret =mlx5_priv_txq_ibv_verify (priv); +WARN ("%p: some Rx Queues still remain" , (void *)dev); + ret =mlx5_txq_ibv_verify (dev);if (ret) -WARN ("%p: some Verbs Tx queue still remain" , (void *)priv); - ret =mlx5_priv_txq_verify (priv); +WARN ("%p: some Verbs Tx queue still remain" , (void *)dev); + ret =mlx5_txq_verify (dev);if (ret) -WARN ("%p: some Tx Queues still remain" , (void *)priv); - ret =priv_flow_verify (priv); +WARN ("%p: some Tx Queues still remain" , (void *)dev); + ret =mlx5_flow_verify (dev);if (ret) -WARN ("%p: some flows still remain" , (void *)priv); - ret =priv_mr_verify (priv); +WARN ("%p: some flows still remain" , (void *)dev); + ret =mlx5_mr_verify (dev);if (ret) -WARN ("%p: some Memory Region still remain" , (void *)priv); +WARN ("%p: some Memory Region still remain" , (void *)dev);memset (priv,0 ,sizeof (*priv)); }
@@ -466,15 +466,16 @@ static void *uar_base;/** * Reserve UAR address space for primary process. * -* @param[in] priv -* Pointer to private structure. +* @param[in] dev +* Pointer to Ethernet device. * * @return * 0 on success, errno value on failure. */ static int -priv_uar_init_primary (struct priv *priv) +mlx5_uar_init_primary (struct rte_eth_dev *dev) { +struct priv *priv = dev->data->dev_private;void *addr = (void *)0 ;int i;const struct rte_mem_config *mcfg;
@@ -516,15 +517,16 @@ priv_uar_init_primary(struct priv *priv)* Reserve UAR address space for secondary process, align with * primary process. * -* @param[in] priv -* Pointer to private structure. +* @param[in] dev +* Pointer to Ethernet device. * * @return * 0 on success, errno value on failure. */ static int -priv_uar_init_secondary (struct priv *priv) +mlx5_uar_init_secondary (struct rte_eth_dev *dev) { +struct priv *priv = dev->data->dev_private;void *addr;int ret;
@@ -690,7 +692,7 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,struct ibv_port_attr port_attr;struct ibv_pd *pd =NULL ;struct priv *priv =NULL ; -struct rte_eth_dev *eth_dev; +struct rte_eth_dev *eth_dev =NULL ;struct ibv_device_attr_ex device_attr_ex;struct ether_addr mac;struct ibv_device_attr_ex device_attr;
@@ -721,20 +723,19 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, } eth_dev->device = &pci_dev->device; eth_dev->dev_ops = &mlx5_dev_sec_ops; - priv = eth_dev->data->dev_private; - err =priv_uar_init_secondary (priv); + err =mlx5_uar_init_secondary (eth_dev);if (err <0 ) { err = -err; goto error; }/* Receive command fd from primary process */ - err =priv_socket_connect (priv); + err =mlx5_socket_connect (eth_dev);if (err <0 ) { err = -err; goto error; }/* Remap UAR for Tx queues. */ - err =priv_tx_uar_remap (priv, err); + err =mlx5_tx_uar_remap (eth_dev, err);if (err) goto error;/*
@@ -743,9 +744,9 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,* secondary process. */ eth_dev->rx_pkt_burst = -priv_select_rx_function (priv, eth_dev); +mlx5_select_rx_function (eth_dev); eth_dev->tx_pkt_burst = -priv_select_tx_function (priv, eth_dev); +mlx5_select_tx_function (eth_dev);continue ; }DEBUG ("using port %u (%08" PRIx32")" , port, test);
@@ -859,11 +860,23 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,WARN ("Rx CQE compression isn't supported" ); config.cqe_comp =0 ; } - err =priv_uar_init_primary (priv); + eth_dev =rte_eth_dev_allocate (name); +if (eth_dev ==NULL ) { +ERROR ("can not allocate rte ethdev" ); + err =ENOMEM ; + goto port_error; + } + eth_dev->data->dev_private = priv; + priv->dev = eth_dev; + eth_dev->data->mac_addrs = priv->mac; + eth_dev->device = &pci_dev->device; +rte_eth_copy_pci_info (eth_dev, pci_dev); + eth_dev->device->driver = &mlx5_driver.driver; + err =mlx5_uar_init_primary (eth_dev);if (err) goto port_error;/* Configure the first MAC address by default. */ -if (priv_get_mac (priv, &mac.addr_bytes)) { +if (mlx5_get_mac (eth_dev, &mac.addr_bytes)) {ERROR ("cannot get MAC address, is mlx5_en loaded?" " (errno: %s)" ,strerror (errno)); err =ENODEV ;
@@ -878,7 +891,7 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, {char ifname[IF_NAMESIZE ]; -if (priv_get_ifname (priv, &ifname) ==0 ) +if (mlx5_get_ifname (eth_dev, &ifname) ==0 )DEBUG ("port %u ifname is \"%s\"" , priv->port, ifname);else
@@ -886,25 +899,13 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, }#endif /* Get actual MTU if possible. */ -priv_get_mtu (priv, &priv->mtu); +mlx5_get_mtu (eth_dev, &priv->mtu);DEBUG ("port %u MTU is %u" , priv->port, priv->mtu); - eth_dev =rte_eth_dev_allocate (name); -if (eth_dev ==NULL ) { -ERROR ("can not allocate rte ethdev" ); - err =ENOMEM ; - goto port_error; - } - eth_dev->data->dev_private = priv; - eth_dev->data->mac_addrs = priv->mac; - eth_dev->device = &pci_dev->device; -rte_eth_copy_pci_info (eth_dev, pci_dev); - eth_dev->device->driver = &mlx5_driver.driver;/* * Initialize burst functions to prevent crashes before link-up. */ eth_dev->rx_pkt_burst = removed_rx_burst; eth_dev->tx_pkt_burst = removed_tx_burst; - priv->dev = eth_dev; eth_dev->dev_ops = &mlx5_dev_ops;/* Register MAC address. */ claim_zero (mlx5_mac_addr_add (eth_dev, &mac,0 ,0 ));
@@ -919,10 +920,9 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, mlx5_glue->dv_set_context_attr (ctx,MLX5DV_CTX_ATTR_BUF_ALLOCATORS , (void *)((uintptr_t )&alctr)); -/* Bring Ethernet device up. */ DEBUG ("forcing Ethernet interface up" ); -priv_set_flags (priv, ~IFF_UP ,IFF_UP ); +mlx5_set_flags (eth_dev, ~IFF_UP ,IFF_UP );/* Store device configuration on private structure. */ priv->config = config;continue ;
drivers/net/mlx5/mlx5.h +41 -49
156 lines not on this page · raw message
drivers/net/mlx5/mlx5_ethdev.c +118 -170
640 lines not on this page · raw message
drivers/net/mlx5/mlx5_flow.c +167 -175
900 lines not on this page · raw message
drivers/net/mlx5/mlx5_mac.c +4 -4
@@ -35,8 +35,8 @@/** * Get MAC address by querying netdevice. * -* @param[in] priv -* struct priv for the requested device. +* @param[in] dev +* Pointer to Ethernet device. * @param[out] mac * MAC address output buffer. *
@@ -44,11 +44,11 @@* 0 on success, -1 on failure and errno is set. */ int -priv_get_mac (struct priv *priv,uint8_t (*mac)[ETHER_ADDR_LEN ]) +mlx5_get_mac (struct rte_eth_dev *dev,uint8_t (*mac)[ETHER_ADDR_LEN ]) {struct ifreq request; -if (priv_ifreq (priv,SIOCGIFHWADDR , &request)) +if (mlx5_ifreq (dev,SIOCGIFHWADDR , &request))return -1 ;memcpy (mac, request.ifr_hwaddr.sa_data,ETHER_ADDR_LEN );return 0 ;
drivers/net/mlx5/mlx5_mr.c +31 -55
190 lines not on this page · raw message
drivers/net/mlx5/mlx5_rss.c +30 -77
161 lines not on this page · raw message
drivers/net/mlx5/mlx5_rxq.c +146 -139
706 lines not on this page · raw message
drivers/net/mlx5/mlx5_rxtx.h +54 -61
115 lines not on this page · raw message
drivers/net/mlx5/mlx5_stats.c +51 -84
135 lines not on this page · raw message
drivers/net/mlx5/mlx5_trigger.c +51 -67
118 lines not on this page · raw message
drivers/net/mlx5/mlx5_txq.c +69 -65
134 lines not on this page · raw message
drivers/net/mlx5/mlx5_vlan.c +22 -39
61 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Signature · 1 line
2.11.0
Part of the diff is not shown here. View the raw message.
PATCH v3 9/10 net/mlx5: change non failing function return values
In reply to Nelio LaranjeiroThese functions return int although they are not supposed to fail, resulting in unnecessary checks in their callers.
Some are returning error where is should be a boolean.
--- drivers/net/mlx5/mlx5.h | 4 ++-- drivers/net/mlx5/mlx5_mr.c | 4 ++-- drivers/net/mlx5/mlx5_rxq.c | 25 ++++++++++--------------- drivers/net/mlx5/mlx5_socket.c | 6 +----- drivers/net/mlx5/mlx5_trigger.c | 6 +----- drivers/net/mlx5/mlx5_txq.c | 17 ++++++----------- 6 files changed, 22 insertions(+), 40 deletions(-)
drivers/net/mlx5/mlx5.h +2 -2
@@ -242,7 +242,7 @@ int mlx5_vlan_offload_set(struct rte_eth_dev *dev, int mask);int mlx5_dev_start (struct rte_eth_dev *dev);void mlx5_dev_stop (struct rte_eth_dev *dev);int mlx5_traffic_enable (struct rte_eth_dev *dev); -int mlx5_traffic_disable (struct rte_eth_dev *dev); +void mlx5_traffic_disable (struct rte_eth_dev *dev);int mlx5_traffic_restart (struct rte_eth_dev *dev);/* mlx5_flow.c */
@@ -287,7 +287,7 @@ void mlx5_flow_delete_drop_queue(struct rte_eth_dev *dev);/* mlx5_socket.c */ int mlx5_socket_init (struct rte_eth_dev *priv); -int mlx5_socket_uninit (struct rte_eth_dev *priv); +void mlx5_socket_uninit (struct rte_eth_dev *priv);void mlx5_socket_handle (struct rte_eth_dev *priv);int mlx5_socket_connect (struct rte_eth_dev *priv);
drivers/net/mlx5/mlx5_mr.c +2 -2
@@ -307,7 +307,7 @@ mlx5_mr_get(struct rte_eth_dev *dev, struct rte_mempool *mp)* Pointer to memory region to release. * * @return -* 0 on success, errno on failure. +* 1 while a reference on it exists, 0 when freed. */ int mlx5_mr_release (struct mlx5_mr *mr)
@@ -321,7 +321,7 @@ mlx5_mr_release(struct mlx5_mr *mr)rte_free (mr);return 0 ; } -return EBUSY ; +return 1 ; }/**
drivers/net/mlx5/mlx5_rxq.c +10 -15
@@ -840,7 +840,7 @@ mlx5_rxq_ibv_get(struct rte_eth_dev *dev, uint16_t idx)* Verbs Rx queue object. * * @return -* 0 on success, errno value on failure. +* 1 while a reference on it exists, 0 when freed. */ int mlx5_rxq_ibv_release (struct mlx5_rxq_ibv *rxq_ibv)
@@ -867,7 +867,7 @@ mlx5_rxq_ibv_release(struct mlx5_rxq_ibv *rxq_ibv)rte_free (rxq_ibv);return 0 ; } -return EBUSY ; +return 1 ; }/**
@@ -1074,7 +1074,7 @@ mlx5_rxq_get(struct rte_eth_dev *dev, uint16_t idx)* TX queue index. * * @return -* 0 on success, errno value on failure. +* 1 while a reference on it exists, 0 when freed. */ int mlx5_rxq_release (struct rte_eth_dev *dev,uint16_t idx)
@@ -1086,13 +1086,8 @@ mlx5_rxq_release(struct rte_eth_dev *dev, uint16_t idx)return 0 ; rxq_ctrl = container_of((*priv->rxqs)[idx], struct mlx5_rxq_ctrl, rxq);assert (rxq_ctrl->priv); -if (rxq_ctrl->ibv) { -int ret; - - ret =mlx5_rxq_ibv_release (rxq_ctrl->ibv); -if (!ret) - rxq_ctrl->ibv =NULL ; - } +if (rxq_ctrl->ibv && !mlx5_rxq_ibv_release (rxq_ctrl->ibv)) + rxq_ctrl->ibv =NULL ;DEBUG ("%p: Rx queue %p: refcnt %d" , (void *)dev, (void *)rxq_ctrl,rte_atomic32_read (&rxq_ctrl->refcnt));if (rte_atomic32_dec_and_test (&rxq_ctrl->refcnt)) {
@@ -1101,7 +1096,7 @@ mlx5_rxq_release(struct rte_eth_dev *dev, uint16_t idx) (*priv->rxqs)[idx] =NULL ;return 0 ; } -return EBUSY ; +return 1 ; }/**
@@ -1261,7 +1256,7 @@ mlx5_ind_table_ibv_get(struct rte_eth_dev *dev, uint16_t queues[],* Indirection table to release. * * @return -* 0 on success, errno value on failure. +* 1 while a reference on it exists, 0 when freed. */ int mlx5_ind_table_ibv_release(struct rte_eth_dev *dev,
@@ -1281,7 +1276,7 @@ mlx5_ind_table_ibv_release(struct rte_eth_dev *dev,rte_free (ind_tbl);return 0 ; } -return EBUSY ; +return 1 ; }/**
@@ -1439,7 +1434,7 @@ mlx5_hrxq_get(struct rte_eth_dev *dev, uint8_t *rss_key, uint8_t rss_key_len,* Pointer to Hash Rx queue to release. * * @return -* 0 on success, errno value on failure. +* 1 while a reference on it exists, 0 when freed. */ int mlx5_hrxq_release (struct rte_eth_dev *dev,struct mlx5_hrxq *hrxq)
@@ -1454,7 +1449,7 @@ mlx5_hrxq_release(struct rte_eth_dev *dev, struct mlx5_hrxq *hrxq)return 0 ; }claim_nonzero (mlx5_ind_table_ibv_release (dev, hrxq->ind_table)); -return EBUSY ; +return 1 ; }/**
drivers/net/mlx5/mlx5_socket.c +1 -5
@@ -82,11 +82,8 @@ mlx5_socket_init(struct rte_eth_dev *dev)* * @param[in] dev * Pointer to Ethernet device. -* -* @return -* 0 on success, errno value on failure. */ -int +void mlx5_socket_uninit (struct rte_eth_dev *dev) {struct priv *priv = dev->data->dev_private;
@@ -95,7 +92,6 @@ mlx5_socket_uninit(struct rte_eth_dev *dev)claim_zero (close (priv->primary_socket)); priv->primary_socket =0 ;claim_zero (remove (path)); -return 0 ; }/**
drivers/net/mlx5/mlx5_trigger.c +1 -5
@@ -363,17 +363,13 @@ mlx5_traffic_enable(struct rte_eth_dev *dev)* * @param dev * Pointer to Ethernet device private data. -* -* @return -* 0 on success. */ -int +void mlx5_traffic_disable (struct rte_eth_dev *dev) {struct priv *priv = dev->data->dev_private;mlx5_flow_list_flush (dev, &priv->ctrl_flows); -return 0 ; }/**
drivers/net/mlx5/mlx5_txq.c +6 -11
@@ -572,7 +572,7 @@ mlx5_txq_ibv_get(struct rte_eth_dev *dev, uint16_t idx)* Verbs Tx queue object. * * @return -* 0 on success, errno on failure. +* 1 while a reference on it exists, 0 when freed. */ int mlx5_txq_ibv_release (struct mlx5_txq_ibv *txq_ibv)
@@ -587,7 +587,7 @@ mlx5_txq_ibv_release(struct mlx5_txq_ibv *txq_ibv)rte_free (txq_ibv);return 0 ; } -return EBUSY ; +return 1 ; }/**
@@ -824,7 +824,7 @@ mlx5_txq_get(struct rte_eth_dev *dev, uint16_t idx)* TX queue index. * * @return -* 0 on success, errno on failure. +* 1 while a reference on it exists, 0 when freed. */ int mlx5_txq_release (struct rte_eth_dev *dev,uint16_t idx)
@@ -839,13 +839,8 @@ mlx5_txq_release(struct rte_eth_dev *dev, uint16_t idx) txq = container_of((*priv->txqs)[idx], struct mlx5_txq_ctrl, txq);DEBUG ("%p: Tx queue %p: refcnt %d" , (void *)dev, (void *)txq,rte_atomic32_read (&txq->refcnt)); -if (txq->ibv) { -int ret; - - ret =mlx5_txq_ibv_release (txq->ibv); -if (!ret) - txq->ibv =NULL ; - } +if (txq->ibv && !mlx5_txq_ibv_release (txq->ibv)) + txq->ibv =NULL ;for (i =0 ; i !=MLX5_PMD_TX_MP_CACHE ; ++i) {if (txq->txq.mp2mr[i]) {mlx5_mr_release (txq->txq.mp2mr[i]);
@@ -862,7 +857,7 @@ mlx5_txq_release(struct rte_eth_dev *dev, uint16_t idx) (*priv->txqs)[idx] =NULL ;return 0 ; } -return EBUSY ; +return 1 ; }/**
Signature · 1 line
2.11.0
PATCH v3 10/10 net/mlx5: standardize on negative errno values
In reply to Nelio LaranjeiroSet rte_errno systematically as well.
--- drivers/net/mlx5/mlx5.c | 88 ++++++----- drivers/net/mlx5/mlx5_ethdev.c | 231 ++++++++++++++++------------- drivers/net/mlx5/mlx5_flow.c | 317 +++++++++++++++++++++++----------------- drivers/net/mlx5/mlx5_mac.c | 33 +++-- drivers/net/mlx5/mlx5_mr.c | 15 +- drivers/net/mlx5/mlx5_rss.c | 50 ++++--- drivers/net/mlx5/mlx5_rxmode.c | 28 +++- drivers/net/mlx5/mlx5_rxq.c | 142 ++++++++++-------- drivers/net/mlx5/mlx5_socket.c | 82 +++++++---- drivers/net/mlx5/mlx5_stats.c | 53 +++++-- drivers/net/mlx5/mlx5_trigger.c | 89 ++++++----- drivers/net/mlx5/mlx5_txq.c | 54 ++++--- drivers/net/mlx5/mlx5_vlan.c | 24 +-- 13 files changed, 719 insertions(+), 487 deletions(-)
drivers/net/mlx5/mlx5.c +49 -39
@@ -108,7 +108,7 @@ mlx5_getenv_int(const char *name)* A pointer to the callback data. * * @return -* a pointer to the allocate space. +* Allocated buffer, NULL otherwise and rte_errno is set. */ static void *mlx5_alloc_verbs_buf (size_t size,void *data)
@@ -130,6 +130,8 @@ mlx5_alloc_verbs_buf(size_t size, void *data) }assert (data !=NULL ); ret =rte_malloc_socket (__func__, size, alignment, socket); +if (!ret && size) + rte_errno =ENOMEM ;DEBUG ("Extern alloc size: %lu, align: %lu: %p" , size, alignment, ret);return ret; }
@@ -365,7 +367,7 @@ mlx5_dev_idx(struct rte_pci_addr *pci_addr)* User data. * * @return -* 0 on success, negative errno value on failure. +* 0 on success, a negative errno value otherwise and rte_errno is set. */ static int mlx5_args_check (const char *key,const char *val,void *opaque)
@@ -376,8 +378,9 @@ mlx5_args_check(const char *key, const char *val, void *opaque) errno =0 ; tmp =strtoul (val,NULL ,0 );if (errno) { + rte_errno = errno;WARN ("%s: \"%s\" is not a valid integer" , key, val); -return errno; +return -rte_errno; }if (strcmp (MLX5_RXQ_CQE_COMP_EN , key) ==0 ) { config->cqe_comp = !!tmp;
@@ -397,7 +400,8 @@ mlx5_args_check(const char *key, const char *val, void *opaque) config->rx_vec_en = !!tmp; }else {WARN ("%s: unknown parameter" , key); -return -EINVAL ; + rte_errno =EINVAL ; +return -rte_errno; }return 0 ; }
@@ -411,7 +415,7 @@ mlx5_args_check(const char *key, const char *val, void *opaque)* Device arguments structure. * * @return -* 0 on success, errno value on failure. +* 0 on success, a negative errno value otherwise and rte_errno is set. */ static int mlx5_args (struct mlx5_dev_config *config,struct rte_devargs *devargs)
@@ -442,9 +446,10 @@ mlx5_args(struct mlx5_dev_config *config, struct rte_devargs *devargs)if (rte_kvargs_count (kvlist, params[i])) { ret =rte_kvargs_process (kvlist, params[i], mlx5_args_check, config); -if (ret !=0 ) { +if (ret) { + rte_errno =EINVAL ;rte_kvargs_free (kvlist); -return ret; +return -rte_errno; } } }
@@ -470,7 +475,7 @@ static void *uar_base;* Pointer to Ethernet device. * * @return -* 0 on success, errno value on failure. +* 0 on success, a negative errno value otherwise and rte_errno is set. */ static int mlx5_uar_init_primary (struct rte_eth_dev *dev)
@@ -479,7 +484,6 @@ mlx5_uar_init_primary(struct rte_eth_dev *dev)void *addr = (void *)0 ;int i;const struct rte_mem_config *mcfg; -int ret;if (uar_base) {/* UAR address space mapped. */ priv->uar_base = uar_base;
@@ -501,8 +505,8 @@ mlx5_uar_init_primary(struct rte_eth_dev *dev)if (addr ==MAP_FAILED ) {ERROR ("Failed to reserve UAR address space, please adjust " "MLX5_UAR_SIZE or try --base-virtaddr" ); - ret =ENOMEM ; -return ret; + rte_errno =ENOMEM ; +return -rte_errno; }/* Accept either same addr or a new addr returned from mmap if target * range occupied.
@@ -521,14 +525,13 @@ mlx5_uar_init_primary(struct rte_eth_dev *dev)* Pointer to Ethernet device. * * @return -* 0 on success, errno value on failure. +* 0 on success, a negative errno value otherwise and rte_errno is set. */ static int mlx5_uar_init_secondary (struct rte_eth_dev *dev) {struct priv *priv = dev->data->dev_private;void *addr; -int ret;assert (priv->uar_base);if (uar_base) {/* already reserved. */
@@ -541,15 +544,15 @@ mlx5_uar_init_secondary(struct rte_eth_dev *dev)if (addr ==MAP_FAILED ) {ERROR ("UAR mmap failed: %p size: %llu" , priv->uar_base,MLX5_UAR_SIZE ); - ret =ENXIO ; -return ret; + rte_errno =ENXIO ; +return -rte_errno; }if (priv->uar_base != addr) {ERROR ("UAR address %p size %llu occupied, please adjust " "MLX5_UAR_OFFSET or try EAL parameter --base-virtaddr" , priv->uar_base,MLX5_UAR_SIZE ); - ret =ENXIO ; -return ret; + rte_errno =ENXIO ; +return -rte_errno; } uar_base = addr;/* process local, don't reserve again */ INFO ("Reserved UAR address space: %p" , addr);
@@ -568,13 +571,13 @@ mlx5_uar_init_secondary(struct rte_eth_dev *dev)* PCI device information. * * @return -* 0 on success, negative errno value on failure. +* 0 on success, a negative errno value otherwise and rte_errno is set. */ static int mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,struct rte_pci_device *pci_dev) { -struct ibv_device **list; +struct ibv_device **list =NULL ;struct ibv_device *ibv_dev;int err =0 ;struct ibv_context *attr_ctx =NULL ;
@@ -594,7 +597,8 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, idx =mlx5_dev_idx (&pci_dev->addr);if (idx ==-1 ) {ERROR ("this driver cannot support any more adapters" ); -return -ENOMEM ; + err =ENOMEM ; + goto error; }DEBUG ("using driver device index %d" , idx);/* Save PCI address. */
@@ -602,9 +606,10 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, list = mlx5_glue->get_device_list (&i);if (list ==NULL ) {assert (errno); + err = errno;if (errno ==ENOSYS )ERROR ("cannot list devices, is ib_uverbs loaded?" ); -return -errno; + goto error; }assert (i >=0 );/*
@@ -626,7 +631,8 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,INFO ("PCI information matches, using device \"%s\"" , list[i]->name); attr_ctx = mlx5_glue->open_device (list[i]); - err = errno; + rte_errno = errno; + err = rte_errno;break ; }if (attr_ctx ==NULL ) {
@@ -634,13 +640,12 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,switch (err) {case 0 :ERROR ("cannot access device, is mlx5_ib loaded?" ); -return -ENODEV ; + err =ENODEV ; + goto error;case EINVAL :ERROR ("cannot use device, are drivers up to date?" ); -return -EINVAL ; + goto error; } -assert (err >0 ); -return -err; } ibv_dev = list[i];DEBUG ("device opened" );
@@ -680,8 +685,10 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,#else WARN ("Tunnel offloading disabled due to old OFED/rdma-core version" );#endif -if (mlx5_glue->query_device_ex (attr_ctx,NULL , &device_attr)) +if (mlx5_glue->query_device_ex (attr_ctx,NULL , &device_attr)) { + err = errno; goto error; + }INFO ("%u port(s) detected" , device_attr.orig_attr.phys_port_cnt);for (i =0 ; i < device_attr.orig_attr.phys_port_cnt; i++) {char name[RTE_ETH_NAME_MAX_LEN ];
@@ -718,22 +725,19 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, eth_dev =rte_eth_dev_attach_secondary (name);if (eth_dev ==NULL ) {ERROR ("can not attach rte ethdev" ); - err =ENOMEM ; + rte_errno =ENOMEM ; + err = rte_errno; goto error; } eth_dev->device = &pci_dev->device; eth_dev->dev_ops = &mlx5_dev_sec_ops; err =mlx5_uar_init_secondary (eth_dev); -if (err <0 ) { - err = -err; +if (err) goto error; - }/* Receive command fd from primary process */ err =mlx5_socket_connect (eth_dev); -if (err <0 ) { - err = -err; +if (err) goto error; - }/* Remap UAR for Tx queues. */ err =mlx5_tx_uar_remap (eth_dev, err);if (err)
@@ -804,6 +808,7 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, }if (mlx5_glue->query_device_ex (ctx,NULL , &device_attr_ex)) {ERROR ("ibv_query_device_ex() failed" ); + err = errno; goto port_error; } config.hw_csum = !!(device_attr_ex.device_cap_flags_ex &
@@ -899,7 +904,9 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, }#endif /* Get actual MTU if possible. */ -mlx5_get_mtu (eth_dev, &priv->mtu); + err =mlx5_get_mtu (eth_dev, &priv->mtu); +if (err) + goto port_error;DEBUG ("port %u MTU is %u" , priv->port, priv->mtu);/* * Initialize burst functions to prevent crashes before link-up.
@@ -943,16 +950,19 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,*/ /* no port found, complain */ if (!mlx5_dev[idx].ports) { - err =ENODEV ; - goto error; + rte_errno =ENODEV ; + err = rte_errno; } error:if (attr_ctx)claim_zero (mlx5_glue->close_device (attr_ctx));if (list) mlx5_glue->free_device_list (list); -assert (err >=0 ); -return -err; +if (err) { + rte_errno = err; +return -rte_errno; + } +return 0 ; }static const struct rte_pci_id mlx5_pci_id_map[] = {
drivers/net/mlx5/mlx5_ethdev.c +133 -98
541 lines not on this page · raw message
drivers/net/mlx5/mlx5_flow.c +183 -134
847 lines not on this page · raw message
drivers/net/mlx5/mlx5_mac.c +22 -11
@@ -41,15 +41,17 @@* MAC address output buffer. * * @return -* 0 on success, -1 on failure and errno is set. +* 0 on success, a negative errno value otherwise and rte_errno is set. */ int mlx5_get_mac (struct rte_eth_dev *dev,uint8_t (*mac)[ETHER_ADDR_LEN ]) {struct ifreq request; +int ret; -if (mlx5_ifreq (dev,SIOCGIFHWADDR , &request)) -return -1 ; + ret =mlx5_ifreq (dev,SIOCGIFHWADDR , &request); +if (ret) +return ret;memcpy (mac, request.ifr_hwaddr.sa_data,ETHER_ADDR_LEN );return 0 ; }
@@ -67,8 +69,13 @@ mlx5_mac_addr_remove(struct rte_eth_dev *dev, uint32_t index) {assert (index <MLX5_MAX_MAC_ADDRESSES );memset (&dev->data->mac_addrs[index],0 ,sizeof (struct ether_addr )); -if (!dev->data->promiscuous) -mlx5_traffic_restart (dev); +if (!dev->data->promiscuous) { +int ret =mlx5_traffic_restart (dev); + +if (ret) +ERROR ("%p cannot remove mac address: %s" , (void *)dev, +strerror (rte_errno)); + } }/**
@@ -84,14 +91,13 @@ mlx5_mac_addr_remove(struct rte_eth_dev *dev, uint32_t index)* VMDq pool index to associate address with (ignored). * * @return -* 0 on success. +* 0 on success, a negative errno value otherwise and rte_errno is set. */ int mlx5_mac_addr_add (struct rte_eth_dev *dev,struct ether_addr *mac, uint32_t index, uint32_t vmdq __rte_unused) {unsigned int i; -int ret =0 ;assert (index <MLX5_MAX_MAC_ADDRESSES );/* First, make sure this address isn't already configured. */
@@ -102,12 +108,13 @@ mlx5_mac_addr_add(struct rte_eth_dev *dev, struct ether_addr *mac,if (memcmp (&dev->data->mac_addrs[i], mac,sizeof (*mac)))continue ;/* Address already configured elsewhere, return with error. */ -return EADDRINUSE ; + rte_errno =EADDRINUSE ; +return -rte_errno; } dev->data->mac_addrs[index] = *mac;if (!dev->data->promiscuous) -mlx5_traffic_restart (dev); -return ret; +return mlx5_traffic_restart (dev); +return 0 ; }/**
@@ -121,6 +128,10 @@ mlx5_mac_addr_add(struct rte_eth_dev *dev, struct ether_addr *mac,void mlx5_mac_addr_set (struct rte_eth_dev *dev,struct ether_addr *mac_addr) { +int ret; +DEBUG ("%p: setting primary MAC address" , (void *)dev); -mlx5_mac_addr_add (dev, mac_addr,0 ,0 ); + ret =mlx5_mac_addr_add (dev, mac_addr,0 ,0 ); +if (ret) +ERROR ("cannot set mac address: %s" ,strerror (rte_errno)); }
drivers/net/mlx5/mlx5_mr.c +12 -3
@@ -91,7 +91,7 @@ mlx5_check_mempool(struct rte_mempool *mp, uintptr_t *start,* Index of the next available entry. * * @return -* mr on success, NULL on failure. +* mr on success, NULL on failure and rte_errno is set. */ struct mlx5_mr * mlx5_txq_mp2mr_reg(struct mlx5_txq_data *txq, struct rte_mempool *mp,
@@ -115,6 +115,7 @@ mlx5_txq_mp2mr_reg(struct mlx5_txq_data *txq, struct rte_mempool *mp," rte_eth_dev_start()" , (void *)mp, mp->name);rte_spinlock_unlock (&txq_ctrl->priv->mr_lock); + rte_errno =ENOTSUP ;return NULL ; } mr =mlx5_mr_new (dev, mp);
@@ -203,7 +204,9 @@ mlx5_mp2mr_iter(struct rte_mempool *mp, void *arg)mlx5_mr_release (mr);return ; } -mlx5_mr_new (priv->dev, mp); + mr =mlx5_mr_new (priv->dev, mp); +if (!mr) +ERROR ("cannot create memory region: %s" ,strerror (rte_errno)); }/**
@@ -216,7 +219,7 @@ mlx5_mp2mr_iter(struct rte_mempool *mp, void *arg)* Pointer to the memory pool to register. * * @return -* The memory region on success. +* The memory region on success, NULL on failure and rte_errno is set. */ struct mlx5_mr *mlx5_mr_new (struct rte_eth_dev *dev,struct rte_mempool *mp)
@@ -231,11 +234,13 @@ mlx5_mr_new(struct rte_eth_dev *dev, struct rte_mempool *mp) mr =rte_zmalloc_socket (__func__,sizeof (*mr),0 , mp->socket_id);if (!mr) {DEBUG ("unable to configure MR, ibv_reg_mr() failed." ); + rte_errno =ENOMEM ;return NULL ; }if (mlx5_check_mempool (mp, &start, &end) !=0 ) {ERROR ("mempool %p: not virtually contiguous" , (void *)mp); + rte_errno =ENOMEM ;return NULL ; } DEBUG("mempool %p area start=%p end=%p size=%zu",
@@ -260,6 +265,10 @@ mlx5_mr_new(struct rte_eth_dev *dev, struct rte_mempool *mp) (size_t)(end - start)); mr->mr = mlx5_glue->reg_mr (priv->pd, (void *)start, end - start,IBV_ACCESS_LOCAL_WRITE ); +if (!mr->mr) { + rte_errno =ENOMEM ; +return NULL ; + } mr->mp = mp; mr->lkey =rte_cpu_to_be_32 (mr->mr->lkey);rte_atomic32_inc (&mr->refcnt);
drivers/net/mlx5/mlx5_rss.c +28 -22
128 lines not on this page · raw message
drivers/net/mlx5/mlx5_rxmode.c +24 -4
@@ -32,8 +32,13 @@void mlx5_promiscuous_enable (struct rte_eth_dev *dev) { +int ret; + dev->data->promiscuous =1 ; -mlx5_traffic_restart (dev); + ret =mlx5_traffic_restart (dev); +if (ret) +ERROR ("%p cannot enable promiscuous mode: %s" , (void *)dev, +strerror (rte_errno)); }/**
@@ -45,8 +50,13 @@ mlx5_promiscuous_enable(struct rte_eth_dev *dev)void mlx5_promiscuous_disable (struct rte_eth_dev *dev) { +int ret; + dev->data->promiscuous =0 ; -mlx5_traffic_restart (dev); + ret =mlx5_traffic_restart (dev); +if (ret) +ERROR ("%p cannot disable promiscuous mode: %s" , (void *)dev, +strerror (rte_errno)); }/**
@@ -58,8 +68,13 @@ mlx5_promiscuous_disable(struct rte_eth_dev *dev)void mlx5_allmulticast_enable (struct rte_eth_dev *dev) { +int ret; + dev->data->all_multicast =1 ; -mlx5_traffic_restart (dev); + ret =mlx5_traffic_restart (dev); +if (ret) +ERROR ("%p cannot enable allmulicast mode: %s" , (void *)dev, +strerror (rte_errno)); }/**
@@ -71,6 +86,11 @@ mlx5_allmulticast_enable(struct rte_eth_dev *dev)void mlx5_allmulticast_disable (struct rte_eth_dev *dev) { +int ret; + dev->data->all_multicast =0 ; -mlx5_traffic_restart (dev); + ret =mlx5_traffic_restart (dev); +if (ret) +ERROR ("%p cannot disable allmulicast mode: %s" , (void *)dev, +strerror (rte_errno)); }
drivers/net/mlx5/mlx5_rxq.c +85 -57
456 lines not on this page · raw message
drivers/net/mlx5/mlx5_socket.c +50 -32
212 lines not on this page · raw message
drivers/net/mlx5/mlx5_stats.c +38 -15
144 lines not on this page · raw message
drivers/net/mlx5/mlx5_trigger.c +49 -40
214 lines not on this page · raw message
drivers/net/mlx5/mlx5_txq.c +33 -21
12 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Signature · 1 line
2.11.0
Part of the diff is not shown here. View the raw message.
Re: [PATCH v3 00/10] net/mlx5: clean driver
In reply to Nelio LaranjeiroMonday, March 5, 2018 2:21 PM, Nelio Laranjeiro:
Quoted 6 lines
- Removes unused SR-IOV flag.
- Adds missing documentation on some functions.
- Removes the spin-lock on the private structure.
- Standardize the return values of all functions as discussed on the mailing list [1].
Quoted 8 lines
[1]
https://emea01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdp
dk.org%2Fml%2Farchives%2Fdev%2F2018- January%2F087991.html&data=02%7C01%7Cshahafs%40mellanox.com%7Cf0 6e83bf350d44ba5f8908d58293a839%7Ca652971c7d2e4d9ba6a4d149256f461b %7C0%7C0%7C636558493060723163&sdata=mlYhk19ixx42hzEmUguXNq8rUe H7%2F5EIAF3AJD%2F6%2FNA%3D&reserved=0
Series applied to next-net-mlx, thanks.
Re: [PATCH v3 00/10] net/mlx5: clean driver
Quoted 16 lines · Shahaf Shuler
Monday, March 5, 2018 2:21 PM, Nelio Laranjeiro:
Quoted 6 lines
- Removes unused SR-IOV flag.
- Adds missing documentation on some functions.
- Removes the spin-lock on the private structure.
- Standardize the return values of all functions as discussed on the mailing list [1].Quoted 8 lines
[1]
https://emea01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdp
dk.org%2Fml%2Farchives%2Fdev%2F2018- January%2F087991.html&data=02%7C01%7Cshahafs%40mellanox.com%7Cf0 6e83bf350d44ba5f8908d58293a839%7Ca652971c7d2e4d9ba6a4d149256f461b %7C0%7C0%7C636558493060723163&sdata=mlYhk19ixx42hzEmUguXNq8rUe H7%2F5EIAF3AJD%2F6%2FNA%3D&reserved=0
Quoted 1 line
Series applied to next-net-mlx, thanks.
This is a good cleanup thanks for the effort.