Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 346882
b: refs/heads/master
c: 3c58346
h: refs/heads/master
v: v3
  • Loading branch information
Christoph Lameter authored and Pekka Enberg committed Dec 11, 2012
1 parent 339a23e commit ee5bbbb
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 10 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 59a09917c95e5209135b4f1a87f1263d6ef40fdb
refs/heads/master: 3c58346525d82625e68e24f071804c2dc057b6f4
6 changes: 5 additions & 1 deletion trunk/include/linux/slab_def.h
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,13 @@ struct kmem_cache {
* (see kmem_cache_init())
* We still use [NR_CPUS] and not [1] or [0] because cache_cache
* is statically defined, so we reserve the max number of cpus.
*
* We also need to guarantee that the list is able to accomodate a
* pointer for each node since "nodelists" uses the remainder of
* available pointers.
*/
struct kmem_list3 **nodelists;
struct array_cache *array[NR_CPUS];
struct array_cache *array[NR_CPUS + MAX_NUMNODES];
/*
* Do not add fields after array[]
*/
Expand Down
21 changes: 13 additions & 8 deletions trunk/mm/slab.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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().
Expand All @@ -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);

/*
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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

/*
Expand Down

0 comments on commit ee5bbbb

Please sign in to comment.