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 3E0ABA0032 for ; Fri, 18 Feb 2022 13:40:59 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 37D2340141; Fri, 18 Feb 2022 13:40:59 +0100 (CET) Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) by mails.dpdk.org (Postfix) with ESMTP id 7FB5C40141 for ; Fri, 18 Feb 2022 13:40:58 +0100 (CET) Received: by mail-wr1-f51.google.com with SMTP id v12so14414434wrv.2 for ; Fri, 18 Feb 2022 04:40:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=KqRg1qge8/ik93G3q45z1W6XjDq83DebQsl5ZFlB0JU=; b=djV1SMhUF1jpDOJbC5g0luZhhdzkmHnGlA98JST/DLnWimdGleHdEo5RjuR/LyCPES SlEt1AE1+hMhOpZocuo17i8MJXQIJAwaJgE5M9d+6m+PsomktGXbWZl2FfSRklG3N+rb DLmoOgObDPDuU9sguP0aryndW48SFZjEX08Py/tP6gLXgWasXJRwnd8k3ACBkdnpOFFS H26VGWDN8UXmoduTTQeCUOPZ/PuGzY4J7QCG6GnWp3I9iRCbZlUcYZ/7fbrtrRzn5mii vGmaiReJnmOSqY/CuI8TlE4Z1f6gqa0dcZMF0u7JvSpLDVesE1dsIjW8rnQOe8zaohOn qMCQ== 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=KqRg1qge8/ik93G3q45z1W6XjDq83DebQsl5ZFlB0JU=; b=AIKQGgTjpXinUC/f3KBqfG5x+l77mnl3Az/wNhHhNOJFP0QuRCwRaHPbXKD21qvRD+ yV28mqtemIJJvhIcP09AVmx2X8Ejf86p7rsb8lLLqYWmhPG8/yQ18FiMRsIbHbZ771cl faQtQBEci1MruiXdEhEUQq2hqY9GFTgeDSpDgxcLeyzajFWhqiu5NbxgBHeZWbrD+tih fDPBiQfBjbG5cUwcHr7PFn2Bvj1fGnzHPZBx8Pw8IV+2fq/bX0zkY5Lh9U4wTRYsKVGy 7D6fIkbuaWSf/H94k9cqx1bzwMATFV3tsoYe+/BCMVJCuIMzjbo81bav83AQOMiU3HnK 7fcg== X-Gm-Message-State: AOAM533fP3qGuDdYOiTRz7l6hfv70aX0pRJcEdMV8fssXF51Ph2agP3P YlIWnGqD5oEGePYK6HWWg8Kdfk7te3JRhBNF X-Google-Smtp-Source: ABdhPJz/FuCagT+BKZR62t8eEAv3OH85nzUycGjnnsur0AF7PhplRcrH6yn1l0cjn3Ll5scS40nn3Q== X-Received: by 2002:adf:8030:0:b0:1e3:2f93:477c with SMTP id 45-20020adf8030000000b001e32f93477cmr6057862wrk.462.1645188058175; Fri, 18 Feb 2022 04:40:58 -0800 (PST) Received: from localhost ([2a01:4b00:f41a:3600:360b:9754:2e3a:c344]) by smtp.gmail.com with ESMTPSA id d29sm5368983wra.63.2022.02.18.04.40.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 18 Feb 2022 04:40:57 -0800 (PST) From: luca.boccassi@gmail.com To: Kalesh AP Cc: Ajit Khaparde , Somnath Kotur , dpdk stable Subject: patch 'net/bnxt: restore RSS configuration after reset recovery' has been queued to stable release 20.11.5 Date: Fri, 18 Feb 2022 12:37:55 +0000 Message-Id: <20220218123931.1749595-26-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220218123931.1749595-1-luca.boccassi@gmail.com> References: <20220218123931.1749595-1-luca.boccassi@gmail.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 20.11.5 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 02/20/22. 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/bluca/dpdk-stable This queued commit can be viewed at: https://github.com/bluca/dpdk-stable/commit/7275db81e80e36759e092cdf368833dcc6d3c4e0 Thanks. Luca Boccassi --- >From 7275db81e80e36759e092cdf368833dcc6d3c4e0 Mon Sep 17 00:00:00 2001 From: Kalesh AP Date: Tue, 4 Jan 2022 14:08:10 +0530 Subject: [PATCH] net/bnxt: restore RSS configuration after reset recovery [ upstream commit 9b4353bec3d17d241e511f7d6917417fd395c462 ] During reset recovery, driver is not restoring the VNIC rss hash key. It's generating a new random hash key which results in unexpected RSS behavior after recovery. Fixed this by storing the VNIC RSS configuration to a local struct and then applying the cached value during the recovery. Fixes: df6cd7c1f73a ("net/bnxt: handle reset notify async event from FW") Signed-off-by: Kalesh AP Reviewed-by: Ajit Khaparde Reviewed-by: Somnath Kotur --- drivers/net/bnxt/bnxt.h | 2 ++ drivers/net/bnxt/bnxt_ethdev.c | 36 ++++++++++++++++++++++++++++++---- drivers/net/bnxt/bnxt_rxq.c | 2 +- drivers/net/bnxt/bnxt_vnic.c | 9 +++++++-- drivers/net/bnxt/bnxt_vnic.h | 2 +- 5 files changed, 43 insertions(+), 8 deletions(-) diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h index 823a764191..b37b338349 100644 --- a/drivers/net/bnxt/bnxt.h +++ b/drivers/net/bnxt/bnxt.h @@ -859,6 +859,8 @@ struct bnxt { struct rte_ether_addr *mcast_addr_list; rte_iova_t mc_list_dma_addr; uint32_t nb_mc_addr; + + struct rte_eth_rss_conf rss_conf; /* RSS configuration. */ }; static diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c index 6c224583c6..0c00f25f5b 100644 --- a/drivers/net/bnxt/bnxt_ethdev.c +++ b/drivers/net/bnxt/bnxt_ethdev.c @@ -379,7 +379,7 @@ static int bnxt_alloc_mem(struct bnxt *bp, bool reconfig) if (rc) goto alloc_mem_err; - rc = bnxt_alloc_vnic_attributes(bp); + rc = bnxt_alloc_vnic_attributes(bp, reconfig); if (rc) goto alloc_mem_err; @@ -1074,6 +1074,7 @@ static int bnxt_dev_configure_op(struct rte_eth_dev *eth_dev) { struct bnxt *bp = eth_dev->data->dev_private; uint64_t rx_offloads = eth_dev->data->dev_conf.rxmode.offloads; + struct rte_eth_rss_conf *rss_conf = ð_dev->data->dev_conf.rx_adv_conf.rss_conf; int rc; bp->rx_queues = (void *)eth_dev->data->rx_queues; @@ -1155,6 +1156,18 @@ static int bnxt_dev_configure_op(struct rte_eth_dev *eth_dev) BNXT_NUM_VLANS; bnxt_mtu_set_op(eth_dev, eth_dev->data->mtu); } + + /* application provides the hash key to program */ + if (rss_conf->rss_key != NULL) { + if (rss_conf->rss_key_len != HW_HASH_KEY_SIZE) + PMD_DRV_LOG(WARNING, "port %u RSS key len must be %d bytes long", + eth_dev->data->port_id, HW_HASH_KEY_SIZE); + else + memcpy(bp->rss_conf.rss_key, rss_conf->rss_key, HW_HASH_KEY_SIZE); + } + bp->rss_conf.rss_key_len = HW_HASH_KEY_SIZE; + bp->rss_conf.rss_hf = rss_conf->rss_hf; + return 0; resource_error: @@ -2066,9 +2079,6 @@ static int bnxt_rss_hash_update_op(struct rte_eth_dev *eth_dev, } bp->flags |= BNXT_FLAG_UPDATE_HASH; - memcpy(ð_dev->data->dev_conf.rx_adv_conf.rss_conf, - rss_conf, - sizeof(*rss_conf)); /* Update the default RSS VNIC(s) */ vnic = BNXT_GET_DEFAULT_VNIC(bp); @@ -2077,6 +2087,9 @@ static int bnxt_rss_hash_update_op(struct rte_eth_dev *eth_dev, bnxt_rte_to_hwrm_hash_level(bp, rss_conf->rss_hf, ETH_RSS_LEVEL(rss_conf->rss_hf)); + /* Cache the hash function */ + bp->rss_conf.rss_hf = rss_conf->rss_hf; + /* * If hashkey is not specified, use the previously configured * hashkey @@ -2092,6 +2105,9 @@ static int bnxt_rss_hash_update_op(struct rte_eth_dev *eth_dev, } memcpy(vnic->rss_hash_key, rss_conf->rss_key, rss_conf->rss_key_len); + /* Cache the hash key */ + memcpy(bp->rss_conf.rss_key, rss_conf->rss_key, HW_HASH_KEY_SIZE); + rss_config: rc = bnxt_hwrm_vnic_rss_cfg(bp, vnic); return rc; @@ -5201,6 +5217,16 @@ static int bnxt_init_resources(struct bnxt *bp, bool reconfig_dev) } } + if (!reconfig_dev) { + bp->rss_conf.rss_key = rte_zmalloc("bnxt_rss_key", + HW_HASH_KEY_SIZE, 0); + if (bp->rss_conf.rss_key == NULL) { + PMD_DRV_LOG(ERR, "port %u cannot allocate RSS hash key memory", + bp->eth_dev->data->port_id); + return -ENOMEM; + } + } + rc = bnxt_alloc_mem(bp, reconfig_dev); if (rc) return rc; @@ -5852,6 +5878,8 @@ bnxt_uninit_resources(struct bnxt *bp, bool reconfig_dev) bnxt_free_error_recovery_info(bp); rte_free(bp->mcast_addr_list); bp->mcast_addr_list = NULL; + rte_free(bp->rss_conf.rss_key); + bp->rss_conf.rss_key = NULL; } bnxt_uninit_ctx_mem(bp); diff --git a/drivers/net/bnxt/bnxt_rxq.c b/drivers/net/bnxt/bnxt_rxq.c index aa73bd25e1..e057393b2b 100644 --- a/drivers/net/bnxt/bnxt_rxq.c +++ b/drivers/net/bnxt/bnxt_rxq.c @@ -137,7 +137,7 @@ skip_filter_allocation: bp->rx_num_qs_per_vnic = nb_q_per_grp; if (dev_conf->rxmode.mq_mode & ETH_MQ_RX_RSS_FLAG) { - struct rte_eth_rss_conf *rss = &dev_conf->rx_adv_conf.rss_conf; + struct rte_eth_rss_conf *rss = &bp->rss_conf; if (bp->flags & BNXT_FLAG_UPDATE_HASH) bp->flags &= ~BNXT_FLAG_UPDATE_HASH; diff --git a/drivers/net/bnxt/bnxt_vnic.c b/drivers/net/bnxt/bnxt_vnic.c index 53db277ead..f18e672dca 100644 --- a/drivers/net/bnxt/bnxt_vnic.c +++ b/drivers/net/bnxt/bnxt_vnic.c @@ -114,7 +114,7 @@ void bnxt_free_vnic_attributes(struct bnxt *bp) } } -int bnxt_alloc_vnic_attributes(struct bnxt *bp) +int bnxt_alloc_vnic_attributes(struct bnxt *bp, bool reconfig) { struct bnxt_vnic_info *vnic; struct rte_pci_device *pdev = bp->pdev; @@ -168,7 +168,12 @@ int bnxt_alloc_vnic_attributes(struct bnxt *bp) vnic->rss_hash_key_dma_addr = vnic->rss_table_dma_addr + rss_table_size; - bnxt_prandom_bytes(vnic->rss_hash_key, HW_HASH_KEY_SIZE); + if (!reconfig) { + bnxt_prandom_bytes(vnic->rss_hash_key, HW_HASH_KEY_SIZE); + memcpy(bp->rss_conf.rss_key, vnic->rss_hash_key, HW_HASH_KEY_SIZE); + } else { + memcpy(vnic->rss_hash_key, bp->rss_conf.rss_key, HW_HASH_KEY_SIZE); + } } return 0; diff --git a/drivers/net/bnxt/bnxt_vnic.h b/drivers/net/bnxt/bnxt_vnic.h index b5bba81fcf..785db8f0cd 100644 --- a/drivers/net/bnxt/bnxt_vnic.h +++ b/drivers/net/bnxt/bnxt_vnic.h @@ -60,7 +60,7 @@ int bnxt_free_vnic(struct bnxt *bp, struct bnxt_vnic_info *vnic, struct bnxt_vnic_info *bnxt_alloc_vnic(struct bnxt *bp); void bnxt_free_all_vnics(struct bnxt *bp); void bnxt_free_vnic_attributes(struct bnxt *bp); -int bnxt_alloc_vnic_attributes(struct bnxt *bp); +int bnxt_alloc_vnic_attributes(struct bnxt *bp, bool reconfig); void bnxt_free_vnic_mem(struct bnxt *bp); int bnxt_alloc_vnic_mem(struct bnxt *bp); int bnxt_vnic_grp_alloc(struct bnxt *bp, struct bnxt_vnic_info *vnic); -- 2.30.2 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2022-02-18 12:37:39.155907409 +0000 +++ 0026-net-bnxt-restore-RSS-configuration-after-reset-recov.patch 2022-02-18 12:37:37.586789597 +0000 @@ -1 +1 @@ -From 9b4353bec3d17d241e511f7d6917417fd395c462 Mon Sep 17 00:00:00 2001 +From 7275db81e80e36759e092cdf368833dcc6d3c4e0 Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit 9b4353bec3d17d241e511f7d6917417fd395c462 ] + @@ -13 +14,0 @@ -Cc: stable@dpdk.org @@ -20 +21 @@ - drivers/net/bnxt/bnxt_ethdev.c | 35 ++++++++++++++++++++++++++++++---- + drivers/net/bnxt/bnxt_ethdev.c | 36 ++++++++++++++++++++++++++++++---- @@ -24 +25 @@ - 5 files changed, 42 insertions(+), 8 deletions(-) + 5 files changed, 43 insertions(+), 8 deletions(-) @@ -27 +28 @@ -index 521fcb7af3..614ea57d87 100644 +index 823a764191..b37b338349 100644 @@ -30 +31 @@ -@@ -896,6 +896,8 @@ struct bnxt { +@@ -859,6 +859,8 @@ struct bnxt { @@ -40 +41 @@ -index bac96001a4..dcf2839215 100644 +index 6c224583c6..0c00f25f5b 100644 @@ -43 +44 @@ -@@ -368,7 +368,7 @@ static int bnxt_alloc_mem(struct bnxt *bp, bool reconfig) +@@ -379,7 +379,7 @@ static int bnxt_alloc_mem(struct bnxt *bp, bool reconfig) @@ -52 +53 @@ -@@ -1067,6 +1067,7 @@ static int bnxt_dev_configure_op(struct rte_eth_dev *eth_dev) +@@ -1074,6 +1074,7 @@ static int bnxt_dev_configure_op(struct rte_eth_dev *eth_dev) @@ -60,4 +61,5 @@ -@@ -1141,6 +1142,17 @@ static int bnxt_dev_configure_op(struct rte_eth_dev *eth_dev) - rx_offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH; - eth_dev->data->dev_conf.rxmode.offloads = rx_offloads; - +@@ -1155,6 +1156,18 @@ static int bnxt_dev_configure_op(struct rte_eth_dev *eth_dev) + BNXT_NUM_VLANS; + bnxt_mtu_set_op(eth_dev, eth_dev->data->mtu); + } ++ @@ -75,2 +76,0 @@ - bnxt_mtu_set_op(eth_dev, eth_dev->data->mtu); - @@ -78 +78,3 @@ -@@ -2126,9 +2138,6 @@ static int bnxt_rss_hash_update_op(struct rte_eth_dev *eth_dev, + + resource_error: +@@ -2066,9 +2079,6 @@ static int bnxt_rss_hash_update_op(struct rte_eth_dev *eth_dev, @@ -88 +90 @@ -@@ -2137,6 +2146,9 @@ static int bnxt_rss_hash_update_op(struct rte_eth_dev *eth_dev, +@@ -2077,6 +2087,9 @@ static int bnxt_rss_hash_update_op(struct rte_eth_dev *eth_dev, @@ -90 +92 @@ - RTE_ETH_RSS_LEVEL(rss_conf->rss_hf)); + ETH_RSS_LEVEL(rss_conf->rss_hf)); @@ -98 +100 @@ -@@ -2152,6 +2164,9 @@ static int bnxt_rss_hash_update_op(struct rte_eth_dev *eth_dev, +@@ -2092,6 +2105,9 @@ static int bnxt_rss_hash_update_op(struct rte_eth_dev *eth_dev, @@ -108 +110 @@ -@@ -5304,6 +5319,16 @@ static int bnxt_init_resources(struct bnxt *bp, bool reconfig_dev) +@@ -5201,6 +5217,16 @@ static int bnxt_init_resources(struct bnxt *bp, bool reconfig_dev) @@ -125 +127 @@ -@@ -5950,6 +5975,8 @@ bnxt_uninit_resources(struct bnxt *bp, bool reconfig_dev) +@@ -5852,6 +5878,8 @@ bnxt_uninit_resources(struct bnxt *bp, bool reconfig_dev) @@ -135 +137 @@ -index c9d99039ad..9f1d1d4dba 100644 +index aa73bd25e1..e057393b2b 100644 @@ -138 +140 @@ -@@ -148,7 +148,7 @@ skip_filter_allocation: +@@ -137,7 +137,7 @@ skip_filter_allocation: @@ -141 +143 @@ - if (dev_conf->rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG) { + if (dev_conf->rxmode.mq_mode & ETH_MQ_RX_RSS_FLAG) { @@ -148 +150 @@ -index e05dc241dc..09d67ef885 100644 +index 53db277ead..f18e672dca 100644 @@ -175 +177 @@ -index af3a2dd779..25481fcbdd 100644 +index b5bba81fcf..785db8f0cd 100644