]> git.droids-corp.org - dpdk.git/commitdiff
net/mlx5: fix meter policy with RSS action
authorLi Zhang <lizh@nvidia.com>
Wed, 23 Jun 2021 07:24:40 +0000 (10:24 +0300)
committerRaslan Darawsheh <rasland@nvidia.com>
Thu, 8 Jul 2021 20:09:20 +0000 (22:09 +0200)
When creating the meter sub-policy RSS rule,
the RSS descriptor was used before its update.
It also need update tunnel bit in RSS descriptor
after flow translate.

Use it only when it is updated.

Fixes: ec962bad14e ("net/mlx5: fix metering cleanup on stop")
Cc: stable@dpdk.org
Signed-off-by: Li Zhang <lizh@nvidia.com>
Acked-by: Matan Azrad <matan@nvidia.com>
drivers/net/mlx5/mlx5_flow.c

index c5c767aaee1a40e0890882db72849a68061109d7..c5d4a95a8f2608093cab3410c304e8bba2d49a11 100644 (file)
@@ -4613,7 +4613,6 @@ get_meter_sub_policy(struct rte_eth_dev *dev,
                        struct mlx5_flow dev_flow = {0};
                        struct mlx5_flow_handle dev_handle = { {0} };
 
-                       rss_desc_v[i] = wks->rss_desc;
                        if (policy->is_rss) {
                                const void *rss_act =
                                        policy->act_cnt[i].rss->conf;
@@ -4641,14 +4640,19 @@ get_meter_sub_policy(struct rte_eth_dev *dev,
                                if (flow_drv_translate(dev, &dev_flow, attr,
                                                items, rss_actions, error))
                                        goto exit;
+                               rss_desc_v[i] = wks->rss_desc;
                                rss_desc_v[i].key_len = MLX5_RSS_HASH_KEY_LEN;
                                rss_desc_v[i].hash_fields =
                                                dev_flow.hash_fields;
                                rss_desc_v[i].queue_num =
                                                rss_desc_v[i].hash_fields ?
                                                rss_desc_v[i].queue_num : 1;
+                               rss_desc_v[i].tunnel =
+                                       !!(dev_flow.handle->layers &
+                                       MLX5_FLOW_LAYER_TUNNEL);
                        } else {
                                /* This is queue action. */
+                               rss_desc_v[i] = wks->rss_desc;
                                rss_desc_v[i].key_len = 0;
                                rss_desc_v[i].hash_fields = 0;
                                rss_desc_v[i].queue =