]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
bnxt_en: Fix ring arithmetic in bnxt_setup_tc().
authorMichael Chan <michael.chan@broadcom.com>
Fri, 11 Nov 2016 05:11:42 +0000 (00:11 -0500)
committerDhaval Giani <dhaval.giani@oracle.com>
Fri, 20 Jan 2017 18:07:52 +0000 (13:07 -0500)
Orabug: 24567991

The logic is missing the check on whether the tx and rx rings are sharing
completion rings or not.

Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
(cherry picked from commit 3ffb6a39b751b635a0c50b650064c38b8d371ef2)
Signed-off-by: Brian Maly <brian.maly@oracle.com>
Conflicts:
drivers/net/ethernet/broadcom/bnxt/bnxt.c

Signed-off-by: Dhaval Giani <dhaval.giani@oracle.com>
drivers/net/ethernet/broadcom/bnxt/bnxt.c

index 731b225d783b31ba58e8fdb5be1e7f5c13621e5a..35980e5a456e1784e982f713fa6d584099f57222 100644 (file)
@@ -6327,6 +6327,7 @@ static int bnxt_change_mtu(struct net_device *dev, int new_mtu)
 static int bnxt_setup_tc(struct net_device *dev, u8 tc)
 {
        struct bnxt *bp = netdev_priv(dev);
+       bool sh = false;
 
        if (tc > bp->max_tc) {
                netdev_err(dev, "too many traffic classes requested: %d Max supported is %d\n",
@@ -6337,12 +6338,11 @@ static int bnxt_setup_tc(struct net_device *dev, u8 tc)
        if (netdev_get_num_tc(dev) == tc)
                return 0;
 
+       if (bp->flags & BNXT_FLAG_SHARED_RINGS)
+               sh = true;
+
        if (tc) {
                int max_rx_rings, max_tx_rings, rc;
-               bool sh = false;
-
-               if (bp->flags & BNXT_FLAG_SHARED_RINGS)
-                       sh = true;
 
                rc = bnxt_get_max_rings(bp, &max_rx_rings, &max_tx_rings, sh);
                if (rc || bp->tx_nr_rings_per_tc * tc > max_tx_rings)
@@ -6360,7 +6360,8 @@ static int bnxt_setup_tc(struct net_device *dev, u8 tc)
                bp->tx_nr_rings = bp->tx_nr_rings_per_tc;
                netdev_reset_tc(dev);
        }
-       bp->cp_nr_rings = max_t(int, bp->tx_nr_rings, bp->rx_nr_rings);
+       bp->cp_nr_rings = sh ? max_t(int, bp->tx_nr_rings, bp->rx_nr_rings) :
+                              bp->tx_nr_rings + bp->rx_nr_rings;
        bp->num_stat_ctxs = bp->cp_nr_rings;
 
        if (netif_running(bp->dev))