Patch "bnxt_en: Fix RSS logic in __bnxt_reserve_rings()" has been added to the 6.10-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    bnxt_en: Fix RSS logic in __bnxt_reserve_rings()

to the 6.10-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     bnxt_en-fix-rss-logic-in-__bnxt_reserve_rings.patch
and it can be found in the queue-6.10 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit c457d41f16e1eb6b1c2d1ec61d6be28b26e2c592
Author: Pavan Chebbi <pavan.chebbi@xxxxxxxxxxxx>
Date:   Wed Jul 24 15:21:06 2024 -0700

    bnxt_en: Fix RSS logic in __bnxt_reserve_rings()
    
    [ Upstream commit 98ba1d931f611e8f8f519c0405fa0a1a76554bfa ]
    
    In __bnxt_reserve_rings(), the existing code unconditionally sets the
    default RSS indirection table to default if netif_is_rxfh_configured()
    returns false.  This used to be correct before we added RSS contexts
    support.  For example, if the user is changing the number of ethtool
    channels, we will enter this path to reserve the new number of rings.
    We will then set the RSS indirection table to default to cover the new
    number of rings if netif_is_rxfh_configured() is false.
    
    Now, with RSS contexts support, if the user has added or deleted RSS
    contexts, we may now enter this path to reserve the new number of VNICs.
    However, netif_is_rxfh_configured() will not return the correct state if
    we are still in the middle of set_rxfh().  So the existing code may
    set the indirection table of the default RSS context to default by
    mistake.
    
    Fix it to check if the reservation of the RX rings is changing.  Only
    check netif_is_rxfh_configured() if it is changing.  RX rings will not
    change in the middle of set_rxfh() and this will fix the issue.
    
    Fixes: b3d0083caf9a ("bnxt_en: Support RSS contexts in ethtool .{get|set}_rxfh()")
    Reported-and-tested-by: Jakub Kicinski <kuba@xxxxxxxxxx>
    Link: https://lore.kernel.org/20240625010210.2002310-1-kuba@xxxxxxxxxx
    Reviewed-by: Andy Gospodarek <andrew.gospodarek@xxxxxxxxxxxx>
    Signed-off-by: Pavan Chebbi <pavan.chebbi@xxxxxxxxxxxx>
    Signed-off-by: Michael Chan <michael.chan@xxxxxxxxxxxx>
    Link: https://patch.msgid.link/20240724222106.147744-1-michael.chan@xxxxxxxxxxxx
    Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index 43952689bfb0c..23627c973e40f 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -7491,8 +7491,8 @@ static int bnxt_get_avail_msix(struct bnxt *bp, int num);
 static int __bnxt_reserve_rings(struct bnxt *bp)
 {
 	struct bnxt_hw_rings hwr = {0};
+	int rx_rings, old_rx_rings, rc;
 	int cp = bp->cp_nr_rings;
-	int rx_rings, rc;
 	int ulp_msix = 0;
 	bool sh = false;
 	int tx_cp;
@@ -7526,6 +7526,7 @@ static int __bnxt_reserve_rings(struct bnxt *bp)
 	hwr.grp = bp->rx_nr_rings;
 	hwr.rss_ctx = bnxt_get_total_rss_ctxs(bp, &hwr);
 	hwr.stat = bnxt_get_func_stat_ctxs(bp);
+	old_rx_rings = bp->hw_resc.resv_rx_rings;
 
 	rc = bnxt_hwrm_reserve_rings(bp, &hwr);
 	if (rc)
@@ -7580,7 +7581,8 @@ static int __bnxt_reserve_rings(struct bnxt *bp)
 	if (!bnxt_rings_ok(bp, &hwr))
 		return -ENOMEM;
 
-	if (!netif_is_rxfh_configured(bp->dev))
+	if (old_rx_rings != bp->hw_resc.resv_rx_rings &&
+	    !netif_is_rxfh_configured(bp->dev))
 		bnxt_set_dflt_rss_indir_tbl(bp, NULL);
 
 	if (!bnxt_ulp_registered(bp->edev) && BNXT_NEW_RM(bp)) {




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux