diff options
author | Michael Chan <michael.chan@broadcom.com> | 2016-11-11 00:11:42 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-11-13 12:37:31 -0500 |
commit | 3ffb6a39b751b635a0c50b650064c38b8d371ef2 (patch) | |
tree | 147563c3fa4c932bcf83445534458f7a37fb962a | |
parent | 7b5b74efcca00f15c2aec1dc7175bfe34b6ec643 (diff) |
bnxt_en: Fix ring arithmetic in bnxt_setup_tc().
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>
-rw-r--r-- | drivers/net/ethernet/broadcom/bnxt/bnxt.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c index a9f9f3738022..c6909660e097 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c | |||
@@ -6309,6 +6309,7 @@ static int bnxt_setup_tc(struct net_device *dev, u32 handle, __be16 proto, | |||
6309 | struct tc_to_netdev *ntc) | 6309 | struct tc_to_netdev *ntc) |
6310 | { | 6310 | { |
6311 | struct bnxt *bp = netdev_priv(dev); | 6311 | struct bnxt *bp = netdev_priv(dev); |
6312 | bool sh = false; | ||
6312 | u8 tc; | 6313 | u8 tc; |
6313 | 6314 | ||
6314 | if (ntc->type != TC_SETUP_MQPRIO) | 6315 | if (ntc->type != TC_SETUP_MQPRIO) |
@@ -6325,12 +6326,11 @@ static int bnxt_setup_tc(struct net_device *dev, u32 handle, __be16 proto, | |||
6325 | if (netdev_get_num_tc(dev) == tc) | 6326 | if (netdev_get_num_tc(dev) == tc) |
6326 | return 0; | 6327 | return 0; |
6327 | 6328 | ||
6329 | if (bp->flags & BNXT_FLAG_SHARED_RINGS) | ||
6330 | sh = true; | ||
6331 | |||
6328 | if (tc) { | 6332 | if (tc) { |
6329 | int max_rx_rings, max_tx_rings, rc; | 6333 | int max_rx_rings, max_tx_rings, rc; |
6330 | bool sh = false; | ||
6331 | |||
6332 | if (bp->flags & BNXT_FLAG_SHARED_RINGS) | ||
6333 | sh = true; | ||
6334 | 6334 | ||
6335 | rc = bnxt_get_max_rings(bp, &max_rx_rings, &max_tx_rings, sh); | 6335 | rc = bnxt_get_max_rings(bp, &max_rx_rings, &max_tx_rings, sh); |
6336 | if (rc || bp->tx_nr_rings_per_tc * tc > max_tx_rings) | 6336 | if (rc || bp->tx_nr_rings_per_tc * tc > max_tx_rings) |
@@ -6348,7 +6348,8 @@ static int bnxt_setup_tc(struct net_device *dev, u32 handle, __be16 proto, | |||
6348 | bp->tx_nr_rings = bp->tx_nr_rings_per_tc; | 6348 | bp->tx_nr_rings = bp->tx_nr_rings_per_tc; |
6349 | netdev_reset_tc(dev); | 6349 | netdev_reset_tc(dev); |
6350 | } | 6350 | } |
6351 | bp->cp_nr_rings = max_t(int, bp->tx_nr_rings, bp->rx_nr_rings); | 6351 | bp->cp_nr_rings = sh ? max_t(int, bp->tx_nr_rings, bp->rx_nr_rings) : |
6352 | bp->tx_nr_rings + bp->rx_nr_rings; | ||
6352 | bp->num_stat_ctxs = bp->cp_nr_rings; | 6353 | bp->num_stat_ctxs = bp->cp_nr_rings; |
6353 | 6354 | ||
6354 | if (netif_running(bp->dev)) | 6355 | if (netif_running(bp->dev)) |