@@ -319,7 +319,7 @@ mlx5_dev_to_pci_str(const struct rte_device *dev, char *addr, size_t size)
* @return
* 0 on success, a negative errno value otherwise and rte_errno is set.
*/
-void
+static void
mlx5_dev_ctx_release(struct mlx5_dev_ctx *dev_ctx)
{
if (dev_ctx->pd != NULL) {
@@ -345,7 +345,7 @@ mlx5_dev_ctx_release(struct mlx5_dev_ctx *dev_ctx)
* @return
* 0 on success, a negative errno value otherwise and rte_errno is set.
*/
-int
+static int
mlx5_dev_ctx_prepare(struct mlx5_dev_ctx *dev_ctx, struct rte_device *dev,
uint32_t classes_loaded)
{
@@ -386,12 +386,36 @@ mlx5_dev_ctx_prepare(struct mlx5_dev_ctx *dev_ctx, struct rte_device *dev,
}
static void
-dev_release(struct mlx5_common_device *dev)
+mlx5_common_dev_release(struct mlx5_common_device *dev)
{
TAILQ_REMOVE(&devices_list, dev, next);
+ mlx5_dev_ctx_release(&dev->ctx);
rte_free(dev);
}
+static struct mlx5_common_device *
+mlx5_common_dev_create(struct rte_device *eal_dev, uint32_t classes)
+{
+ struct mlx5_common_device *dev;
+ int ret;
+
+ dev = rte_zmalloc("mlx5_common_device", sizeof(*dev), 0);
+ if (!dev) {
+ DRV_LOG(ERR, "Device allocation failure.");
+ rte_errno = ENOMEM;
+ return NULL;
+ }
+ ret = mlx5_dev_ctx_prepare(&dev->ctx, eal_dev, classes);
+ if (ret) {
+ DRV_LOG(ERR, "Failed to create device context.");
+ rte_free(dev);
+ return NULL;
+ }
+ dev->dev = eal_dev;
+ TAILQ_INSERT_HEAD(&devices_list, dev, next);
+ return dev;
+}
+
static int
drivers_remove(struct mlx5_common_device *dev, uint32_t enabled_classes)
{
@@ -477,11 +501,9 @@ mlx5_common_dev_probe(struct rte_device *eal_dev)
classes = MLX5_CLASS_ETH;
dev = to_mlx5_device(eal_dev);
if (!dev) {
- dev = rte_zmalloc("mlx5_common_device", sizeof(*dev), 0);
+ dev = mlx5_common_dev_create(eal_dev, classes);
if (!dev)
- return -ENOMEM;
- dev->dev = eal_dev;
- TAILQ_INSERT_HEAD(&devices_list, dev, next);
+ return -rte_errno;
new_device = true;
} else {
/* Validate combination here. */
@@ -498,7 +520,7 @@ mlx5_common_dev_probe(struct rte_device *eal_dev)
return 0;
class_err:
if (new_device)
- dev_release(dev);
+ mlx5_common_dev_release(dev);
return ret;
}
@@ -514,7 +536,7 @@ mlx5_common_dev_remove(struct rte_device *eal_dev)
/* Matching device found, cleanup and unload drivers. */
ret = drivers_remove(dev, dev->classes_loaded);
if (ret != 0)
- dev_release(dev);
+ mlx5_common_dev_release(dev);
return ret;
}
@@ -339,37 +339,9 @@ struct mlx5_common_device {
struct rte_device *dev;
TAILQ_ENTRY(mlx5_common_device) next;
uint32_t classes_loaded;
+ struct mlx5_dev_ctx ctx;
};
-/**
- * Uninitialize context device and release all its resources.
- *
- * @param dev_ctx
- * Pointer to the context device data structure.
- *
- * @return
- * 0 on success, a negative errno value otherwise and rte_errno is set.
- */
-__rte_internal
-void mlx5_dev_ctx_release(struct mlx5_dev_ctx *dev_ctx);
-
-/**
- * Initialize context device and allocate all its resources.
- *
- * @param dev_ctx
- * Pointer to the context device data structure.
- * @param dev
- * Pointer to mlx5 device structure.
- * @param classes_loaded
- * Chosen classes come from device arguments.
- *
- * @return
- * 0 on success, a negative errno value otherwise and rte_errno is set.
- */
-__rte_internal
-int mlx5_dev_ctx_prepare(struct mlx5_dev_ctx *dev_ctx, struct rte_device *dev,
- uint32_t classes_loaded);
-
/**
* Initialization function for the driver called during device probing.
*/
@@ -10,8 +10,6 @@ INTERNAL {
mlx5_common_init;
mlx5_parse_db_map_arg; # WINDOWS_NO_EXPORT
- mlx5_dev_ctx_release;
- mlx5_dev_ctx_prepare;
mlx5_common_verbs_reg_mr; # WINDOWS_NO_EXPORT
mlx5_common_verbs_dereg_mr; # WINDOWS_NO_EXPORT
@@ -751,43 +751,25 @@ static int
mlx5_compress_dev_probe(struct mlx5_common_device *dev)
{
struct rte_compressdev *cdev;
- struct mlx5_dev_ctx *dev_ctx;
+ struct mlx5_dev_ctx *dev_ctx = &dev->ctx;
struct mlx5_compress_priv *priv;
struct mlx5_hca_attr att = { 0 };
struct rte_compressdev_pmd_init_params init_params = {
.name = "",
.socket_id = dev->dev->numa_node,
};
- const char *ibdev_name;
- int ret;
+ const char *ibdev_name = mlx5_os_get_ctx_device_name(dev_ctx->ctx);
if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
DRV_LOG(ERR, "Non-primary process type is not supported.");
rte_errno = ENOTSUP;
return -rte_errno;
}
- dev_ctx = mlx5_malloc(MLX5_MEM_ZERO, sizeof(struct mlx5_dev_ctx),
- RTE_CACHE_LINE_SIZE, SOCKET_ID_ANY);
- if (dev_ctx == NULL) {
- DRV_LOG(ERR, "Device context allocation failure.");
- rte_errno = ENOMEM;
- return -rte_errno;
- }
- ret = mlx5_dev_ctx_prepare(dev_ctx, dev->dev, MLX5_CLASS_COMPRESS);
- if (ret < 0) {
- DRV_LOG(ERR, "Failed to create device context.");
- mlx5_free(dev_ctx);
- rte_errno = ENODEV;
- return -rte_errno;
- }
- ibdev_name = mlx5_os_get_ctx_device_name(dev_ctx->ctx);
if (mlx5_devx_cmd_query_hca_attr(dev_ctx->ctx, &att) != 0 ||
att.mmo_compress_en == 0 || att.mmo_decompress_en == 0 ||
att.mmo_dma_en == 0) {
DRV_LOG(ERR, "Not enough capabilities to support compress "
"operations, maybe old FW/OFED version?");
- mlx5_dev_ctx_release(dev_ctx);
- mlx5_free(dev_ctx);
rte_errno = ENOTSUP;
return -ENOTSUP;
}
@@ -795,8 +777,6 @@ mlx5_compress_dev_probe(struct mlx5_common_device *dev)
sizeof(*priv), &init_params);
if (cdev == NULL) {
DRV_LOG(ERR, "Failed to create device \"%s\".", ibdev_name);
- mlx5_dev_ctx_release(dev_ctx);
- mlx5_free(dev_ctx);
return -ENODEV;
}
DRV_LOG(INFO,
@@ -812,8 +792,6 @@ mlx5_compress_dev_probe(struct mlx5_common_device *dev)
priv->sq_ts_format = att.sq_ts_format;
if (mlx5_compress_hw_global_prepare(priv) != 0) {
rte_compressdev_pmd_destroy(priv->cdev);
- mlx5_dev_ctx_release(priv->dev_ctx);
- mlx5_free(priv->dev_ctx);
return -1;
}
if (mlx5_mr_btree_init(&priv->mr_scache.cache,
@@ -821,8 +799,6 @@ mlx5_compress_dev_probe(struct mlx5_common_device *dev)
DRV_LOG(ERR, "Failed to allocate shared cache MR memory.");
mlx5_compress_hw_global_release(priv);
rte_compressdev_pmd_destroy(priv->cdev);
- mlx5_dev_ctx_release(priv->dev_ctx);
- mlx5_free(priv->dev_ctx);
rte_errno = ENOMEM;
return -rte_errno;
}
@@ -858,8 +834,7 @@ mlx5_compress_dev_remove(struct mlx5_common_device *dev)
mlx5_mr_release_cache(&priv->mr_scache);
mlx5_compress_hw_global_release(priv);
rte_compressdev_pmd_destroy(priv->cdev);
- mlx5_dev_ctx_release(priv->dev_ctx);
- mlx5_free(priv->dev_ctx);
+ priv->dev_ctx = NULL;
}
return 0;
}
@@ -945,7 +945,7 @@ static int
mlx5_crypto_dev_probe(struct mlx5_common_device *dev)
{
struct rte_cryptodev *crypto_dev;
- struct mlx5_dev_ctx *dev_ctx;
+ struct mlx5_dev_ctx *dev_ctx = &dev->ctx;
struct mlx5_devx_obj *login;
struct mlx5_crypto_priv *priv;
struct mlx5_crypto_devarg_params devarg_prms = { 0 };
@@ -957,7 +957,7 @@ mlx5_crypto_dev_probe(struct mlx5_common_device *dev)
.max_nb_queue_pairs =
RTE_CRYPTODEV_PMD_DEFAULT_MAX_NB_QUEUE_PAIRS,
};
- const char *ibdev_name;
+ const char *ibdev_name = mlx5_os_get_ctx_device_name(dev_ctx->ctx);
uint16_t rdmw_wqe_size;
int ret;
@@ -966,51 +966,28 @@ mlx5_crypto_dev_probe(struct mlx5_common_device *dev)
rte_errno = ENOTSUP;
return -rte_errno;
}
- dev_ctx = mlx5_malloc(MLX5_MEM_ZERO, sizeof(struct mlx5_dev_ctx),
- RTE_CACHE_LINE_SIZE, SOCKET_ID_ANY);
- if (dev_ctx == NULL) {
- DRV_LOG(ERR, "Device context allocation failure.");
- rte_errno = ENOMEM;
- return -rte_errno;
- }
- ret = mlx5_dev_ctx_prepare(dev_ctx, dev->dev, MLX5_CLASS_CRYPTO);
- if (ret < 0) {
- DRV_LOG(ERR, "Failed to create device context.");
- mlx5_free(dev_ctx);
- rte_errno = ENODEV;
- return -rte_errno;
- }
- ibdev_name = mlx5_os_get_ctx_device_name(dev_ctx->ctx);
if (mlx5_devx_cmd_query_hca_attr(dev_ctx->ctx, &attr) != 0 ||
attr.crypto == 0 || attr.aes_xts == 0) {
DRV_LOG(ERR, "Not enough capabilities to support crypto "
"operations, maybe old FW/OFED version?");
- mlx5_dev_ctx_release(dev_ctx);
- mlx5_free(dev_ctx);
rte_errno = ENOTSUP;
return -ENOTSUP;
}
ret = mlx5_crypto_parse_devargs(dev->dev->devargs, &devarg_prms);
if (ret) {
DRV_LOG(ERR, "Failed to parse devargs.");
- mlx5_dev_ctx_release(dev_ctx);
- mlx5_free(dev_ctx);
return -rte_errno;
}
login = mlx5_devx_cmd_create_crypto_login_obj(dev_ctx->ctx,
&devarg_prms.login_attr);
if (login == NULL) {
DRV_LOG(ERR, "Failed to configure login.");
- mlx5_dev_ctx_release(dev_ctx);
- mlx5_free(dev_ctx);
return -rte_errno;
}
crypto_dev = rte_cryptodev_pmd_create(ibdev_name, dev->dev,
&init_params);
if (crypto_dev == NULL) {
DRV_LOG(ERR, "Failed to create device \"%s\".", ibdev_name);
- mlx5_dev_ctx_release(dev_ctx);
- mlx5_free(dev_ctx);
return -ENODEV;
}
DRV_LOG(INFO, "Crypto device %s was created successfully.", ibdev_name);
@@ -1025,8 +1002,6 @@ mlx5_crypto_dev_probe(struct mlx5_common_device *dev)
priv->crypto_dev = crypto_dev;
if (mlx5_crypto_hw_global_prepare(priv) != 0) {
rte_cryptodev_pmd_destroy(priv->crypto_dev);
- mlx5_dev_ctx_release(priv->dev_ctx);
- mlx5_free(priv->dev_ctx);
return -1;
}
if (mlx5_mr_btree_init(&priv->mr_scache.cache,
@@ -1034,8 +1009,6 @@ mlx5_crypto_dev_probe(struct mlx5_common_device *dev)
DRV_LOG(ERR, "Failed to allocate shared cache MR memory.");
mlx5_crypto_hw_global_release(priv);
rte_cryptodev_pmd_destroy(priv->crypto_dev);
- mlx5_dev_ctx_release(priv->dev_ctx);
- mlx5_free(priv->dev_ctx);
rte_errno = ENOMEM;
return -rte_errno;
}
@@ -1085,8 +1058,7 @@ mlx5_crypto_dev_remove(struct mlx5_common_device *dev)
mlx5_crypto_hw_global_release(priv);
rte_cryptodev_pmd_destroy(priv->crypto_dev);
claim_zero(mlx5_devx_cmd_destroy(priv->login_obj));
- mlx5_dev_ctx_release(priv->dev_ctx);
- mlx5_free(priv->dev_ctx);
+ priv->dev_ctx = NULL;
}
return 0;
}
@@ -2882,31 +2882,24 @@ mlx5_verbs_dev_ctx_prepare(struct mlx5_dev_ctx *dev_ctx, struct rte_device *dev)
int
mlx5_os_net_probe(struct mlx5_common_device *dev)
{
- struct mlx5_dev_ctx *dev_ctx;
+ struct mlx5_dev_ctx *dev_ctx = &dev->ctx;
uint8_t devx = 0;
int ret;
- dev_ctx = mlx5_malloc(MLX5_MEM_ZERO, sizeof(struct mlx5_dev_ctx),
- RTE_CACHE_LINE_SIZE, SOCKET_ID_ANY);
- if (dev_ctx == NULL) {
- DRV_LOG(ERR, "Device context allocation failure.");
- rte_errno = ENOMEM;
- return -rte_errno;
- }
/*
- * Initialize context device and allocate all its resources.
- * Try to do it with DV first, then usual Verbs.
+ * Context device and all its resources are created and initialized
+ * while common probing, using DevX API. When DevX isn't supported,
+ * we are trying to create them by Verbs only for net driver.
+ * Here, we check if the ctx creates successfully, and if not try to
+ * create it by Verbs.
*/
- ret = mlx5_dev_ctx_prepare(dev_ctx, dev->dev, MLX5_CLASS_ETH);
- if (ret < 0) {
- goto error;
- } else if (dev_ctx->ctx) {
+ if (dev_ctx->ctx) {
devx = 1;
DRV_LOG(DEBUG, "DevX is supported.");
} else {
ret = mlx5_verbs_dev_ctx_prepare(dev_ctx, dev->dev);
if (ret < 0)
- goto error;
+ return -rte_errno;
DRV_LOG(DEBUG, "DevX is NOT supported.");
}
if (rte_eal_process_type() == RTE_PROC_PRIMARY)
@@ -2915,19 +2908,12 @@ mlx5_os_net_probe(struct mlx5_common_device *dev)
if (ret) {
DRV_LOG(ERR, "unable to init PMD global data: %s",
strerror(rte_errno));
- goto error;
+ return -rte_errno;
}
if (mlx5_dev_is_pci(dev->dev))
- ret = mlx5_os_pci_probe(dev, dev_ctx, devx);
+ return mlx5_os_pci_probe(dev, dev_ctx, devx);
else
- ret = mlx5_os_auxiliary_probe(dev->dev, dev_ctx, devx);
- if (ret)
- goto error;
- return ret;
-error:
- mlx5_dev_ctx_release(dev_ctx);
- mlx5_free(dev_ctx);
- return ret;
+ return mlx5_os_auxiliary_probe(dev->dev, dev_ctx, devx);
}
/**
@@ -2355,33 +2355,6 @@ mlx5_eth_find_next(uint16_t port_id, struct rte_device *odev)
return port_id;
}
-/**
- * Finds the device context that match the device.
- * The existence of multiple ethdev per pci device is only with representors.
- * On such case, it is enough to get only one of the ports as they all share
- * the same device context.
- *
- * @param dev
- * Pointer to the device.
- *
- * @return
- * Pointer to the device context if found, NULL otherwise.
- */
-static struct mlx5_dev_ctx *
-mlx5_get_dev_ctx(struct rte_device *dev)
-{
- struct mlx5_priv *priv;
- uint16_t port_id;
-
- port_id = rte_eth_find_next_of(0, dev);
- if (port_id == RTE_MAX_ETHPORTS)
- return NULL;
- priv = rte_eth_devices[port_id].data->dev_private;
- if (priv == NULL)
- return NULL;
- return priv->sh->dev_ctx;
-}
-
/**
* Callback to remove a device.
*
@@ -2396,7 +2369,6 @@ mlx5_get_dev_ctx(struct rte_device *dev)
int
mlx5_net_remove(struct mlx5_common_device *dev)
{
- struct mlx5_dev_ctx *dev_ctx = mlx5_get_dev_ctx(dev->dev);
uint16_t port_id;
int ret = 0;
@@ -2411,10 +2383,6 @@ mlx5_net_remove(struct mlx5_common_device *dev)
ret |= rte_eth_dev_close(port_id);
}
- if (dev_ctx) {
- mlx5_dev_ctx_release(dev_ctx);
- mlx5_free(dev_ctx);
- }
return ret == 0 ? 0 : -EIO;
}
@@ -878,7 +878,7 @@ int
mlx5_os_net_probe(struct mlx5_common_device *dev)
{
struct rte_pci_device *pci_dev = RTE_DEV_TO_PCI(dev->dev);
- struct mlx5_dev_ctx *dev_ctx;
+ struct mlx5_dev_ctx *dev_ctx = &dev->ctx;
struct mlx5_dev_spawn_data spawn = { .pf_bond = -1 };
struct mlx5_dev_config dev_config;
unsigned int dev_config_vf;
@@ -895,16 +895,6 @@ mlx5_os_net_probe(struct mlx5_common_device *dev)
strerror(rte_errno));
return -rte_errno;
}
- dev_ctx = mlx5_malloc(MLX5_MEM_ZERO, sizeof(struct mlx5_dev_ctx),
- RTE_CACHE_LINE_SIZE, SOCKET_ID_ANY);
- if (dev_ctx == NULL) {
- DRV_LOG(ERR, "Device context allocation failure.");
- rte_errno = ENOMEM;
- return -rte_errno;
- }
- ret = mlx5_dev_ctx_prepare(dev_ctx, dev->dev, MLX5_CLASS_ETH);
- if (ret < 0)
- goto error;
memset(&spawn.info, 0, sizeof(spawn.info));
spawn.max_port = 1;
spawn.phys_port = 1;
@@ -955,20 +945,14 @@ mlx5_os_net_probe(struct mlx5_common_device *dev)
dev_config.decap_en = 0;
dev_config.log_hp_size = MLX5_ARG_UNSET;
spawn.eth_dev = mlx5_dev_spawn(dev->dev, dev_ctx, &spawn, &dev_config);
- if (!spawn.eth_dev) {
- ret = -rte_errno;
- goto error;
- }
+ if (!spawn.eth_dev)
+ return -rte_errno;
restore = spawn.eth_dev->data->dev_flags;
rte_eth_copy_pci_info(spawn.eth_dev, pci_dev);
/* Restore non-PCI flags cleared by the above call. */
spawn.eth_dev->data->dev_flags |= restore;
rte_eth_dev_probing_finish(spawn.eth_dev);
return 0;
-error:
- mlx5_dev_ctx_release(dev_ctx);
- mlx5_free(dev_ctx);
- return ret;
}
/**
@@ -125,51 +125,36 @@ static int
mlx5_regex_dev_probe(struct mlx5_common_device *mlx5_dev)
{
struct mlx5_regex_priv *priv = NULL;
- struct mlx5_dev_ctx *dev_ctx = NULL;
+ struct mlx5_dev_ctx *dev_ctx = &mlx5_dev->ctx;
struct mlx5_hca_attr attr;
char name[RTE_REGEXDEV_NAME_MAX_LEN];
- const char *ibdev_name;
+ const char *ibdev_name = mlx5_os_get_ctx_device_name(dev_ctx->ctx);
int ret;
uint32_t val;
- dev_ctx = rte_zmalloc("mlx5 context device", sizeof(*dev_ctx),
- RTE_CACHE_LINE_SIZE);
- if (dev_ctx == NULL) {
- DRV_LOG(ERR, "Device context allocation failure.");
- rte_errno = ENOMEM;
- return -rte_errno;
- }
- ret = mlx5_dev_ctx_prepare(dev_ctx, mlx5_dev->dev, MLX5_CLASS_REGEX);
- if (ret < 0) {
- DRV_LOG(ERR, "Failed to create device context.");
- rte_free(dev_ctx);
- rte_errno = ENODEV;
- return -rte_errno;
- }
- ibdev_name = mlx5_os_get_ctx_device_name(dev_ctx->ctx);
DRV_LOG(INFO, "Probe device \"%s\".", ibdev_name);
ret = mlx5_devx_cmd_query_hca_attr(dev_ctx->ctx, &attr);
if (ret) {
DRV_LOG(ERR, "Unable to read HCA capabilities.");
rte_errno = ENOTSUP;
- goto dev_error;
+ return -rte_errno;
} else if (!attr.regex || attr.regexp_num_of_engines == 0) {
DRV_LOG(ERR, "Not enough capabilities to support RegEx, maybe "
"old FW/OFED version?");
rte_errno = ENOTSUP;
- goto dev_error;
+ return -rte_errno;
}
if (mlx5_regex_engines_status(dev_ctx->ctx, 2)) {
DRV_LOG(ERR, "RegEx engine error.");
rte_errno = ENOMEM;
- goto dev_error;
+ return -rte_errno;
}
priv = rte_zmalloc("mlx5 regex device private", sizeof(*priv),
RTE_CACHE_LINE_SIZE);
if (!priv) {
DRV_LOG(ERR, "Failed to allocate private memory.");
rte_errno = ENOMEM;
- goto dev_error;
+ return -rte_errno;
}
priv->sq_ts_format = attr.sq_ts_format;
priv->dev_ctx = dev_ctx;
@@ -244,10 +229,6 @@ mlx5_regex_dev_probe(struct mlx5_common_device *mlx5_dev)
if (priv->regexdev)
rte_regexdev_unregister(priv->regexdev);
dev_error:
- if (dev_ctx) {
- mlx5_dev_ctx_release(dev_ctx);
- rte_free(dev_ctx);
- }
if (priv)
rte_free(priv);
return -rte_errno;
@@ -279,10 +260,6 @@ mlx5_regex_dev_remove(struct mlx5_common_device *mlx5_dev)
mlx5_glue->devx_free_uar(priv->uar);
if (priv->regexdev)
rte_regexdev_unregister(priv->regexdev);
- if (priv->dev_ctx) {
- mlx5_dev_ctx_release(priv->dev_ctx);
- rte_free(priv->dev_ctx);
- }
rte_free(priv);
}
return 0;
@@ -506,34 +506,19 @@ static int
mlx5_vdpa_dev_probe(struct mlx5_common_device *dev)
{
struct mlx5_vdpa_priv *priv = NULL;
- struct mlx5_dev_ctx *dev_ctx = NULL;
struct mlx5_hca_attr attr;
int ret;
- dev_ctx = mlx5_malloc(MLX5_MEM_ZERO, sizeof(struct mlx5_dev_ctx),
- RTE_CACHE_LINE_SIZE, SOCKET_ID_ANY);
- if (dev_ctx == NULL) {
- DRV_LOG(ERR, "Device context allocation failure.");
- rte_errno = ENOMEM;
- return -rte_errno;
- }
- ret = mlx5_dev_ctx_prepare(dev_ctx, dev->dev, MLX5_CLASS_VDPA);
- if (ret < 0) {
- DRV_LOG(ERR, "Failed to create device context.");
- mlx5_free(dev_ctx);
- rte_errno = ENODEV;
- return -rte_errno;
- }
- ret = mlx5_devx_cmd_query_hca_attr(dev_ctx->ctx, &attr);
+ ret = mlx5_devx_cmd_query_hca_attr(dev->ctx.ctx, &attr);
if (ret) {
DRV_LOG(ERR, "Unable to read HCA capabilities.");
rte_errno = ENOTSUP;
- goto error;
+ return -rte_errno;
} else if (!attr.vdpa.valid || !attr.vdpa.max_num_virtio_queues) {
DRV_LOG(ERR, "Not enough capabilities to support vdpa, maybe "
"old FW/OFED version?");
rte_errno = ENOTSUP;
- goto error;
+ return -rte_errno;
}
if (!attr.vdpa.queue_counters_valid)
DRV_LOG(DEBUG, "No capability to support virtq statistics.");
@@ -544,7 +529,7 @@ mlx5_vdpa_dev_probe(struct mlx5_common_device *dev)
if (!priv) {
DRV_LOG(ERR, "Failed to allocate private memory.");
rte_errno = ENOMEM;
- goto error;
+ return -rte_errno;
}
priv->caps = attr.vdpa;
priv->log_max_rqt_size = attr.log_max_rqt_size;
@@ -552,8 +537,8 @@ mlx5_vdpa_dev_probe(struct mlx5_common_device *dev)
priv->qp_ts_format = attr.qp_ts_format;
if (attr.num_lag_ports == 0)
priv->num_lag_ports = 1;
- priv->dev_ctx = dev_ctx;
- priv->var = mlx5_glue->dv_alloc_var(dev_ctx->ctx, 0);
+ priv->dev_ctx = &dev->ctx;
+ priv->var = mlx5_glue->dv_alloc_var(priv->dev_ctx->ctx, 0);
if (!priv->var) {
DRV_LOG(ERR, "Failed to allocate VAR %u.", errno);
goto error;
@@ -578,10 +563,6 @@ mlx5_vdpa_dev_probe(struct mlx5_common_device *dev)
mlx5_glue->dv_free_var(priv->var);
rte_free(priv);
}
- if (dev_ctx) {
- mlx5_dev_ctx_release(dev_ctx);
- mlx5_free(dev_ctx);
- }
return -rte_errno;
}
@@ -610,10 +591,6 @@ mlx5_vdpa_dev_remove(struct mlx5_common_device *dev)
}
if (priv->vdev)
rte_vdpa_unregister_device(priv->vdev);
- if (priv->dev_ctx) {
- mlx5_dev_ctx_release(priv->dev_ctx);
- mlx5_free(priv->dev_ctx);
- }
pthread_mutex_destroy(&priv->vq_config_lock);
rte_free(priv);
}