• Gabriel Krisman Bertazi's avatar
    bnx2x: Alloc 4k fragment for each rx ring buffer element · 4cace675
    Gabriel Krisman Bertazi authored
    The driver allocates one page for each buffer on the rx ring, which is
    too much on architectures like ppc64 and can cause unexpected allocation
    failures when the system is under stress.  Now, we keep a memory pool
    per queue, and if the architecture's PAGE_SIZE is greater than 4k, we
    fragment pages and assign each 4k segment to a ring element, which
    reduces the overall memory consumption on such architectures.  This
    helps avoiding errors like the example below:
    
    [bnx2x_alloc_rx_sge:435(eth1)]Can't alloc sge
    [c00000037ffeb900] [d000000075eddeb4] .bnx2x_alloc_rx_sge+0x44/0x200 [bnx2x]
    [c00000037ffeb9b0] [d000000075ee0b34] .bnx2x_fill_frag_skb+0x1ac/0x460 [bnx2x]
    [c00000037ffebac0] [d000000075ee11f0] .bnx2x_tpa_stop+0x160/0x2e8 [bnx2x]
    [c00000037ffebb90] [d000000075ee1560] .bnx2x_rx_int+0x1e8/0xc30 [bnx2x]
    [c00000037ffebcd0] [d000000075ee2084] .bnx2x_poll+0xdc/0x3d8 [bnx2x] (unreliable)
    Signed-off-by: default avatarGabriel Krisman Bertazi <krisman@linux.vnet.ibm.com>
    Acked-by: default avatarYuval Mintz <Yuval.Mintz@qlogic.com>
    Reviewed-by: default avatarLino Sanfilippo <LinoSanfilippo@gmx.de>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    4cace675
bnx2x_cmn.c 134 KB