From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id BDED9A0C41 for ; Tue, 30 Nov 2021 17:39:57 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B4F0A410F7; Tue, 30 Nov 2021 17:39:57 +0100 (CET) Received: from smtp-relay-internal-1.canonical.com (smtp-relay-internal-1.canonical.com [185.125.188.123]) by mails.dpdk.org (Postfix) with ESMTP id F01BF411A7 for ; Tue, 30 Nov 2021 17:39:54 +0100 (CET) Received: from mail-ed1-f71.google.com (mail-ed1-f71.google.com [209.85.208.71]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp-relay-internal-1.canonical.com (Postfix) with ESMTPS id C9D973F044 for ; Tue, 30 Nov 2021 16:39:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1638290394; bh=oyKDYaxcde4UGtcrJTdnj+RbAbOgjPoy1g1vYcM8iTI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=qAxlcC5gYd8yMdvJ1QfuEClWSexYVA5SPiIXvgkonrBeYVtBq4J3aJaZKcomQDl67 UlaTmGXkFG7Ra6ZOfa3tagPngkDyA9jftYhIqSVromCxnTY/8Q8KhQSfn5AvDPTx5O X09A7LXlmw0czapTQMQ97UvMUMvF/R4Pv0QL7ZmjnTjamSfZqe0Yi3pGvfKro8YEgs y1aZatxNnBJXU0fmCJYWCBN+KbLlky7KeenWoZzDjAOCkWHadSZf/IS8FmDzCHgRHl PSA39gsYPUT6SYtjBRecTtN6DrO2QxkqlTzeuvZBK6x+Eggs2qKErcmosSUupRVWaw PPNmaSJesXVXQ== Received: by mail-ed1-f71.google.com with SMTP id t9-20020aa7d709000000b003e83403a5cbso17491849edq.19 for ; Tue, 30 Nov 2021 08:39:54 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=oyKDYaxcde4UGtcrJTdnj+RbAbOgjPoy1g1vYcM8iTI=; b=sYVh665LLbnfHCDz4yeVcwfQwj7o7jf+QZo0cEztNzpo3yVCTh6aRunPAC1YWBmlZp QDVEc39vW65aXg5BVJ170Nu3nRpfZGq9QI2JpWipskNGvxDDDPLPH+ZGp/wzeOITst+s Yndk8i2MT13HfeA7Hh6JkVOLoR1GRdpAuRXdqMSk+e69GVLOsT0UF4yIba3nNnWBXn+h 9tgxTlQ62RoKxGjWSt4iUbjnJ7YNkk6N5l4d1B+tzITyX7WimlQ6L+CWYZ2j6Ya9cNwX 0hfmHVtiMG+NmjFIRuVoOsdu7skvDwjx1a2JywWR7I/M4EIKmBHz6bqxAYVnz1VLasEN r1ng== X-Gm-Message-State: AOAM530rTh0MP3ukEah1Yh568wo7x9+y7EbkbSmK2fOfV5AqcOHWUUlL aAm2M9OiRYIuIHic8cVoOStstLGyughMegDm2hIQ1trgcrwbQ6zS8e/iHp/R9HNlONOzwaY+Iiq IncO5/d9WqZtbm+JrLG806a0v X-Received: by 2002:a17:907:16ac:: with SMTP id hc44mr167032ejc.363.1638290394290; Tue, 30 Nov 2021 08:39:54 -0800 (PST) X-Google-Smtp-Source: ABdhPJxPS7ERt7toM1eFNBNle9jhG1URTlYvhL4VZadLyG7TmBVfn/8IfkdA/Duv4jQUEXQPb6wdjg== X-Received: by 2002:a17:907:16ac:: with SMTP id hc44mr167009ejc.363.1638290394058; Tue, 30 Nov 2021 08:39:54 -0800 (PST) Received: from localhost.localdomain ([2001:67c:1560:8007::aac:c4ad]) by smtp.gmail.com with ESMTPSA id w5sm13073870edc.58.2021.11.30.08.39.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Nov 2021 08:39:53 -0800 (PST) From: christian.ehrhardt@canonical.com To: Chengchang Tang Cc: Min Hu , dpdk stable Subject: patch 'net/bonding: fix RSS key length' has been queued to stable release 19.11.11 Date: Tue, 30 Nov 2021 17:34:37 +0100 Message-Id: <20211130163605.2460997-73-christian.ehrhardt@canonical.com> X-Mailer: git-send-email 2.34.0 In-Reply-To: <20211130163605.2460997-1-christian.ehrhardt@canonical.com> References: <20211130163605.2460997-1-christian.ehrhardt@canonical.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Hi, FYI, your patch has been queued to stable release 19.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 December 10th 2021. 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/cpaelzer/dpdk-stable-queue This queued commit can be viewed at: https://github.com/cpaelzer/dpdk-stable-queue/commit/238751b4f5e2552c46e3138e9fa7acfd4cfa3261 Thanks. Christian Ehrhardt --- >From 238751b4f5e2552c46e3138e9fa7acfd4cfa3261 Mon Sep 17 00:00:00 2001 From: Chengchang Tang Date: Wed, 22 Sep 2021 15:09:13 +0800 Subject: [PATCH] net/bonding: fix RSS key length [ upstream commit 6b1a001ec54635d63ed3f91eaef5164abee7a089 ] Currently the hash_key_size information has not been set. So, apps can not get the key size from dev_info(), this make some problem. e.g, in testpmd, the hash_key_size will be checked before configure or get the hash key: testpmd> show port 4 rss-hash dev_info did not provide a valid hash key size testpmd> show port 4 rss-hash key dev_info did not provide a valid hash key size testpmd> port config 4 rss-hash-key ipv4 (hash key) dev_info did not provide a valid hash key size In this patch, the meaning of rss_key_len has been modified. It only indicated the length of the configured hash key before. Therefore, its value depends on the user's configuration. This seems unreasonable. And now, it indicates the minimum hash key length required by the bonded device. Its value will be the shortest hash key among all slave drivers. Fixes: 734ce47f71e0 ("bonding: support RSS dynamic configuration") Signed-off-by: Chengchang Tang Signed-off-by: Min Hu (Connor) --- drivers/net/bonding/rte_eth_bond_api.c | 6 ++++ drivers/net/bonding/rte_eth_bond_pmd.c | 44 ++++++++++++++++---------- 2 files changed, 33 insertions(+), 17 deletions(-) diff --git a/drivers/net/bonding/rte_eth_bond_api.c b/drivers/net/bonding/rte_eth_bond_api.c index 2a37dd5d61..73dfab4983 100644 --- a/drivers/net/bonding/rte_eth_bond_api.c +++ b/drivers/net/bonding/rte_eth_bond_api.c @@ -285,6 +285,7 @@ eth_bond_slave_inherit_dev_info_rx_first(struct bond_dev_private *internals, struct rte_eth_rxconf *rxconf_i = &internals->default_rxconf; internals->reta_size = di->reta_size; + internals->rss_key_len = di->hash_key_size; /* Inherit Rx offload capabilities from the first slave device */ internals->rx_offload_capa = di->rx_offload_capa; @@ -380,6 +381,11 @@ eth_bond_slave_inherit_dev_info_rx_next(struct bond_dev_private *internals, */ if (internals->reta_size > di->reta_size) internals->reta_size = di->reta_size; + if (internals->rss_key_len > di->hash_key_size) { + RTE_BOND_LOG(WARNING, "slave has different rss key size, " + "configuring rss may fail"); + internals->rss_key_len = di->hash_key_size; + } if (!internals->max_rx_pktlen && di->max_rx_pktlen < internals->candidate_max_rx_pktlen) diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c index 7e4ed477a0..735440e3a9 100644 --- a/drivers/net/bonding/rte_eth_bond_pmd.c +++ b/drivers/net/bonding/rte_eth_bond_pmd.c @@ -1702,14 +1702,11 @@ slave_configure(struct rte_eth_dev *bonded_eth_dev, /* If RSS is enabled for bonding, try to enable it for slaves */ if (bonded_eth_dev->data->dev_conf.rxmode.mq_mode & ETH_MQ_RX_RSS_FLAG) { - if (internals->rss_key_len != 0) { - slave_eth_dev->data->dev_conf.rx_adv_conf.rss_conf.rss_key_len = + /* rss_key won't be empty if RSS is configured in bonded dev */ + slave_eth_dev->data->dev_conf.rx_adv_conf.rss_conf.rss_key_len = internals->rss_key_len; - slave_eth_dev->data->dev_conf.rx_adv_conf.rss_conf.rss_key = + slave_eth_dev->data->dev_conf.rx_adv_conf.rss_conf.rss_key = internals->rss_key; - } else { - slave_eth_dev->data->dev_conf.rx_adv_conf.rss_conf.rss_key = NULL; - } slave_eth_dev->data->dev_conf.rx_adv_conf.rss_conf.rss_hf = bonded_eth_dev->data->dev_conf.rx_adv_conf.rss_conf.rss_hf; @@ -2214,6 +2211,7 @@ bond_ethdev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) dev_info->flow_type_rss_offloads = internals->flow_type_rss_offloads; dev_info->reta_size = internals->reta_size; + dev_info->hash_key_size = internals->rss_key_len; return 0; } @@ -3003,13 +3001,15 @@ bond_ethdev_rss_hash_update(struct rte_eth_dev *dev, if (bond_rss_conf.rss_hf != 0) dev->data->dev_conf.rx_adv_conf.rss_conf.rss_hf = bond_rss_conf.rss_hf; - if (bond_rss_conf.rss_key && bond_rss_conf.rss_key_len < - sizeof(internals->rss_key)) { - if (bond_rss_conf.rss_key_len == 0) - bond_rss_conf.rss_key_len = 40; - internals->rss_key_len = bond_rss_conf.rss_key_len; + if (bond_rss_conf.rss_key) { + if (bond_rss_conf.rss_key_len < internals->rss_key_len) + return -EINVAL; + else if (bond_rss_conf.rss_key_len > internals->rss_key_len) + RTE_BOND_LOG(WARNING, "rss_key will be truncated"); + memcpy(internals->rss_key, bond_rss_conf.rss_key, internals->rss_key_len); + bond_rss_conf.rss_key_len = internals->rss_key_len; } for (i = 0; i < internals->slave_count; i++) { @@ -3489,14 +3489,24 @@ bond_ethdev_configure(struct rte_eth_dev *dev) * Fall back to default RSS key if the key is not specified */ if (dev->data->dev_conf.rxmode.mq_mode & ETH_MQ_RX_RSS) { - if (dev->data->dev_conf.rx_adv_conf.rss_conf.rss_key != NULL) { - internals->rss_key_len = - dev->data->dev_conf.rx_adv_conf.rss_conf.rss_key_len; - memcpy(internals->rss_key, - dev->data->dev_conf.rx_adv_conf.rss_conf.rss_key, + struct rte_eth_rss_conf *rss_conf = + &dev->data->dev_conf.rx_adv_conf.rss_conf; + if (rss_conf->rss_key != NULL) { + if (internals->rss_key_len > rss_conf->rss_key_len) { + RTE_BOND_LOG(ERR, "Invalid rss key length(%u)", + rss_conf->rss_key_len); + return -EINVAL; + } + + memcpy(internals->rss_key, rss_conf->rss_key, internals->rss_key_len); } else { - internals->rss_key_len = sizeof(default_rss_key); + if (internals->rss_key_len > sizeof(default_rss_key)) { + RTE_BOND_LOG(ERR, + "There is no suitable default hash key"); + return -EINVAL; + } + memcpy(internals->rss_key, default_rss_key, internals->rss_key_len); } -- 2.34.0 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2021-11-30 16:50:10.166854491 +0100 +++ 0073-net-bonding-fix-RSS-key-length.patch 2021-11-30 16:50:05.758873295 +0100 @@ -1 +1 @@ -From 6b1a001ec54635d63ed3f91eaef5164abee7a089 Mon Sep 17 00:00:00 2001 +From 238751b4f5e2552c46e3138e9fa7acfd4cfa3261 Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit 6b1a001ec54635d63ed3f91eaef5164abee7a089 ] + @@ -26 +27,0 @@ -Cc: stable@dpdk.org @@ -36 +37 @@ -index eb8d15d160..5140ef14c2 100644 +index 2a37dd5d61..73dfab4983 100644 @@ -39 +40 @@ -@@ -290,6 +290,7 @@ eth_bond_slave_inherit_dev_info_rx_first(struct bond_dev_private *internals, +@@ -285,6 +285,7 @@ eth_bond_slave_inherit_dev_info_rx_first(struct bond_dev_private *internals, @@ -47 +48 @@ -@@ -385,6 +386,11 @@ eth_bond_slave_inherit_dev_info_rx_next(struct bond_dev_private *internals, +@@ -380,6 +381,11 @@ eth_bond_slave_inherit_dev_info_rx_next(struct bond_dev_private *internals, @@ -60 +61 @@ -index 542c6633b5..4c604d6aec 100644 +index 7e4ed477a0..735440e3a9 100644 @@ -63 +64 @@ -@@ -1701,14 +1701,11 @@ slave_configure(struct rte_eth_dev *bonded_eth_dev, +@@ -1702,14 +1702,11 @@ slave_configure(struct rte_eth_dev *bonded_eth_dev, @@ -81 +82 @@ -@@ -2251,6 +2248,7 @@ bond_ethdev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) +@@ -2214,6 +2211,7 @@ bond_ethdev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) @@ -89 +90 @@ -@@ -3044,13 +3042,15 @@ bond_ethdev_rss_hash_update(struct rte_eth_dev *dev, +@@ -3003,13 +3001,15 @@ bond_ethdev_rss_hash_update(struct rte_eth_dev *dev, @@ -110 +111 @@ -@@ -3510,14 +3510,24 @@ bond_ethdev_configure(struct rte_eth_dev *dev) +@@ -3489,14 +3489,24 @@ bond_ethdev_configure(struct rte_eth_dev *dev)