• Thadeu Lima de Souza Cascardo's avatar
    mlx4: allocate just enough pages instead of always 4 pages · 117980c4
    Thadeu Lima de Souza Cascardo authored
    The driver uses a 2-order allocation, which is too much on architectures
    like ppc64, which has a 64KiB page. This particular allocation is used
    for large packet fragments that may have a size of 512, 1024, 4096 or
    fill the whole allocation. So, a minimum size of 16384 is good enough
    and will be the same size that is used in architectures of 4KiB sized
    pages.
    
    This will avoid allocation failures that we see when the system is under
    stress, but still has plenty of memory, like the one below.
    
    This will also allow us to set the interface MTU to higher values like
    9000, which was not possible on ppc64 without this patch.
    
    Node 1 DMA: 737*64kB 37*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB 0*8192kB 0*16384kB = 51904kB
    83137 total pagecache pages
    0 pages in swap cache
    Swap cache stats: add 0, delete 0, find 0/0
    Free swap  = 10420096kB
    Total swap = 10420096kB
    107776 pages RAM
    1184 pages reserved
    147343 pages shared
    28152 pages non-shared
    netstat: page allocation failure. order:2, mode:0x4020
    Call Trace:
    [c0000001a4fa3770] [c000000000012f04] .show_stack+0x74/0x1c0 (unreliable)
    [c0000001a4fa3820] [c00000000016af38] .__alloc_pages_nodemask+0x618/0x930
    [c0000001a4fa39a0] [c0000000001a71a0] .alloc_pages_current+0xb0/0x170
    [c0000001a4fa3a40] [d00000000dcc3e00] .mlx4_en_alloc_frag+0x200/0x240 [mlx4_en]
    [c0000001a4fa3b10] [d00000000dcc3f8c] .mlx4_en_complete_rx_desc+0x14c/0x250 [mlx4_en]
    [c0000001a4fa3be0] [d00000000dcc4eec] .mlx4_en_process_rx_cq+0x62c/0x850 [mlx4_en]
    [c0000001a4fa3d20] [d00000000dcc5150] .mlx4_en_poll_rx_cq+0x40/0x90 [mlx4_en]
    [c0000001a4fa3dc0] [c0000000004e2bb8] .net_rx_action+0x178/0x450
    [c0000001a4fa3eb0] [c00000000009c9b8] .__do_softirq+0x118/0x290
    [c0000001a4fa3f90] [c000000000031df8] .call_do_softirq+0x14/0x24
    [c000000184c3b520] [c00000000000e700] .do_softirq+0xf0/0x110
    [c000000184c3b5c0] [c00000000009c6d4] .irq_exit+0xb4/0xc0
    [c000000184c3b640] [c00000000000e964] .do_IRQ+0x144/0x230
    Signed-off-by: default avatarThadeu Lima de Souza Cascardo <cascardo@linux.vnet.ibm.com>
    Signed-off-by: default avatarKleber Sacilotto de Souza <klebers@linux.vnet.ibm.com>
    Tested-by: default avatarKleber Sacilotto de Souza <klebers@linux.vnet.ibm.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    117980c4
mlx4_en.h 16 KB