From: Michael Chan Date: Fri, 11 Nov 2016 05:11:42 +0000 (-0500) Subject: bnxt_en: Fix ring arithmetic in bnxt_setup_tc(). X-Git-Tag: v4.1.12-92~10^2~28 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=bf3f78cbfc67dfd6ad7176891e264c1d14c17134;p=users%2Fjedix%2Flinux-maple.git bnxt_en: Fix ring arithmetic in bnxt_setup_tc(). 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 Signed-off-by: David S. Miller (cherry picked from commit 3ffb6a39b751b635a0c50b650064c38b8d371ef2) Signed-off-by: Brian Maly Conflicts: drivers/net/ethernet/broadcom/bnxt/bnxt.c Signed-off-by: Dhaval Giani --- diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c index 731b225d783b3..35980e5a456e1 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -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))