slab: Simplify bootstrap
[platform/adaptation/renesas_rcar/renesas_kernel.git] / include / linux / slab_def.h
index 604ebc8..45c0356 100644 (file)
@@ -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[]
         */
@@ -111,11 +115,10 @@ void *kmem_cache_alloc(struct kmem_cache *, gfp_t);
 void *__kmalloc(size_t size, gfp_t flags);
 
 #ifdef CONFIG_TRACING
-extern void *kmem_cache_alloc_trace(size_t size,
-                                   struct kmem_cache *cachep, gfp_t flags);
+extern void *kmem_cache_alloc_trace(struct kmem_cache *, gfp_t, size_t);
 #else
 static __always_inline void *
-kmem_cache_alloc_trace(size_t size, struct kmem_cache *cachep, gfp_t flags)
+kmem_cache_alloc_trace(struct kmem_cache *cachep, gfp_t flags, size_t size)
 {
        return kmem_cache_alloc(cachep, flags);
 }
@@ -148,7 +151,7 @@ found:
 #endif
                        cachep = malloc_sizes[i].cs_cachep;
 
-               ret = kmem_cache_alloc_trace(size, cachep, flags);
+               ret = kmem_cache_alloc_trace(cachep, flags, size);
 
                return ret;
        }
@@ -160,16 +163,16 @@ extern void *__kmalloc_node(size_t size, gfp_t flags, int node);
 extern void *kmem_cache_alloc_node(struct kmem_cache *, gfp_t flags, int node);
 
 #ifdef CONFIG_TRACING
-extern void *kmem_cache_alloc_node_trace(size_t size,
-                                        struct kmem_cache *cachep,
+extern void *kmem_cache_alloc_node_trace(struct kmem_cache *cachep,
                                         gfp_t flags,
-                                        int nodeid);
+                                        int nodeid,
+                                        size_t size);
 #else
 static __always_inline void *
-kmem_cache_alloc_node_trace(size_t size,
-                           struct kmem_cache *cachep,
+kmem_cache_alloc_node_trace(struct kmem_cache *cachep,
                            gfp_t flags,
-                           int nodeid)
+                           int nodeid,
+                           size_t size)
 {
        return kmem_cache_alloc_node(cachep, flags, nodeid);
 }
@@ -201,7 +204,7 @@ found:
 #endif
                        cachep = malloc_sizes[i].cs_cachep;
 
-               return kmem_cache_alloc_node_trace(size, cachep, flags, node);
+               return kmem_cache_alloc_node_trace(cachep, flags, node, size);
        }
        return __kmalloc_node(size, flags, node);
 }