net/mlx5: fix vport index in port action
authorViacheslav Ovsiienko <viacheslavo@mellanox.com>
Sun, 17 Nov 2019 08:48:26 +0000 (08:48 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Wed, 20 Nov 2019 16:36:06 +0000 (17:36 +0100)
The rdma_core routine mlx5dv_dr_create_flow_action_dest_vport()
requires the vport id parameter to create port action.
The register c[0] value was used to deduce the port id value
and it fails in bonding configuration. The correct way is
to apply vport_num value queried from the rdma_core library.

Fixes: f07341e7aed3 ("net/mlx5: update source and destination vport translations")

Signed-off-by: Viacheslav Ovsiienko <viacheslavo@mellanox.com>
drivers/net/mlx5/mlx5.c
drivers/net/mlx5/mlx5_flow_dv.c

index d9da6f8..b686129 100644 (file)
@@ -2343,7 +2343,8 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev,
                        err = ENOTSUP;
                        goto error;
                }
-       } else if (devx_port.comp_mask & MLX5DV_DEVX_PORT_VPORT) {
+       }
+       if (devx_port.comp_mask & MLX5DV_DEVX_PORT_VPORT) {
                priv->vport_id = devx_port.vport_num;
        } else if (spawn->pf_bond >= 0) {
                DRV_LOG(ERR, "can't deduce vport index for port %d"
index 42f36cc..c9dbd89 100644 (file)
@@ -6501,11 +6501,7 @@ flow_dv_translate_action_port_id(struct rte_eth_dev *dev,
                                          RTE_FLOW_ERROR_TYPE_ACTION,
                                          NULL,
                                          "No eswitch info was found for port");
-       if (priv->vport_meta_mask)
-               *dst_port_id = priv->vport_meta_tag >>
-                       rte_bsf32(priv->vport_meta_mask);
-       else
-               *dst_port_id = priv->vport_id;
+       *dst_port_id = priv->vport_id;
        return 0;
 }