mlx4: allow order-0 memory allocations in RX path
authorEric Dumazet <eric.dumazet@gmail.com>
Sun, 23 Jun 2013 15:17:56 +0000 (08:17 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 25 Jun 2013 23:18:31 +0000 (16:18 -0700)
commit51151a16a60f0a886a0b1e4a0697001198af50c4
treea0d10152e3439e60cd8e67b2f66be0bbde0845fd
parent3bae9db9aacc40cdb5a0a4b74aaf935b3e85b4d6
mlx4: allow order-0 memory allocations in RX path

Signed-off-by: Eric Dumazet <edumazet@google.com>
mlx4 exclusively uses order-2 allocations in RX path, which are
likely to fail under memory pressure.

We therefore drop frames more than needed.

This patch tries order-3, order-2, order-1 and finally order-0
allocations to keep good performance, yet allow allocations if/when
memory gets fragmented.

By using larger pages, and avoiding unnecessary get_page()/put_page()
on compound pages, this patch improves performance as well, lowering
false sharing on struct page.

Also use GFP_KERNEL allocations in initialization path, as allocating 12
MB (390 order-3 pages) can easily fail with GFP_ATOMIC.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Amir Vadai <amirv@mellanox.com>
Acked-by: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlx4/en_rx.c
drivers/net/ethernet/mellanox/mlx4/mlx4_en.h