net/mlx5: fix no-green metering with RSS
authorShun Hao <shunh@nvidia.com>
Thu, 14 Apr 2022 07:55:20 +0000 (10:55 +0300)
committerRaslan Darawsheh <rasland@nvidia.com>
Wed, 11 May 2022 07:45:23 +0000 (09:45 +0200)
When a meter with RSS action being used, there might be several
sub-flows using different sub-policies in the flow splitting stage.
If there's no green action, there's an error that will always use the
same sub-policy for all sub-flows, some resources will be
overwritten and cannot be released, leading assert during port close.

This patch fixes this issue by checking both green and yellow queue
index during getting a blank sub-policy, to avoid the incorrect
resource overwrite.

Fixes: b38a12272b3a ("net/mlx5: split meter color policy handling")
Cc: stable@dpdk.org
Signed-off-by: Shun Hao <shunh@nvidia.com>
Acked-by: Matan Azrad <matan@nvidia.com>
drivers/net/mlx5/mlx5_flow_dv.c

index cb5006b..f9c5620 100644 (file)
@@ -17054,7 +17054,8 @@ __flow_dv_meter_get_rss_sub_policy(struct rte_eth_dev *dev,
                }
        }
        /* Create sub policy. */
-       if (!mtr_policy->sub_policys[domain][0]->rix_hrxq[0]) {
+       if (!mtr_policy->sub_policys[domain][0]->rix_hrxq[RTE_COLOR_GREEN] &&
+           !mtr_policy->sub_policys[domain][0]->rix_hrxq[RTE_COLOR_YELLOW]) {
                /* Reuse the first pre-allocated sub_policy. */
                sub_policy = mtr_policy->sub_policys[domain][0];
                sub_policy_idx = sub_policy->idx;