From 9b1f69f9069a92f3b307d3a0e3424d9be6a5e813 Mon Sep 17 00:00:00 2001 From: Lijun Ou Date: Fri, 28 Jan 2022 10:07:04 +0800 Subject: [PATCH] net/hns3: fix RSS key with null [ upstream commit e995c91dcc426e83d4d0d6681b8d3dc0d313c655 ] Since the patch '1848b117' has initialized the variable 'key' in 'struct rte_flow_action_rss' with 'NULL', the PMD will use the default RSS key when create the first RSS rule with NULL RSS key. Then, if create a repeated RSS rule with the above, it will not identify duplicate rules and return an error message. To solve the preceding problem, determine whether the current RSS keys are the same based on whether the length of key_len of rss is 0. Fixes: 1848b117cca1 ("app/testpmd: fix RSS key for flow API RSS rule") Signed-off-by: Lijun Ou --- drivers/net/hns3/hns3_flow.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/net/hns3/hns3_flow.c b/drivers/net/hns3/hns3_flow.c index b19e5d37a9..5fc80480ba 100644 --- a/drivers/net/hns3/hns3_flow.c +++ b/drivers/net/hns3/hns3_flow.c @@ -1238,6 +1238,7 @@ static bool hns3_action_rss_same(const struct rte_flow_action_rss *comp, const struct rte_flow_action_rss *with) { + bool rss_key_is_same; bool func_is_same; /* @@ -1254,11 +1255,16 @@ hns3_action_rss_same(const struct rte_flow_action_rss *comp, func_is_same = (with->func != RTE_ETH_HASH_FUNCTION_DEFAULT) ? (comp->func == with->func) : true; - return (func_is_same && + if (with->key_len == 0 || with->key == NULL) + rss_key_is_same = 1; + else + rss_key_is_same = comp->key_len == with->key_len && + !memcmp(comp->key, with->key, with->key_len); + + return (func_is_same && rss_key_is_same && comp->types == (with->types & HNS3_ETH_RSS_SUPPORT) && - comp->level == with->level && comp->key_len == with->key_len && + comp->level == with->level && comp->queue_num == with->queue_num && - !memcmp(comp->key, with->key, with->key_len) && !memcmp(comp->queue, with->queue, sizeof(*with->queue) * with->queue_num)); }