summaryrefslogtreecommitdiffstats
path: root/drivers/net/bnx2x/bnx2x_cmn.c
diff options
context:
space:
mode:
authorDmitry Kravkov2010-09-12 07:48:28 +0200
committerDavid S. Miller2010-09-14 05:02:53 +0200
commit251415808306a19be93ec93268e2985f10d3db8b (patch)
tree176b64ef9f742ae0ebcfa4eceae44859e01e4a1e /drivers/net/bnx2x/bnx2x_cmn.c
parentcx82310_eth: allow empty URBs (diff)
downloadkernel-qcow2-linux-251415808306a19be93ec93268e2985f10d3db8b.tar.gz
kernel-qcow2-linux-251415808306a19be93ec93268e2985f10d3db8b.tar.xz
kernel-qcow2-linux-251415808306a19be93ec93268e2985f10d3db8b.zip
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_cmn.c')
-rw-r--r--drivers/net/bnx2x/bnx2x_cmn.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/net/bnx2x/bnx2x_cmn.c b/drivers/net/bnx2x/bnx2x_cmn.c
index 7f1d291eaaa5..efc7be4aefb5 100644
--- a/drivers/net/bnx2x/bnx2x_cmn.c
+++ b/drivers/net/bnx2x/bnx2x_cmn.c
@@ -781,6 +781,10 @@ void bnx2x_init_rx_rings(struct bnx2x *bp)
ETH_MAX_AGGREGATION_QUEUES_E1H;
u16 ring_prod, cqe_ring_prod;
int i, j;
+ int rx_ring_size = bp->rx_ring_size ? bp->rx_ring_size :
+ MAX_RX_AVAIL/bp->num_queues;
+
+ rx_ring_size = max_t(int, MIN_RX_AVAIL, rx_ring_size);
bp->rx_buf_size = bp->dev->mtu + ETH_OVREHEAD + BNX2X_RX_ALIGN;
DP(NETIF_MSG_IFUP,
@@ -883,7 +887,7 @@ void bnx2x_init_rx_rings(struct bnx2x *bp)
/* Allocate BDs and initialize BD ring */
fp->rx_comp_cons = 0;
cqe_ring_prod = ring_prod = 0;
- for (i = 0; i < bp->rx_ring_size; i++) {
+ for (i = 0; i < rx_ring_size; i++) {
if (bnx2x_alloc_rx_skb(bp, fp, ring_prod) < 0) {
BNX2X_ERR("was only able to allocate "
"%d rx skbs on queue[%d]\n", i, j);