Message ID | 1605883683-11576-1-git-send-email-viacheslavo@nvidia.com |
---|---|
State | Accepted, archived |
Delegated to: | Raslan Darawsheh |
Headers | show |
Series |
|
Related | show |
Context | Check | Description |
---|---|---|
ci/travis-robot | success | Travis build: passed |
ci/iol-testing | warning | Testing issues |
ci/Intel-compilation | success | Compilation OK |
ci/iol-mellanox-Performance | success | Performance Testing PASS |
ci/iol-intel-Performance | success | Performance Testing PASS |
ci/iol-intel-Functional | success | Functional Testing PASS |
ci/iol-broadcom-Functional | success | Functional Testing PASS |
ci/iol-broadcom-Performance | success | Performance Testing PASS |
ci/checkpatch | success | coding style OK |
Hi, > -----Original Message----- > From: Viacheslav Ovsiienko <viacheslavo@nvidia.com> > Sent: Friday, November 20, 2020 4:48 PM > To: dev@dpdk.org > Cc: Raslan Darawsheh <rasland@nvidia.com>; Matan Azrad > <matan@nvidia.com>; Ori Kam <orika@nvidia.com>; NBU-Contact-Thomas > Monjalon <thomas@monjalon.net>; xiangxia.m.yue@gmail.com; > stable@dpdk.org > Subject: [PATCH v3] net/mlx5: check the reg available for metadata action > > From: Tonghao Zhang <xiangxia.m.yue@gmail.com> > > If user don't set the dv_xmeta_en to 1 or 2, > in the flow_dv_convert_action_set_meta function: > > - flow_dv_get_metadata_reg may return the REG_NONE, > when MLX5_METADATA_FDB enabled for metadata set action. > > - reg_to_field(REG_NONE) returns MLX5_MODI_OUT_NONE, > that is invalid and rdma-core fails. > > The rdma-core calltrace: > dr_action_create_modify_action > dr_actions_convert_modify_header > dr_action_modify_sw_to_hw > dr_action_modify_sw_to_hw_set > dr_ste_get_modify_hdr_hw_field > > Fixes: fcc8d2f716fd ("net/mlx5: extend flow metadata support") > Cc: stable@dpdk.org > > Signed-off-by: Tonghao Zhang <xiangxia.m.yue@gmail.com> > Signed-off-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com> > --- Patch applied to next-net-mlx, Kindest regards, Raslan Darawsheh
diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c index fa2e8f2..bee22f5 100644 --- a/drivers/net/mlx5/mlx5_flow_dv.c +++ b/drivers/net/mlx5/mlx5_flow_dv.c @@ -1217,6 +1217,7 @@ struct field_modify_info modify_tcp[] = { if (reg < 0) return reg; + MLX5_ASSERT(reg != REG_NON); /* * In datapath code there is no endianness * coversions for perfromance reasons, all @@ -1438,6 +1439,10 @@ struct field_modify_info modify_tcp[] = { reg = flow_dv_get_metadata_reg(dev, attr, error); if (reg < 0) return reg; + if (reg == REG_NON) + return rte_flow_error_set(error, ENOTSUP, + RTE_FLOW_ERROR_TYPE_ITEM, item, + "unavalable extended metadata register"); if (reg == REG_B) return rte_flow_error_set(error, ENOTSUP, RTE_FLOW_ERROR_TYPE_ITEM, item, @@ -2446,6 +2451,10 @@ struct field_modify_info modify_tcp[] = { reg = flow_dv_get_metadata_reg(dev, attr, error); if (reg < 0) return reg; + if (reg == REG_NON) + return rte_flow_error_set(error, ENOTSUP, + RTE_FLOW_ERROR_TYPE_ACTION, action, + "unavalable extended metadata register"); if (reg != REG_A && reg != REG_B) { struct mlx5_priv *priv = dev->data->dev_private; @@ -7471,6 +7480,7 @@ struct mlx5_hlist_entry * reg = flow_dv_get_metadata_reg(dev, attr, NULL); if (reg < 0) return; + MLX5_ASSERT(reg != REG_NON); /* * In datapath code there is no endianness * coversions for perfromance reasons, all