diff options
author | Christoph Lameter <clameter@sgi.com> | 2008-02-14 14:21:32 -0800 |
---|---|---|
committer | Christoph Lameter <christoph@stapp.engr.sgi.com> | 2008-02-14 15:30:01 -0800 |
commit | b7a49f0d4c34166ae84089d9f145cfaae1b0eec5 (patch) | |
tree | 716bd20c8b920511f032a42be78c0a523a17565d /mm | |
parent | dada123d99c241d1a45798a7c77bcf99c4968704 (diff) | |
download | lwn-b7a49f0d4c34166ae84089d9f145cfaae1b0eec5.tar.gz lwn-b7a49f0d4c34166ae84089d9f145cfaae1b0eec5.zip |
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>
Diffstat (limited to 'mm')
-rw-r--r-- | mm/slub.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/mm/slub.c b/mm/slub.c index 1af7f2f19420..ccfd41141b6b 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -1078,14 +1078,7 @@ static struct page *allocate_slab(struct kmem_cache *s, gfp_t flags, int node) struct page *page; int pages = 1 << s->order; - if (s->order) - flags |= __GFP_COMP; - - if (s->flags & SLAB_CACHE_DMA) - flags |= SLUB_DMA; - - if (s->flags & SLAB_RECLAIM_ACCOUNT) - flags |= __GFP_RECLAIMABLE; + flags |= s->allocflags; if (node == -1) page = alloc_pages(flags, s->order); @@ -2333,6 +2326,16 @@ static int calculate_sizes(struct kmem_cache *s) if (s->order < 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 */ |