diff options
Diffstat (limited to 'mm/slab.c')
| -rw-r--r-- | mm/slab.c | 19 |
1 files changed, 15 insertions, 4 deletions
| @@ -700,6 +700,14 @@ static enum { | |||
| 700 | FULL | 700 | FULL |
| 701 | } g_cpucache_up; | 701 | } g_cpucache_up; |
| 702 | 702 | ||
| 703 | /* | ||
| 704 | * used by boot code to determine if it can use slab based allocator | ||
| 705 | */ | ||
| 706 | int slab_is_available(void) | ||
| 707 | { | ||
| 708 | return g_cpucache_up == FULL; | ||
| 709 | } | ||
| 710 | |||
| 703 | static DEFINE_PER_CPU(struct work_struct, reap_work); | 711 | static DEFINE_PER_CPU(struct work_struct, reap_work); |
| 704 | 712 | ||
| 705 | static void free_block(struct kmem_cache *cachep, void **objpp, int len, | 713 | static void free_block(struct kmem_cache *cachep, void **objpp, int len, |
| @@ -2192,11 +2200,14 @@ static void drain_cpu_caches(struct kmem_cache *cachep) | |||
| 2192 | check_irq_on(); | 2200 | check_irq_on(); |
| 2193 | for_each_online_node(node) { | 2201 | for_each_online_node(node) { |
| 2194 | l3 = cachep->nodelists[node]; | 2202 | l3 = cachep->nodelists[node]; |
| 2195 | if (l3) { | 2203 | if (l3 && l3->alien) |
| 2204 | drain_alien_cache(cachep, l3->alien); | ||
| 2205 | } | ||
| 2206 | |||
| 2207 | for_each_online_node(node) { | ||
| 2208 | l3 = cachep->nodelists[node]; | ||
| 2209 | if (l3) | ||
| 2196 | drain_array(cachep, l3, l3->shared, 1, node); | 2210 | drain_array(cachep, l3, l3->shared, 1, node); |
| 2197 | if (l3->alien) | ||
| 2198 | drain_alien_cache(cachep, l3->alien); | ||
| 2199 | } | ||
| 2200 | } | 2211 | } |
| 2201 | } | 2212 | } |
| 2202 | 2213 | ||
