aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorJoonsoo Kim <iamjoonsoo.kim@lge.com>2013-10-23 21:07:49 -0400
committerPekka Enberg <penberg@iki.fi>2013-10-24 13:17:34 -0400
commit8456a648cf44f14365f1f44de90a3da2526a4776 (patch)
tree07504fe582df01cfb04c710ed9655e7d875ed32a /include/linux
parent106a74e13b329cf609c145dc198087c04f5f8ca5 (diff)
slab: use struct page for slab management
Now, there are a few field in struct slab, so we can overload these over struct page. This will save some memory and reduce cache footprint. After this change, slabp_cache and slab_size no longer related to a struct slab, so rename them as freelist_cache and freelist_size. These changes are just mechanical ones and there is no functional change. Acked-by: Andi Kleen <ak@linux.intel.com> Acked-by: Christoph Lameter <cl@linux.com> Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com> Signed-off-by: Pekka Enberg <penberg@iki.fi>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/mm_types.h21
-rw-r--r--include/linux/slab_def.h4
2 files changed, 15 insertions, 10 deletions
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
index 959cb369b197..95bf0c5a7eb9 100644
--- a/include/linux/mm_types.h
+++ b/include/linux/mm_types.h
@@ -42,18 +42,22 @@ struct page {
42 /* First double word block */ 42 /* First double word block */
43 unsigned long flags; /* Atomic flags, some possibly 43 unsigned long flags; /* Atomic flags, some possibly
44 * updated asynchronously */ 44 * updated asynchronously */
45 struct address_space *mapping; /* If low bit clear, points to 45 union {
46 * inode address_space, or NULL. 46 struct address_space *mapping; /* If low bit clear, points to
47 * If page mapped as anonymous 47 * inode address_space, or NULL.
48 * memory, low bit is set, and 48 * If page mapped as anonymous
49 * it points to anon_vma object: 49 * memory, low bit is set, and
50 * see PAGE_MAPPING_ANON below. 50 * it points to anon_vma object:
51 */ 51 * see PAGE_MAPPING_ANON below.
52 */
53 void *s_mem; /* slab first object */
54 };
55
52 /* Second double word */ 56 /* Second double word */
53 struct { 57 struct {
54 union { 58 union {
55 pgoff_t index; /* Our offset within mapping. */ 59 pgoff_t index; /* Our offset within mapping. */
56 void *freelist; /* slub/slob first free object */ 60 void *freelist; /* sl[aou]b first free object */
57 bool pfmemalloc; /* If set by the page allocator, 61 bool pfmemalloc; /* If set by the page allocator,
58 * ALLOC_NO_WATERMARKS was set 62 * ALLOC_NO_WATERMARKS was set
59 * and the low watermark was not 63 * and the low watermark was not
@@ -109,6 +113,7 @@ struct page {
109 }; 113 };
110 atomic_t _count; /* Usage count, see below. */ 114 atomic_t _count; /* Usage count, see below. */
111 }; 115 };
116 unsigned int active; /* SLAB */
112 }; 117 };
113 }; 118 };
114 119
diff --git a/include/linux/slab_def.h b/include/linux/slab_def.h
index cd401580bdd3..ca82e8ff89fa 100644
--- a/include/linux/slab_def.h
+++ b/include/linux/slab_def.h
@@ -41,8 +41,8 @@ struct kmem_cache {
41 41
42 size_t colour; /* cache colouring range */ 42 size_t colour; /* cache colouring range */
43 unsigned int colour_off; /* colour offset */ 43 unsigned int colour_off; /* colour offset */
44 struct kmem_cache *slabp_cache; 44 struct kmem_cache *freelist_cache;
45 unsigned int slab_size; 45 unsigned int freelist_size;
46 46
47 /* constructor func */ 47 /* constructor func */
48 void (*ctor)(void *obj); 48 void (*ctor)(void *obj);