mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-03-01 08:58:57 +00:00
slub: Determine gfpflags once and not every time a slab is allocated
Currently we determine the gfp flags to pass to the page allocator each time a slab is being allocated. Determine the bits to be set at the time the slab is created. Store in a new allocflags field and add the flags in allocate_slab(). Acked-by: Mel Gorman <mel@csn.ul.ie> Reviewed-by: Pekka Enberg <penberg@cs.helsinki.fi> Signed-off-by: Christoph Lameter <clameter@sgi.com>
This commit is contained in:
parent
dada123d99
commit
b7a49f0d4c
@ -71,6 +71,7 @@ struct kmem_cache {
|
|||||||
|
|
||||||
/* Allocation and freeing of slabs */
|
/* Allocation and freeing of slabs */
|
||||||
int objects; /* Number of objects in slab */
|
int objects; /* Number of objects in slab */
|
||||||
|
gfp_t allocflags; /* gfp flags to use on each alloc */
|
||||||
int refcount; /* Refcount for slab cache destroy */
|
int refcount; /* Refcount for slab cache destroy */
|
||||||
void (*ctor)(struct kmem_cache *, void *);
|
void (*ctor)(struct kmem_cache *, void *);
|
||||||
int inuse; /* Offset to metadata */
|
int inuse; /* Offset to metadata */
|
||||||
|
19
mm/slub.c
19
mm/slub.c
@ -1078,14 +1078,7 @@ static struct page *allocate_slab(struct kmem_cache *s, gfp_t flags, int node)
|
|||||||
struct page *page;
|
struct page *page;
|
||||||
int pages = 1 << s->order;
|
int pages = 1 << s->order;
|
||||||
|
|
||||||
if (s->order)
|
flags |= s->allocflags;
|
||||||
flags |= __GFP_COMP;
|
|
||||||
|
|
||||||
if (s->flags & SLAB_CACHE_DMA)
|
|
||||||
flags |= SLUB_DMA;
|
|
||||||
|
|
||||||
if (s->flags & SLAB_RECLAIM_ACCOUNT)
|
|
||||||
flags |= __GFP_RECLAIMABLE;
|
|
||||||
|
|
||||||
if (node == -1)
|
if (node == -1)
|
||||||
page = alloc_pages(flags, s->order);
|
page = alloc_pages(flags, s->order);
|
||||||
@ -2333,6 +2326,16 @@ static int calculate_sizes(struct kmem_cache *s)
|
|||||||
if (s->order < 0)
|
if (s->order < 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
s->allocflags = 0;
|
||||||
|
if (s->order)
|
||||||
|
s->allocflags |= __GFP_COMP;
|
||||||
|
|
||||||
|
if (s->flags & SLAB_CACHE_DMA)
|
||||||
|
s->allocflags |= SLUB_DMA;
|
||||||
|
|
||||||
|
if (s->flags & SLAB_RECLAIM_ACCOUNT)
|
||||||
|
s->allocflags |= __GFP_RECLAIMABLE;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Determine the number of objects per slab
|
* Determine the number of objects per slab
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user