[dpdk-dev] net/mlx5: fix generic tunnel offloading compatibility check

Message ID 20180523115937.32201-1-shahafs@mellanox.com (mailing list archive)
State Superseded, archived
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Shahaf Shuler May 23, 2018, 11:59 a.m. UTC
  On some distros, the inbox rdma-core tree can contain the Software
Parser enum while the remaining structs still missing.

Fixes: 5f8ba81c4228 ("net/mlx5: support generic tunnel offloading")
Cc: xuemingl@mellanox.com

Signed-off-by: Shahaf Shuler <shahafs@mellanox.com>
---
 drivers/net/mlx5/Makefile | 7 ++++++-
 drivers/net/mlx5/mlx5.c   | 4 ++--
 2 files changed, 8 insertions(+), 3 deletions(-)
  

Comments

Yongseok Koh May 23, 2018, 10:45 p.m. UTC | #1
On Wed, May 23, 2018 at 02:59:37PM +0300, Shahaf Shuler wrote:
> On some distros, the inbox rdma-core tree can contain the Software
> Parser enum while the remaining structs still missing.
> 
> Fixes: 5f8ba81c4228 ("net/mlx5: support generic tunnel offloading")
> Cc: xuemingl@mellanox.com
> 
> Signed-off-by: Shahaf Shuler <shahafs@mellanox.com>
> ---
>  drivers/net/mlx5/Makefile | 7 ++++++-
>  drivers/net/mlx5/mlx5.c   | 4 ++--
>  2 files changed, 8 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/mlx5/Makefile b/drivers/net/mlx5/Makefile
> index 293144e8a0..b09dd785ad 100644
> --- a/drivers/net/mlx5/Makefile
> +++ b/drivers/net/mlx5/Makefile
> @@ -118,11 +118,16 @@ mlx5_autoconf.h.new: $(RTE_SDK)/buildtools/auto-config-h.sh
>  		enum IBV_WQ_FLAG_RX_END_PADDING \
>  		$(AUTOCONF_OUTPUT)
>  	$Q sh -- '$<' '$@' \
> -		HAVE_IBV_MLX5_MOD_SWP \
> +		HAVE_IBV_MLX5_MOD_SWP_MASK \
>  		infiniband/mlx5dv.h \
>  		enum MLX5DV_CONTEXT_MASK_SWP \
>  		$(AUTOCONF_OUTPUT)
>  	$Q sh -- '$<' '$@' \
> +		HAVE_IBV_MLX5_MOD_SWP_CAPS \
> +		infiniband/mlx5dv.h \
> +		type 'struct mlx5dv_sw_parsing_caps' \
> +		$(AUTOCONF_OUTPUT)
> +	$Q sh -- '$<' '$@' \
>  		HAVE_IBV_MLX5_MOD_MPW \
>  		infiniband/mlx5dv.h \
>  		enum MLX5DV_CONTEXT_FLAGS_MPW_ALLOWED \
> diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c
> index 006665600a..91dafe93ab 100644
> --- a/drivers/net/mlx5/mlx5.c
> +++ b/drivers/net/mlx5/mlx5.c
> @@ -775,7 +775,7 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
>  	}
>  	ibv_dev = list[i];
>  	DRV_LOG(DEBUG, "device opened");
> -#ifdef HAVE_IBV_MLX5_MOD_SWP
> +#ifdef HAVE_IBV_MLX5_MOD_SWP_MASK
>  	attrs_out.comp_mask |= MLX5DV_CONTEXT_MASK_SWP;
>  #endif
>  	/*
> @@ -801,7 +801,7 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
>  		DRV_LOG(DEBUG, "MPW isn't supported");
>  		mps = MLX5_MPW_DISABLED;
>  	}
> -#ifdef HAVE_IBV_MLX5_MOD_SWP
> +#if defined(HAVE_IBV_MLX5_MOD_SWP_MASK) && defined(HAVE_IBV_MLX5_MOD_SWP_CAPS)
>  	if (attrs_out.comp_mask & MLX5DV_CONTEXT_MASK_SWP)
>  		swp = attrs_out.sw_parsing_caps.sw_parsing_offloads;
>  	DRV_LOG(DEBUG, "SWP support: %u", swp);

You mean, even if the mask is defined, the capability struct might not be
defined, right? If the capability struct is defined, is the mask always defined?
I guess so. Then, how about just checking the struct instead of enum in order to
define HAVE_IBV_MLX5_MOD_SWP, instead of splitting it into two macros?


Thanks,
Yongseok
  

Patch

diff --git a/drivers/net/mlx5/Makefile b/drivers/net/mlx5/Makefile
index 293144e8a0..b09dd785ad 100644
--- a/drivers/net/mlx5/Makefile
+++ b/drivers/net/mlx5/Makefile
@@ -118,11 +118,16 @@  mlx5_autoconf.h.new: $(RTE_SDK)/buildtools/auto-config-h.sh
 		enum IBV_WQ_FLAG_RX_END_PADDING \
 		$(AUTOCONF_OUTPUT)
 	$Q sh -- '$<' '$@' \
-		HAVE_IBV_MLX5_MOD_SWP \
+		HAVE_IBV_MLX5_MOD_SWP_MASK \
 		infiniband/mlx5dv.h \
 		enum MLX5DV_CONTEXT_MASK_SWP \
 		$(AUTOCONF_OUTPUT)
 	$Q sh -- '$<' '$@' \
+		HAVE_IBV_MLX5_MOD_SWP_CAPS \
+		infiniband/mlx5dv.h \
+		type 'struct mlx5dv_sw_parsing_caps' \
+		$(AUTOCONF_OUTPUT)
+	$Q sh -- '$<' '$@' \
 		HAVE_IBV_MLX5_MOD_MPW \
 		infiniband/mlx5dv.h \
 		enum MLX5DV_CONTEXT_FLAGS_MPW_ALLOWED \
diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c
index 006665600a..91dafe93ab 100644
--- a/drivers/net/mlx5/mlx5.c
+++ b/drivers/net/mlx5/mlx5.c
@@ -775,7 +775,7 @@  mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
 	}
 	ibv_dev = list[i];
 	DRV_LOG(DEBUG, "device opened");
-#ifdef HAVE_IBV_MLX5_MOD_SWP
+#ifdef HAVE_IBV_MLX5_MOD_SWP_MASK
 	attrs_out.comp_mask |= MLX5DV_CONTEXT_MASK_SWP;
 #endif
 	/*
@@ -801,7 +801,7 @@  mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
 		DRV_LOG(DEBUG, "MPW isn't supported");
 		mps = MLX5_MPW_DISABLED;
 	}
-#ifdef HAVE_IBV_MLX5_MOD_SWP
+#if defined(HAVE_IBV_MLX5_MOD_SWP_MASK) && defined(HAVE_IBV_MLX5_MOD_SWP_CAPS)
 	if (attrs_out.comp_mask & MLX5DV_CONTEXT_MASK_SWP)
 		swp = attrs_out.sw_parsing_caps.sw_parsing_offloads;
 	DRV_LOG(DEBUG, "SWP support: %u", swp);