Linux Headquarters
[ Register ]
[ About us ] [ Home Page ]

Advertisement
[ Kernel ] [ Documentation ] [ Links ] [ Books ]

Advertisement

Kernel v2.6.24.1 /mm/slab.c

Filename:/mm/slab.c
Lines Added:23
Lines Deleted:23
Also changed in: (Previous) 2.6.24-git19  2.6.24-git18  2.6.24.1-rc1  2.6.24-git17  2.6.24-git16  2.6.24-git15 
(Following) 2.6.24-git20  2.6.24-git21  2.6.24-git22  2.6.24.2  2.6.24.4-rc2  2.6.24.4-rc3 

Location
[  2.6.24.1
  [  mm
     o  slab.c

Patch

diff --git a/mm/slab.c b/mm/slab.c
index b03b2e4..ff31261 100644
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -304,11 +304,11 @@ struct kmem_list3 {
 /*
  * Need this for bootstrapping a per node allocator.
  */
-#define NUM_INIT_LISTS (2 * MAX_NUMNODES + 1)
+#define NUM_INIT_LISTS (3 * MAX_NUMNODES)
 struct kmem_list3 __initdata initkmem_list3[NUM_INIT_LISTS];
 #define   CACHE_CACHE 0
-#define   SIZE_AC 1
-#define   SIZE_L3 (1 + MAX_NUMNODES)
+#define   SIZE_AC MAX_NUMNODES
+#define   SIZE_L3 (2 * MAX_NUMNODES)
 
 static int drain_freelist(struct kmem_cache *cache,
          struct kmem_list3 *l3, int tofree);
@@ -1410,6 +1410,22 @@ static void init_list(struct kmem_cache *cachep, struct kmem_list3 *list,
 }
 
 /*
+ * For setting up all the kmem_list3s for cache whose buffer_size is same as
+ * size of kmem_list3.
+ */
+static void __init set_up_list3s(struct kmem_cache *cachep, int index)
+{
+   int node;
+
+   for_each_online_node(node) {
+      cachep->nodelists[node] = &initkmem_list3[index + node];
+      cachep->nodelists[node]->next_reap = jiffies +
+          REAPTIMEOUT_LIST3 +
+          ((unsigned long)cachep) % REAPTIMEOUT_LIST3;
+   }
+}
+
+/*
  * Initialisation.  Called after the page allocator have been initialised and
  * before smp_init().
  */
@@ -1432,6 +1448,7 @@ void __init kmem_cache_init(void)
       if (i < MAX_NUMNODES)
          cache_cache.nodelists[i] = NULL;
    }
+   set_up_list3s(&cache_cache, CACHE_CACHE);
 
    /*
     * Fragmentation resistance on low memory - only use bigger
@@ -1587,10 +1604,9 @@ void __init kmem_cache_init(void)
    {
       int nid;
 
-      /* Replace the static kmem_list3 structures for the boot cpu */
-      init_list(&cache_cache, &initkmem_list3[CACHE_CACHE], node);
-
       for_each_online_node(nid) {
+         init_list(&cache_cache, &initkmem_list3[CACHE_CACHE], nid);
+
          init_list(malloc_sizes[INDEX_AC].cs_cachep,
               &initkmem_list3[SIZE_AC + nid], nid);
 
@@ -1960,22 +1976,6 @@ static void slab_destroy(struct kmem_cache *cachep, struct slab *slabp)
    }
 }
 
-/*
- * For setting up all the kmem_list3s for cache whose buffer_size is same as
- * size of kmem_list3.
- */
-static void __init set_up_list3s(struct kmem_cache *cachep, int index)
-{
-   int node;
-
-   for_each_online_node(node) {
-      cachep->nodelists[node] = &initkmem_list3[index + node];
-      cachep->nodelists[node]->next_reap = jiffies +
-          REAPTIMEOUT_LIST3 +
-          ((unsigned long)cachep) % REAPTIMEOUT_LIST3;
-   }
-}
-
 static void __kmem_cache_destroy(struct kmem_cache *cachep)
 {
    int i;
@@ -2099,7 +2099,7 @@ static int __init_refok setup_cpu_cache(struct kmem_cache *cachep)
          g_cpucache_up = PARTIAL_L3;
       } else {
          int node;
-         for_each_node_state(node, N_NORMAL_MEMORY) {
+         for_each_online_node(node) {
             cachep->nodelists[node] =
                 kmalloc_node(sizeof(struct kmem_list3),
                   GFP_KERNEL, node);


Comments: webmaster (at) linuxhq.com.
Advertising: banners (at) linuxhq.com.
Compilation ©1998-2008 Linux Headquarters, Inc.