[dpdk-dev] [RFC PATCH 2/6] common/mlx5: use class enable check helper function
Parav Pandit
parav at mellanox.com
Wed Jun 10 19:17:24 CEST 2020
Currently mlx5_class_get() returns enabled single valid class.
To support multiple class and to improve readability of code, change it
to mlx5_class_enabled().
With this function, each class enablement can be checked, to load class
specific driver.
Signed-off-by: Parav Pandit <parav at mellanox.com>
---
drivers/common/mlx5/mlx5_common.c | 12 +++++++-----
drivers/common/mlx5/mlx5_common.h | 5 +++--
drivers/common/mlx5/rte_common_mlx5_version.map | 2 +-
drivers/net/mlx5/linux/mlx5_os.c | 3 ++-
drivers/vdpa/mlx5/mlx5_vdpa.c | 2 +-
5 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/drivers/common/mlx5/mlx5_common.c b/drivers/common/mlx5/mlx5_common.c
index db94d4aa8..96c415842 100644
--- a/drivers/common/mlx5/mlx5_common.c
+++ b/drivers/common/mlx5/mlx5_common.c
@@ -37,22 +37,24 @@ mlx5_class_check_handler(__rte_unused const char *key, const char *value,
return 0;
}
-enum mlx5_class
-mlx5_class_get(struct rte_devargs *devargs)
+bool
+mlx5_class_enabled(const struct rte_devargs *devargs, enum mlx5_class dev_class)
{
struct rte_kvargs *kvlist;
const char *key = MLX5_CLASS_ARG_NAME;
+ /* Default NET CLASS is enabled if user didn't specify the class */
enum mlx5_class ret = MLX5_CLASS_NET;
if (devargs == NULL)
- return ret;
+ return dev_class == MLX5_CLASS_NET ? true : false;
kvlist = rte_kvargs_parse(devargs->args, NULL);
if (kvlist == NULL)
- return ret;
+ return dev_class == MLX5_CLASS_NET ? true : false;
if (rte_kvargs_count(kvlist, key))
rte_kvargs_process(kvlist, key, mlx5_class_check_handler, &ret);
rte_kvargs_free(kvlist);
- return ret;
+
+ return (ret & dev_class) ? true : false;
}
diff --git a/drivers/common/mlx5/mlx5_common.h b/drivers/common/mlx5/mlx5_common.h
index 8e679c699..1d59873c8 100644
--- a/drivers/common/mlx5/mlx5_common.h
+++ b/drivers/common/mlx5/mlx5_common.h
@@ -202,13 +202,14 @@ int mlx5_dev_to_pci_addr(const char *dev_path, struct rte_pci_addr *pci_addr);
#define MLX5_CLASS_ARG_NAME "class"
enum mlx5_class {
+ MLX5_CLASS_INVALID,
MLX5_CLASS_NET,
MLX5_CLASS_VDPA,
- MLX5_CLASS_INVALID,
};
__rte_internal
-enum mlx5_class mlx5_class_get(struct rte_devargs *devargs);
+bool mlx5_class_enabled(const struct rte_devargs *devargs,
+ enum mlx5_class dev_class);
__rte_internal
void mlx5_translate_port_name(const char *port_name_in,
struct mlx5_switch_info *port_info_out);
diff --git a/drivers/common/mlx5/rte_common_mlx5_version.map b/drivers/common/mlx5/rte_common_mlx5_version.map
index 350e77140..01fa0cc25 100644
--- a/drivers/common/mlx5/rte_common_mlx5_version.map
+++ b/drivers/common/mlx5/rte_common_mlx5_version.map
@@ -1,7 +1,7 @@
INTERNAL {
global:
- mlx5_class_get;
+ mlx5_class_enabled;
mlx5_create_mr_ext;
diff --git a/drivers/net/mlx5/linux/mlx5_os.c b/drivers/net/mlx5/linux/mlx5_os.c
index 92422dbe6..06772b7ae 100644
--- a/drivers/net/mlx5/linux/mlx5_os.c
+++ b/drivers/net/mlx5/linux/mlx5_os.c
@@ -1377,11 +1377,12 @@ mlx5_os_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
struct mlx5_dev_config dev_config;
int ret;
- if (mlx5_class_get(pci_dev->device.devargs) != MLX5_CLASS_NET) {
+ if (!mlx5_class_enabled(pci_dev->device.devargs, MLX5_CLASS_NET)) {
DRV_LOG(DEBUG, "Skip probing - should be probed by other mlx5"
" driver.");
return 1;
}
+
if (rte_eal_process_type() == RTE_PROC_PRIMARY)
mlx5_pmd_socket_init();
ret = mlx5_init_once();
diff --git a/drivers/vdpa/mlx5/mlx5_vdpa.c b/drivers/vdpa/mlx5/mlx5_vdpa.c
index 1113d6cef..96776b64e 100644
--- a/drivers/vdpa/mlx5/mlx5_vdpa.c
+++ b/drivers/vdpa/mlx5/mlx5_vdpa.c
@@ -451,7 +451,7 @@ mlx5_vdpa_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
struct mlx5_hca_attr attr;
int ret;
- if (mlx5_class_get(pci_dev->device.devargs) != MLX5_CLASS_VDPA) {
+ if (!mlx5_class_enabled(pci_dev->device.devargs, MLX5_CLASS_VDPA)) {
DRV_LOG(DEBUG, "Skip probing - should be probed by other mlx5"
" driver.");
return 1;
--
2.25.4
More information about the dev
mailing list