bnxt_en: Fix ethtool -l|-L inconsistent channel counts.
The existing code is inconsistent in reporting and accepting the combined channel count. bnxt_get_channels() reports maximum combined as the maximum rx count. bnxt_set_channels() accepts combined count that cannot be bigger than max rx or max tx. For example, if max rx = 2 and max tx = 1, we report max supported combined to be 2. But if the user tries to set combined to 2, it will fail because 2 is bigger than max tx which is 1. Fix the code to be consistent. Max allowed combined = max(max_rx, max_tx). We will accept a combined channel count <= max(max_rx, max_tx). Signed-off-by: Michael Chan <michael.chan@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
5ac67d8bc7
commit
47f8e8b9bb
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue