diff options
-rw-r--r-- | lib/Kconfig.debug | 2 | ||||
-rw-r--r-- | mm/slub.c | 30 |
2 files changed, 16 insertions, 16 deletions
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 0796c1a090c0..eef557dc46c3 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug | |||
@@ -211,7 +211,7 @@ config SLUB_DEBUG_ON | |||
211 | config SLUB_STATS | 211 | config SLUB_STATS |
212 | default n | 212 | default n |
213 | bool "Enable SLUB performance statistics" | 213 | bool "Enable SLUB performance statistics" |
214 | depends on SLUB | 214 | depends on SLUB && SLUB_DEBUG && SYSFS |
215 | help | 215 | help |
216 | SLUB statistics are useful to debug SLUBs allocation behavior in | 216 | SLUB statistics are useful to debug SLUBs allocation behavior in |
217 | order find ways to optimize the allocator. This should never be | 217 | order find ways to optimize the allocator. This should never be |
@@ -2688,21 +2688,6 @@ void kfree(const void *x) | |||
2688 | } | 2688 | } |
2689 | EXPORT_SYMBOL(kfree); | 2689 | EXPORT_SYMBOL(kfree); |
2690 | 2690 | ||
2691 | #if defined(CONFIG_SLUB_DEBUG) || defined(CONFIG_SLABINFO) | ||
2692 | static unsigned long count_partial(struct kmem_cache_node *n) | ||
2693 | { | ||
2694 | unsigned long flags; | ||
2695 | unsigned long x = 0; | ||
2696 | struct page *page; | ||
2697 | |||
2698 | spin_lock_irqsave(&n->list_lock, flags); | ||
2699 | list_for_each_entry(page, &n->partial, lru) | ||
2700 | x += page->inuse; | ||
2701 | spin_unlock_irqrestore(&n->list_lock, flags); | ||
2702 | return x; | ||
2703 | } | ||
2704 | #endif | ||
2705 | |||
2706 | /* | 2691 | /* |
2707 | * kmem_cache_shrink removes empty slabs from the partial lists and sorts | 2692 | * kmem_cache_shrink removes empty slabs from the partial lists and sorts |
2708 | * the remaining slabs by the number of items in use. The slabs with the | 2693 | * the remaining slabs by the number of items in use. The slabs with the |
@@ -3181,6 +3166,21 @@ void *__kmalloc_node_track_caller(size_t size, gfp_t gfpflags, | |||
3181 | return slab_alloc(s, gfpflags, node, caller); | 3166 | return slab_alloc(s, gfpflags, node, caller); |
3182 | } | 3167 | } |
3183 | 3168 | ||
3169 | #if (defined(CONFIG_SYSFS) && defined(CONFIG_SLUB_DEBUG)) || defined(CONFIG_SLABINFO) | ||
3170 | static unsigned long count_partial(struct kmem_cache_node *n) | ||
3171 | { | ||
3172 | unsigned long flags; | ||
3173 | unsigned long x = 0; | ||
3174 | struct page *page; | ||
3175 | |||
3176 | spin_lock_irqsave(&n->list_lock, flags); | ||
3177 | list_for_each_entry(page, &n->partial, lru) | ||
3178 | x += page->inuse; | ||
3179 | spin_unlock_irqrestore(&n->list_lock, flags); | ||
3180 | return x; | ||
3181 | } | ||
3182 | #endif | ||
3183 | |||
3184 | #if defined(CONFIG_SYSFS) && defined(CONFIG_SLUB_DEBUG) | 3184 | #if defined(CONFIG_SYSFS) && defined(CONFIG_SLUB_DEBUG) |
3185 | static int validate_slab(struct kmem_cache *s, struct page *page, | 3185 | static int validate_slab(struct kmem_cache *s, struct page *page, |
3186 | unsigned long *map) | 3186 | unsigned long *map) |