Commit 39d24e64 authored by Mike Kravetz's avatar Mike Kravetz Committed by Linus Torvalds

[PATCH] add slab_is_available() routine for boot code

slab_is_available() indicates slab based allocators are available for use.
SPARSEMEM code needs to know this as it can be called at various times
during the boot process.
Signed-off-by: default avatarMike Kravetz <kravetz@us.ibm.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 48564e62
...@@ -150,6 +150,7 @@ static inline void *kcalloc(size_t n, size_t size, gfp_t flags) ...@@ -150,6 +150,7 @@ static inline void *kcalloc(size_t n, size_t size, gfp_t flags)
extern void kfree(const void *); extern void kfree(const void *);
extern unsigned int ksize(const void *); extern unsigned int ksize(const void *);
extern int slab_is_available(void);
#ifdef CONFIG_NUMA #ifdef CONFIG_NUMA
extern void *kmem_cache_alloc_node(kmem_cache_t *, gfp_t flags, int node); extern void *kmem_cache_alloc_node(kmem_cache_t *, gfp_t flags, int node);
......
...@@ -700,6 +700,14 @@ static enum { ...@@ -700,6 +700,14 @@ static enum {
FULL FULL
} g_cpucache_up; } g_cpucache_up;
/*
* used by boot code to determine if it can use slab based allocator
*/
int slab_is_available(void)
{
return g_cpucache_up == FULL;
}
static DEFINE_PER_CPU(struct work_struct, reap_work); static DEFINE_PER_CPU(struct work_struct, reap_work);
static void free_block(struct kmem_cache *cachep, void **objpp, int len, static void free_block(struct kmem_cache *cachep, void **objpp, int len,
......
...@@ -32,7 +32,7 @@ static struct mem_section *sparse_index_alloc(int nid) ...@@ -32,7 +32,7 @@ static struct mem_section *sparse_index_alloc(int nid)
unsigned long array_size = SECTIONS_PER_ROOT * unsigned long array_size = SECTIONS_PER_ROOT *
sizeof(struct mem_section); sizeof(struct mem_section);
if (system_state == SYSTEM_RUNNING) if (slab_is_available())
section = kmalloc_node(array_size, GFP_KERNEL, nid); section = kmalloc_node(array_size, GFP_KERNEL, nid);
else else
section = alloc_bootmem_node(NODE_DATA(nid), array_size); section = alloc_bootmem_node(NODE_DATA(nid), array_size);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment