]> git.droids-corp.org - dpdk.git/commitdiff
net/mlx5: add runtime parameter to enable Direct Verbs
authorOri Kam <orika@mellanox.com>
Mon, 24 Sep 2018 23:17:54 +0000 (23:17 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Thu, 11 Oct 2018 16:53:49 +0000 (18:53 +0200)
DV flow API is based on new kernel API and is
missing some functionality like counter but add other functionality
like encap.

In order not to affect current users even if the kernel supports
the new DV API it should be enabled only manually.

Signed-off-by: Ori Kam <orika@mellanox.com>
Acked-by: Yongseok Koh <yskoh@mellanox.com>
doc/guides/nics/mlx5.rst
drivers/net/mlx5/mlx5.c
drivers/net/mlx5/mlx5.h
drivers/net/mlx5/mlx5_flow.c

index dbdb90b59bb41e375e254847c10b42ccaa302ef2..67696283e51bb35541648ff737875e4a9a021a08 100644 (file)
@@ -397,6 +397,13 @@ Run-time configuration
 
   Disabled by default.
 
+- ``dv_flow_en`` parameter [int]
+
+  A nonzero value enables the DV flow steering assuming it is supported
+  by the driver.
+
+  Disabled by default.
+
 - ``representor`` parameter [list]
 
   This parameter can be used to instantiate DPDK Ethernet devices from
index 7493180afc86fc33ed09781ab902da06dd880263..e0b3717fe4a97f90dcbe374eb594b1f7eec8c5e8 100644 (file)
@@ -90,6 +90,9 @@
 /* Allow L3 VXLAN flow creation. */
 #define MLX5_L3_VXLAN_EN "l3_vxlan_en"
 
+/* Activate DV flow steering. */
+#define MLX5_DV_FLOW_EN "dv_flow_en"
+
 /* Activate Netlink support in VF mode. */
 #define MLX5_VF_NL_EN "vf_nl_en"
 
@@ -491,6 +494,8 @@ mlx5_args_check(const char *key, const char *val, void *opaque)
                config->l3_vxlan_en = !!tmp;
        } else if (strcmp(MLX5_VF_NL_EN, key) == 0) {
                config->vf_nl_en = !!tmp;
+       } else if (strcmp(MLX5_DV_FLOW_EN, key) == 0) {
+               config->dv_flow_en = !!tmp;
        } else {
                DRV_LOG(WARNING, "%s: unknown parameter", key);
                rte_errno = EINVAL;
@@ -528,6 +533,7 @@ mlx5_args(struct mlx5_dev_config *config, struct rte_devargs *devargs)
                MLX5_RX_VEC_EN,
                MLX5_L3_VXLAN_EN,
                MLX5_VF_NL_EN,
+               MLX5_DV_FLOW_EN,
                MLX5_REPRESENTOR,
                NULL,
        };
index a7c75e332b1f1dca1d9c41c75ee37a02e9a837e9..0358ee49a9e297d0e3ba0c2453138237e2ee7775 100644 (file)
@@ -111,6 +111,7 @@ struct mlx5_dev_config {
        unsigned int mpw_hdr_dseg:1; /* Enable DSEGs in the title WQEBB. */
        unsigned int l3_vxlan_en:1; /* Enable L3 VXLAN flow creation. */
        unsigned int vf_nl_en:1; /* Enable Netlink requests in VF mode. */
+       unsigned int dv_flow_en:1; /* Enable DV flow. */
        unsigned int swp:1; /* Tx generic tunnel checksum and TSO offload. */
        struct {
                unsigned int enabled:1; /* Whether MPRQ is enabled. */
index 09a8f2e0135d9ef18149ce898edd03e06fe2a691..3814eecc927daf65c839e5cc5dd93bdac236fde0 100644 (file)
@@ -2490,10 +2490,15 @@ mlx5_dev_filter_ctrl(struct rte_eth_dev *dev,
  *   Pointer to Ethernet device structure.
  */
 void
-mlx5_flow_init_driver_ops(struct rte_eth_dev *dev __rte_unused)
+mlx5_flow_init_driver_ops(struct rte_eth_dev *dev)
 {
+       struct priv *priv __rte_unused = dev->data->dev_private;
+
 #ifdef HAVE_IBV_FLOW_DV_SUPPORT
-       mlx5_flow_dv_get_driver_ops(&nic_ops);
+       if (priv->config.dv_flow_en)
+               mlx5_flow_dv_get_driver_ops(&nic_ops);
+       else
+               mlx5_flow_verbs_get_driver_ops(&nic_ops);
 #else
        mlx5_flow_verbs_get_driver_ops(&nic_ops);
 #endif