|
@@ -553,9 +553,7 @@ static struct arraycache_init initarray_generic =
|
|
|
{ {0, BOOT_CPUCACHE_ENTRIES, 1, 0} };
|
|
|
|
|
|
/* internal cache of cache description objs */
|
|
|
-static struct kmem_list3 *kmem_cache_nodelists[MAX_NUMNODES];
|
|
|
static struct kmem_cache kmem_cache_boot = {
|
|
|
- .nodelists = kmem_cache_nodelists,
|
|
|
.batchcount = 1,
|
|
|
.limit = BOOT_CPUCACHE_ENTRIES,
|
|
|
.shared = 1,
|
|
@@ -1559,6 +1557,15 @@ static void __init set_up_list3s(struct kmem_cache *cachep, int index)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+ * The memory after the last cpu cache pointer is used for the
|
|
|
+ * the nodelists pointer.
|
|
|
+ */
|
|
|
+static void setup_nodelists_pointer(struct kmem_cache *cachep)
|
|
|
+{
|
|
|
+ cachep->nodelists = (struct kmem_list3 **)&cachep->array[nr_cpu_ids];
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* Initialisation. Called after the page allocator have been initialised and
|
|
|
* before smp_init().
|
|
@@ -1573,15 +1580,14 @@ void __init kmem_cache_init(void)
|
|
|
int node;
|
|
|
|
|
|
kmem_cache = &kmem_cache_boot;
|
|
|
+ setup_nodelists_pointer(kmem_cache);
|
|
|
|
|
|
if (num_possible_nodes() == 1)
|
|
|
use_alien_caches = 0;
|
|
|
|
|
|
- for (i = 0; i < NUM_INIT_LISTS; i++) {
|
|
|
+ for (i = 0; i < NUM_INIT_LISTS; i++)
|
|
|
kmem_list3_init(&initkmem_list3[i]);
|
|
|
- if (i < MAX_NUMNODES)
|
|
|
- kmem_cache->nodelists[i] = NULL;
|
|
|
- }
|
|
|
+
|
|
|
set_up_list3s(kmem_cache, CACHE_CACHE);
|
|
|
|
|
|
/*
|
|
@@ -1619,7 +1625,6 @@ void __init kmem_cache_init(void)
|
|
|
list_add(&kmem_cache->list, &slab_caches);
|
|
|
kmem_cache->colour_off = cache_line_size();
|
|
|
kmem_cache->array[smp_processor_id()] = &initarray_cache.cache;
|
|
|
- kmem_cache->nodelists[node] = &initkmem_list3[CACHE_CACHE + node];
|
|
|
|
|
|
/*
|
|
|
* struct kmem_cache size depends on nr_node_ids & nr_cpu_ids
|
|
@@ -2422,7 +2427,7 @@ __kmem_cache_create (struct kmem_cache *cachep, unsigned long flags)
|
|
|
else
|
|
|
gfp = GFP_NOWAIT;
|
|
|
|
|
|
- cachep->nodelists = (struct kmem_list3 **)&cachep->array[nr_cpu_ids];
|
|
|
+ setup_nodelists_pointer(cachep);
|
|
|
#if DEBUG
|
|
|
|
|
|
/*
|