Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
This commit is contained in:
commit
7d840a6065
|
@ -43,12 +43,13 @@
|
||||||
#include "fw.h"
|
#include "fw.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We allocate in page size (default 4KB on many archs) chunks to avoid high
|
* We allocate in as big chunks as we can, up to a maximum of 256 KB
|
||||||
* order memory allocations in fragmented/high usage memory situation.
|
* per chunk. Note that the chunks are not necessarily in contiguous
|
||||||
|
* physical memory.
|
||||||
*/
|
*/
|
||||||
enum {
|
enum {
|
||||||
MLX4_ICM_ALLOC_SIZE = PAGE_SIZE,
|
MLX4_ICM_ALLOC_SIZE = 1 << 18,
|
||||||
MLX4_TABLE_CHUNK_SIZE = PAGE_SIZE,
|
MLX4_TABLE_CHUNK_SIZE = 1 << 18,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void mlx4_free_icm_pages(struct mlx4_dev *dev, struct mlx4_icm_chunk *chunk)
|
static void mlx4_free_icm_pages(struct mlx4_dev *dev, struct mlx4_icm_chunk *chunk)
|
||||||
|
@ -135,6 +136,7 @@ struct mlx4_icm *mlx4_alloc_icm(struct mlx4_dev *dev, int npages,
|
||||||
struct mlx4_icm *icm;
|
struct mlx4_icm *icm;
|
||||||
struct mlx4_icm_chunk *chunk = NULL;
|
struct mlx4_icm_chunk *chunk = NULL;
|
||||||
int cur_order;
|
int cur_order;
|
||||||
|
gfp_t mask;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
/* We use sg_set_buf for coherent allocs, which assumes low memory */
|
/* We use sg_set_buf for coherent allocs, which assumes low memory */
|
||||||
|
@ -178,13 +180,17 @@ struct mlx4_icm *mlx4_alloc_icm(struct mlx4_dev *dev, int npages,
|
||||||
while (1 << cur_order > npages)
|
while (1 << cur_order > npages)
|
||||||
--cur_order;
|
--cur_order;
|
||||||
|
|
||||||
|
mask = gfp_mask;
|
||||||
|
if (cur_order)
|
||||||
|
mask &= ~__GFP_DIRECT_RECLAIM;
|
||||||
|
|
||||||
if (coherent)
|
if (coherent)
|
||||||
ret = mlx4_alloc_icm_coherent(&dev->persist->pdev->dev,
|
ret = mlx4_alloc_icm_coherent(&dev->persist->pdev->dev,
|
||||||
&chunk->mem[chunk->npages],
|
&chunk->mem[chunk->npages],
|
||||||
cur_order, gfp_mask);
|
cur_order, mask);
|
||||||
else
|
else
|
||||||
ret = mlx4_alloc_icm_pages(&chunk->mem[chunk->npages],
|
ret = mlx4_alloc_icm_pages(&chunk->mem[chunk->npages],
|
||||||
cur_order, gfp_mask,
|
cur_order, mask,
|
||||||
dev->numa_node);
|
dev->numa_node);
|
||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
|
|
Loading…
Reference in New Issue