bnxt_en: Fix ethtool -l|-L inconsistent channel counts.
[cascardo/linux.git] / drivers / net / ethernet / broadcom / bnxt / bnxt_ethtool.c
index 4a430b6..c74ce69 100644 (file)
@@ -348,7 +348,7 @@ static void bnxt_get_channels(struct net_device *dev,
        int max_rx_rings, max_tx_rings, tcs;
 
        bnxt_get_max_rings(bp, &max_rx_rings, &max_tx_rings, true);
-       channel->max_combined = max_rx_rings;
+       channel->max_combined = max_t(int, max_rx_rings, max_tx_rings);
 
        if (bnxt_get_max_rings(bp, &max_rx_rings, &max_tx_rings, false)) {
                max_rx_rings = 0;
@@ -406,8 +406,8 @@ static int bnxt_set_channels(struct net_device *dev,
        if (tcs > 1)
                max_tx_rings /= tcs;
 
-       if (sh && (channel->combined_count > max_rx_rings ||
-                  channel->combined_count > max_tx_rings))
+       if (sh &&
+           channel->combined_count > max_t(int, max_rx_rings, max_tx_rings))
                return -ENOMEM;
 
        if (!sh && (channel->rx_count > max_rx_rings ||
@@ -430,8 +430,10 @@ static int bnxt_set_channels(struct net_device *dev,
 
        if (sh) {
                bp->flags |= BNXT_FLAG_SHARED_RINGS;
-               bp->rx_nr_rings = channel->combined_count;
-               bp->tx_nr_rings_per_tc = channel->combined_count;
+               bp->rx_nr_rings = min_t(int, channel->combined_count,
+                                       max_rx_rings);
+               bp->tx_nr_rings_per_tc = min_t(int, channel->combined_count,
+                                              max_tx_rings);
        } else {
                bp->flags &= ~BNXT_FLAG_SHARED_RINGS;
                bp->rx_nr_rings = channel->rx_count;