diff mbox series

[net] bnxt_en: Fix the resource check condition for RSS contexts

Message ID 20240703180112.78590-1-michael.chan@broadcom.com (mailing list archive)
State Accepted
Commit 5d350dc3429b3eb6f2b1b8ccb78ed4ec6c4d4a4f
Delegated to: Netdev Maintainers
Headers show
Series [net] bnxt_en: Fix the resource check condition for RSS contexts | expand

Checks

Context Check Description
netdev/series_format success Single patches do not need cover letters
netdev/tree_selection success Clearly marked for net
netdev/ynl success Generated files up to date; no warnings/errors; no diff in generated;
netdev/fixes_present success Fixes tag present in non-next series
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit success Errors and warnings before: 856 this patch: 856
netdev/build_tools success No tools touched, skip
netdev/cc_maintainers success CCed 4 of 4 maintainers
netdev/build_clang success Errors and warnings before: 860 this patch: 860
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/deprecated_api success None detected
netdev/check_selftest success No net selftest shell script
netdev/verify_fixes success Fixes tag looks correct
netdev/build_allmodconfig_warn success Errors and warnings before: 862 this patch: 862
netdev/checkpatch success total: 0 errors, 0 warnings, 0 checks, 12 lines checked
netdev/build_clang_rust success No Rust files in patch. Skipping build
netdev/kdoc success Errors and warnings before: 2 this patch: 2
netdev/source_inline success Was 0 now: 0
netdev/contest success net-next-2024-07-04--00-00 (tests: 663)

Commit Message

Michael Chan July 3, 2024, 6:01 p.m. UTC
From: Pavan Chebbi <pavan.chebbi@broadcom.com>

While creating a new RSS context, bnxt_rfs_capable() currently
makes a strict check to see if the required VNICs are already
available.  If the current VNICs are not what is required,
either too many or not enough, it will call the firmware to
reserve the exact number required.

There is a bug in the firmware when the driver tries to
relinquish some reserved VNICs and RSS contexts.  It will
cause the default VNIC to lose its RSS configuration and
cause receive packets to be placed incorrectly.

Workaround this problem by skipping the resource reduction.
The driver will not reduce the VNIC and RSS context reservations
when a context is deleted.  The resources will be available for
use when new contexts are created later.

Potentially, this workaround can cause us to run out of VNIC
and RSS contexts if there are a lot of VF functions creating
and deleting RSS contexts.  In the future, we will conditionally
disable this workaround when the firmware fix is available.

Fixes: 438ba39b25fe ("bnxt_en: Improve RSS context reservation infrastructure")
Reported-by: Jakub Kicinski <kuba@kernel.org>
Link: https://lore.kernel.org/netdev/20240625010210.2002310-1-kuba@kernel.org/
Reviewed-by: Andy Gospodarek <andrew.gospodarek@broadcom.com>
Signed-off-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
---
 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

Comments

Simon Horman July 4, 2024, 9:20 a.m. UTC | #1
On Wed, Jul 03, 2024 at 11:01:12AM -0700, Michael Chan wrote:
> From: Pavan Chebbi <pavan.chebbi@broadcom.com>
> 
> While creating a new RSS context, bnxt_rfs_capable() currently
> makes a strict check to see if the required VNICs are already
> available.  If the current VNICs are not what is required,
> either too many or not enough, it will call the firmware to
> reserve the exact number required.
> 
> There is a bug in the firmware when the driver tries to
> relinquish some reserved VNICs and RSS contexts.  It will
> cause the default VNIC to lose its RSS configuration and
> cause receive packets to be placed incorrectly.
> 
> Workaround this problem by skipping the resource reduction.
> The driver will not reduce the VNIC and RSS context reservations
> when a context is deleted.  The resources will be available for
> use when new contexts are created later.
> 
> Potentially, this workaround can cause us to run out of VNIC
> and RSS contexts if there are a lot of VF functions creating
> and deleting RSS contexts.  In the future, we will conditionally
> disable this workaround when the firmware fix is available.
> 
> Fixes: 438ba39b25fe ("bnxt_en: Improve RSS context reservation infrastructure")
> Reported-by: Jakub Kicinski <kuba@kernel.org>
> Link: https://lore.kernel.org/netdev/20240625010210.2002310-1-kuba@kernel.org/
> Reviewed-by: Andy Gospodarek <andrew.gospodarek@broadcom.com>
> Signed-off-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
> Signed-off-by: Michael Chan <michael.chan@broadcom.com>

Reviewed-by: Simon Horman <horms@kernel.org>
patchwork-bot+netdevbpf@kernel.org July 4, 2024, 2:50 p.m. UTC | #2
Hello:

This patch was applied to netdev/net.git (main)
by Jakub Kicinski <kuba@kernel.org>:

On Wed,  3 Jul 2024 11:01:12 -0700 you wrote:
> From: Pavan Chebbi <pavan.chebbi@broadcom.com>
> 
> While creating a new RSS context, bnxt_rfs_capable() currently
> makes a strict check to see if the required VNICs are already
> available.  If the current VNICs are not what is required,
> either too many or not enough, it will call the firmware to
> reserve the exact number required.
> 
> [...]

Here is the summary with links:
  - [net] bnxt_en: Fix the resource check condition for RSS contexts
    https://git.kernel.org/netdev/net/c/5d350dc3429b

You are awesome, thank you!
diff mbox series

Patch

diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index a6d69a45fa01..53085058100c 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -12669,7 +12669,11 @@  bool bnxt_rfs_capable(struct bnxt *bp, bool new_rss_ctx)
 	if (!BNXT_NEW_RM(bp))
 		return true;
 
-	if (hwr.vnic == bp->hw_resc.resv_vnics &&
+	/* Do not reduce VNIC and RSS ctx reservations.  There is a FW
+	 * issue that will mess up the default VNIC if we reduce the
+	 * reservations.
+	 */
+	if (hwr.vnic <= bp->hw_resc.resv_vnics &&
 	    hwr.rss_ctx <= bp->hw_resc.resv_rsscos_ctxs)
 		return true;