net/mlx5: fix vport index in port action
Checks
Commit Message
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 | 3 ++-
drivers/net/mlx5/mlx5_flow_dv.c | 6 +-----
2 files changed, 3 insertions(+), 6 deletions(-)
Comments
Hi,
> -----Original Message-----
> From: Viacheslav Ovsiienko <viacheslavo@mellanox.com>
> Sent: Sunday, November 17, 2019 10:48 AM
> To: dev@dpdk.org
> Cc: Matan Azrad <matan@mellanox.com>; Raslan Darawsheh
> <rasland@mellanox.com>; Ori Kam <orika@mellanox.com>
> Subject: [PATCH] net/mlx5: fix vport index in port action
>
> 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 | 3 ++-
> drivers/net/mlx5/mlx5_flow_dv.c | 6 +-----
> 2 files changed, 3 insertions(+), 6 deletions(-)
>
Patch applied to next-net-mlx,
Kindest regards,
Raslan Darawsheh
@@ -2225,7 +2225,8 @@ struct mlx5_flow_id_pool *
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"
@@ -6531,11 +6531,7 @@ struct field_modify_info modify_tcp[] = {
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;
}