Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / include / linux / slab_def.h
diff --git a/kernel/include/linux/slab_def.h b/kernel/include/linux/slab_def.h
new file mode 100644 (file)
index 0000000..33d0490
--- /dev/null
@@ -0,0 +1,79 @@
+#ifndef _LINUX_SLAB_DEF_H
+#define        _LINUX_SLAB_DEF_H
+
+#include <linux/reciprocal_div.h>
+
+/*
+ * Definitions unique to the original Linux SLAB allocator.
+ */
+
+struct kmem_cache {
+       struct array_cache __percpu *cpu_cache;
+
+/* 1) Cache tunables. Protected by slab_mutex */
+       unsigned int batchcount;
+       unsigned int limit;
+       unsigned int shared;
+
+       unsigned int size;
+       struct reciprocal_value reciprocal_buffer_size;
+/* 2) touched by every alloc & free from the backend */
+
+       unsigned int flags;             /* constant flags */
+       unsigned int num;               /* # of objs per slab */
+
+/* 3) cache_grow/shrink */
+       /* order of pgs per slab (2^n) */
+       unsigned int gfporder;
+
+       /* force GFP flags, e.g. GFP_DMA */
+       gfp_t allocflags;
+
+       size_t colour;                  /* cache colouring range */
+       unsigned int colour_off;        /* colour offset */
+       struct kmem_cache *freelist_cache;
+       unsigned int freelist_size;
+
+       /* constructor func */
+       void (*ctor)(void *obj);
+
+/* 4) cache creation/removal */
+       const char *name;
+       struct list_head list;
+       int refcount;
+       int object_size;
+       int align;
+
+/* 5) statistics */
+#ifdef CONFIG_DEBUG_SLAB
+       unsigned long num_active;
+       unsigned long num_allocations;
+       unsigned long high_mark;
+       unsigned long grown;
+       unsigned long reaped;
+       unsigned long errors;
+       unsigned long max_freeable;
+       unsigned long node_allocs;
+       unsigned long node_frees;
+       unsigned long node_overflow;
+       atomic_t allochit;
+       atomic_t allocmiss;
+       atomic_t freehit;
+       atomic_t freemiss;
+
+       /*
+        * If debugging is enabled, then the allocator can add additional
+        * fields and/or padding to every object. size contains the total
+        * object size including these internal fields, the following two
+        * variables contain the offset to the user object and its size.
+        */
+       int obj_offset;
+#endif /* CONFIG_DEBUG_SLAB */
+#ifdef CONFIG_MEMCG_KMEM
+       struct memcg_cache_params memcg_params;
+#endif
+
+       struct kmem_cache_node *node[MAX_NUMNODES];
+};
+
+#endif /* _LINUX_SLAB_DEF_H */