diff options
author | Dmitry Kravkov <dmitry@broadcom.com> | 2010-09-12 01:48:28 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-09-13 23:02:53 -0400 |
commit | 251415808306a19be93ec93268e2985f10d3db8b (patch) | |
tree | 176b64ef9f742ae0ebcfa4eceae44859e01e4a1e /drivers/net/bnx2x/bnx2x_ethtool.c | |
parent | 441993da47777d961300c070fe1210600af48ad8 (diff) |
bnx2x: Spread rx buffers between allocated queues
Default number of rx buffers will be divided equally
between allocated queues. This will decrease amount of
pre-allocated buffers on systems with multiple CPUs.
User can override this behavior with ethtool -G.
Minimum amount of rx buffers per queue set to 128.
Reported-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/bnx2x/bnx2x_ethtool.c')
-rw-r--r-- | drivers/net/bnx2x/bnx2x_ethtool.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/net/bnx2x/bnx2x_ethtool.c b/drivers/net/bnx2x/bnx2x_ethtool.c index 6f939c5a0089..d9748e97fad3 100644 --- a/drivers/net/bnx2x/bnx2x_ethtool.c +++ b/drivers/net/bnx2x/bnx2x_ethtool.c | |||
@@ -961,7 +961,14 @@ static void bnx2x_get_ringparam(struct net_device *dev, | |||
961 | ering->rx_mini_max_pending = 0; | 961 | ering->rx_mini_max_pending = 0; |
962 | ering->rx_jumbo_max_pending = 0; | 962 | ering->rx_jumbo_max_pending = 0; |
963 | 963 | ||
964 | ering->rx_pending = bp->rx_ring_size; | 964 | if (bp->rx_ring_size) |
965 | ering->rx_pending = bp->rx_ring_size; | ||
966 | else | ||
967 | if (bp->state == BNX2X_STATE_OPEN && bp->num_queues) | ||
968 | ering->rx_pending = MAX_RX_AVAIL/bp->num_queues; | ||
969 | else | ||
970 | ering->rx_pending = MAX_RX_AVAIL; | ||
971 | |||
965 | ering->rx_mini_pending = 0; | 972 | ering->rx_mini_pending = 0; |
966 | ering->rx_jumbo_pending = 0; | 973 | ering->rx_jumbo_pending = 0; |
967 | 974 | ||
@@ -981,6 +988,7 @@ static int bnx2x_set_ringparam(struct net_device *dev, | |||
981 | } | 988 | } |
982 | 989 | ||
983 | if ((ering->rx_pending > MAX_RX_AVAIL) || | 990 | if ((ering->rx_pending > MAX_RX_AVAIL) || |
991 | (ering->rx_pending < MIN_RX_AVAIL) || | ||
984 | (ering->tx_pending > MAX_TX_AVAIL) || | 992 | (ering->tx_pending > MAX_TX_AVAIL) || |
985 | (ering->tx_pending <= MAX_SKB_FRAGS + 4)) | 993 | (ering->tx_pending <= MAX_SKB_FRAGS + 4)) |
986 | return -EINVAL; | 994 | return -EINVAL; |