|
@@ -24,21 +24,19 @@
|
|
|
*/
|
|
|
|
|
|
struct kmem_cache {
|
|
|
-/* 1) per-cpu data, touched during every alloc/free */
|
|
|
- struct array_cache *array[NR_CPUS];
|
|
|
-/* 2) Cache tunables. Protected by cache_chain_mutex */
|
|
|
+/* 1) Cache tunables. Protected by cache_chain_mutex */
|
|
|
unsigned int batchcount;
|
|
|
unsigned int limit;
|
|
|
unsigned int shared;
|
|
|
|
|
|
unsigned int buffer_size;
|
|
|
u32 reciprocal_buffer_size;
|
|
|
-/* 3) touched by every alloc & free from the backend */
|
|
|
+/* 2) touched by every alloc & free from the backend */
|
|
|
|
|
|
unsigned int flags; /* constant flags */
|
|
|
unsigned int num; /* # of objs per slab */
|
|
|
|
|
|
-/* 4) cache_grow/shrink */
|
|
|
+/* 3) cache_grow/shrink */
|
|
|
/* order of pgs per slab (2^n) */
|
|
|
unsigned int gfporder;
|
|
|
|
|
@@ -54,11 +52,11 @@ struct kmem_cache {
|
|
|
/* constructor func */
|
|
|
void (*ctor)(void *obj);
|
|
|
|
|
|
-/* 5) cache creation/removal */
|
|
|
+/* 4) cache creation/removal */
|
|
|
const char *name;
|
|
|
struct list_head next;
|
|
|
|
|
|
-/* 6) statistics */
|
|
|
+/* 5) statistics */
|
|
|
#ifdef CONFIG_DEBUG_SLAB
|
|
|
unsigned long num_active;
|
|
|
unsigned long num_allocations;
|
|
@@ -85,16 +83,18 @@ struct kmem_cache {
|
|
|
int obj_size;
|
|
|
#endif /* CONFIG_DEBUG_SLAB */
|
|
|
|
|
|
+/* 6) per-cpu/per-node data, touched during every alloc/free */
|
|
|
/*
|
|
|
- * We put nodelists[] at the end of kmem_cache, because we want to size
|
|
|
- * this array to nr_node_ids slots instead of MAX_NUMNODES
|
|
|
+ * We put array[] at the end of kmem_cache, because we want to size
|
|
|
+ * this array to nr_cpu_ids slots instead of NR_CPUS
|
|
|
* (see kmem_cache_init())
|
|
|
- * We still use [MAX_NUMNODES] and not [1] or [0] because cache_cache
|
|
|
- * is statically defined, so we reserve the max number of nodes.
|
|
|
+ * We still use [NR_CPUS] and not [1] or [0] because cache_cache
|
|
|
+ * is statically defined, so we reserve the max number of cpus.
|
|
|
*/
|
|
|
- struct kmem_list3 *nodelists[MAX_NUMNODES];
|
|
|
+ struct kmem_list3 **nodelists;
|
|
|
+ struct array_cache *array[NR_CPUS];
|
|
|
/*
|
|
|
- * Do not add fields after nodelists[]
|
|
|
+ * Do not add fields after array[]
|
|
|
*/
|
|
|
};
|
|
|
|