[dpdk-stable] patch 'app/testpmd: fix RSS key for flow API RSS rule' has been queued to LTS release 18.11.11

Kevin Traynor ktraynor at redhat.com
Wed Nov 18 17:35:49 CET 2020


Hi,

FYI, your patch has been queued to LTS release 18.11.11

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/24/20. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.

Queued patches are on a temporary branch at:
https://github.com/kevintraynor/dpdk-stable-queue

This queued commit can be viewed at:
https://github.com/kevintraynor/dpdk-stable-queue/commit/6bf71338501ee4f96c498896d483e637a1b29e05

Thanks.

Kevin.

---
>From 6bf71338501ee4f96c498896d483e637a1b29e05 Mon Sep 17 00:00:00 2001
From: Lijun Ou <oulijun at huawei.com>
Date: Wed, 21 Oct 2020 18:07:10 +0800
Subject: [PATCH] app/testpmd: fix RSS key for flow API RSS rule

[ upstream commit 1848b117cca159cc4e5f287876491e86e3413f21 ]

When a flow API RSS rule is issued in testpmd, device RSS key is changed
unexpectedly, device RSS key is changed to the testpmd default RSS key.

Consider the following usage with testpmd:
1. first, startup testpmd:
 testpmd> show port 0 rss-hash key
 RSS functions: all ipv4-frag ipv4-other ipv6-frag ipv6-other ip
 RSS key: 6D5A56DA255B0EC24167253D43A38FB0D0CA2BCBAE7B30B477CB2DA38030F
          20C6A42B73BBEAC01FA
2. create a rss rule
 testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end \
          actions rss types ipv4-udp end queues end / end

3. show rss-hash key
 testpmd> show port 0 rss-hash key
 RSS functions: all ipv4-udp udp
 RSS key: 74657374706D6427732064656661756C74205253532068617368206B65792
          C206F76657272696465

This is because testpmd always sends a key with the RSS rule,
if user provides a key as part of the rule that key is used, if user
doesn't provide a key, testpmd default key is sent to the PMDs, which is
causing device programmed RSS key to be changed.

There was a previous attempt to fix the same issue [1], but it has been
reverted back [2] because of the crash when 'key_len' is provided
without 'key'.

This patch follows the same approach with the initial fix [1] but also
addresses the crash.

After change, testpmd RSS key is 'NULL' by default, if user provides a
key as part of rule it is used, if not no key is sent to the PMDs at all

[1]
Commit a4391f8bae85 ("app/testpmd: set default RSS key as null")

[2]
Commit f3698c3d09a6 ("app/testpmd: revert setting default RSS")

Fixes: d0ad8648b1c5 ("app/testpmd: fix RSS flow action configuration")

Signed-off-by: Lijun Ou <oulijun at huawei.com>
Signed-off-by: Ophir Munk <ophirmu at mellanox.com>
Signed-off-by: Ferruh Yigit <ferruh.yigit at intel.com>
---
 app/test-pmd/cmdline_flow.c  | 15 ++-------------
 lib/librte_ethdev/rte_flow.c |  2 +-
 2 files changed, 3 insertions(+), 14 deletions(-)

diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
index daba39ddfc..8561310e73 100644
--- a/app/test-pmd/cmdline_flow.c
+++ b/app/test-pmd/cmdline_flow.c
@@ -3260,24 +3260,13 @@ parse_vc_action_rss(struct context *ctx, const struct token *token,
 			.level = 0,
 			.types = rss_hf,
-			.key_len = sizeof(action_rss_data->key),
+			.key_len = 0,
 			.queue_num = RTE_MIN(nb_rxq, ACTION_RSS_QUEUE_NUM),
-			.key = action_rss_data->key,
+			.key = NULL,
 			.queue = action_rss_data->queue,
 		},
-		.key = "testpmd's default RSS hash key, "
-			"override it for better balancing",
 		.queue = { 0 },
 	};
 	for (i = 0; i < action_rss_data->conf.queue_num; ++i)
 		action_rss_data->queue[i] = i;
-	if (!port_id_is_invalid(ctx->port, DISABLED_WARN) &&
-	    ctx->port != (portid_t)RTE_PORT_ALL) {
-		struct rte_eth_dev_info info;
-
-		rte_eth_dev_info_get(ctx->port, &info);
-		action_rss_data->conf.key_len =
-			RTE_MIN(sizeof(action_rss_data->key),
-				info.hash_key_size);
-	}
 	action->conf = &action_rss_data->conf;
 	return ret;
diff --git a/lib/librte_ethdev/rte_flow.c b/lib/librte_ethdev/rte_flow.c
index 7bfc06db7a..08002fcec4 100644
--- a/lib/librte_ethdev/rte_flow.c
+++ b/lib/librte_ethdev/rte_flow.c
@@ -558,5 +558,5 @@ rte_flow_conv_action_conf(void *buf, const size_t size,
 			   size > sizeof(*dst.rss) ? sizeof(*dst.rss) : size);
 		off = sizeof(*dst.rss);
-		if (src.rss->key_len) {
+		if (src.rss->key_len && src.rss->key) {
 			off = RTE_ALIGN_CEIL(off, sizeof(*dst.rss->key));
 			tmp = sizeof(*src.rss->key) * src.rss->key_len;
-- 
2.26.2

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2020-11-18 16:33:39.115406797 +0000
+++ 0063-app-testpmd-fix-RSS-key-for-flow-API-RSS-rule.patch	2020-11-18 16:33:37.989215100 +0000
@@ -1 +1 @@
-From 1848b117cca159cc4e5f287876491e86e3413f21 Mon Sep 17 00:00:00 2001
+From 6bf71338501ee4f96c498896d483e637a1b29e05 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 1848b117cca159cc4e5f287876491e86e3413f21 ]
+
@@ -47 +48,0 @@
-Cc: stable at dpdk.org
@@ -53 +54 @@
- app/test-pmd/cmdline_flow.c  | 19 ++-----------------
+ app/test-pmd/cmdline_flow.c  | 15 ++-------------
@@ -55 +56 @@
- 2 files changed, 3 insertions(+), 18 deletions(-)
+ 2 files changed, 3 insertions(+), 14 deletions(-)
@@ -58 +59 @@
-index cd35d5b9cc..3d1dd05953 100644
+index daba39ddfc..8561310e73 100644
@@ -61 +62 @@
-@@ -4851,28 +4851,13 @@ parse_vc_action_rss(struct context *ctx, const struct token *token,
+@@ -3260,24 +3260,13 @@ parse_vc_action_rss(struct context *ctx, const struct token *token,
@@ -80,5 +80,0 @@
--		int ret2;
--
--		ret2 = rte_eth_dev_info_get(ctx->port, &info);
--		if (ret2 != 0)
--			return ret2;
@@ -85,0 +82 @@
+-		rte_eth_dev_info_get(ctx->port, &info);
@@ -93 +90 @@
-index d3e5cbc194..a06f64c271 100644
+index 7bfc06db7a..08002fcec4 100644
@@ -96 +93 @@
-@@ -578,5 +578,5 @@ rte_flow_conv_action_conf(void *buf, const size_t size,
+@@ -558,5 +558,5 @@ rte_flow_conv_action_conf(void *buf, const size_t size,



More information about the stable mailing list