The sample flow tried to get the reserved metadata register for match implicitly, and if the reserved metadata register was invalid then back to use the application tag.
The assertion failure was caused while getting register due to the reserved metadata regC is invalid on CX-5 trusted device(VF/SF). This patch adds the checking for reserved metadata register before getting the register, to avoid assertion failure. Fixes: 9a726360dd30 ("net/mlx5: fix sample flow action on trusted device") Cc: sta...@dpdk.org Signed-off-by: Jiawei Wang <jiaw...@nvidia.com> Acked-by: Slava Ovsiienko <viachesl...@nvidia.com> --- v2: fix commit mailmap error --- drivers/net/mlx5/mlx5_flow.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c index a0cf677fb0..1768ec3cdb 100644 --- a/drivers/net/mlx5/mlx5_flow.c +++ b/drivers/net/mlx5/mlx5_flow.c @@ -6125,13 +6125,14 @@ flow_sample_split_prep(struct rte_eth_dev *dev, /* Prepare the prefix tag action. */ append_index++; set_tag = (void *)(actions_pre + actions_n + append_index); - ret = mlx5_flow_get_reg_id(dev, MLX5_SAMPLE_ID, 0, error); /* Trust VF/SF on CX5 not supported meter so that the reserved * metadata regC is REG_NON, back to use application tag * index 0. */ - if (unlikely(ret == REG_NON)) + if (unlikely(priv->mtr_color_reg == REG_NON)) ret = mlx5_flow_get_reg_id(dev, MLX5_APP_TAG, 0, error); + else + ret = mlx5_flow_get_reg_id(dev, MLX5_SAMPLE_ID, 0, error); if (ret < 0) return ret; mlx5_ipool_malloc(priv->sh->ipool -- 2.18.1