diff options
-rw-r--r-- | Documentation/vm/slub.txt | 4 | ||||
-rw-r--r-- | include/linux/slab_def.h | 4 | ||||
-rw-r--r-- | mm/slab.c | 9 | ||||
-rw-r--r-- | mm/slub.c | 13 |
4 files changed, 16 insertions, 14 deletions
diff --git a/Documentation/vm/slub.txt b/Documentation/vm/slub.txt index dcf8bcf846d6..7c13f22a0c9e 100644 --- a/Documentation/vm/slub.txt +++ b/Documentation/vm/slub.txt | |||
@@ -50,14 +50,14 @@ F.e. in order to boot just with sanity checks and red zoning one would specify: | |||
50 | 50 | ||
51 | Trying to find an issue in the dentry cache? Try | 51 | Trying to find an issue in the dentry cache? Try |
52 | 52 | ||
53 | slub_debug=,dentry_cache | 53 | slub_debug=,dentry |
54 | 54 | ||
55 | to only enable debugging on the dentry cache. | 55 | to only enable debugging on the dentry cache. |
56 | 56 | ||
57 | Red zoning and tracking may realign the slab. We can just apply sanity checks | 57 | Red zoning and tracking may realign the slab. We can just apply sanity checks |
58 | to the dentry cache with | 58 | to the dentry cache with |
59 | 59 | ||
60 | slub_debug=F,dentry_cache | 60 | slub_debug=F,dentry |
61 | 61 | ||
62 | In case you forgot to enable debugging on the kernel command line: It is | 62 | In case you forgot to enable debugging on the kernel command line: It is |
63 | possible to enable debugging manually when the kernel is up. Look at the | 63 | possible to enable debugging manually when the kernel is up. Look at the |
diff --git a/include/linux/slab_def.h b/include/linux/slab_def.h index fcc48096ee64..39c3a5eb8ebe 100644 --- a/include/linux/slab_def.h +++ b/include/linux/slab_def.h | |||
@@ -41,7 +41,7 @@ static inline void *kmalloc(size_t size, gfp_t flags) | |||
41 | goto found; \ | 41 | goto found; \ |
42 | else \ | 42 | else \ |
43 | i++; | 43 | i++; |
44 | #include "kmalloc_sizes.h" | 44 | #include <linux/kmalloc_sizes.h> |
45 | #undef CACHE | 45 | #undef CACHE |
46 | { | 46 | { |
47 | extern void __you_cannot_kmalloc_that_much(void); | 47 | extern void __you_cannot_kmalloc_that_much(void); |
@@ -75,7 +75,7 @@ static inline void *kmalloc_node(size_t size, gfp_t flags, int node) | |||
75 | goto found; \ | 75 | goto found; \ |
76 | else \ | 76 | else \ |
77 | i++; | 77 | i++; |
78 | #include "kmalloc_sizes.h" | 78 | #include <linux/kmalloc_sizes.h> |
79 | #undef CACHE | 79 | #undef CACHE |
80 | { | 80 | { |
81 | extern void __you_cannot_kmalloc_that_much(void); | 81 | extern void __you_cannot_kmalloc_that_much(void); |
@@ -333,7 +333,7 @@ static __always_inline int index_of(const size_t size) | |||
333 | return i; \ | 333 | return i; \ |
334 | else \ | 334 | else \ |
335 | i++; | 335 | i++; |
336 | #include "linux/kmalloc_sizes.h" | 336 | #include <linux/kmalloc_sizes.h> |
337 | #undef CACHE | 337 | #undef CACHE |
338 | __bad_size(); | 338 | __bad_size(); |
339 | } else | 339 | } else |
@@ -2964,11 +2964,10 @@ static void *cache_alloc_refill(struct kmem_cache *cachep, gfp_t flags) | |||
2964 | struct array_cache *ac; | 2964 | struct array_cache *ac; |
2965 | int node; | 2965 | int node; |
2966 | 2966 | ||
2967 | node = numa_node_id(); | 2967 | retry: |
2968 | |||
2969 | check_irq_off(); | 2968 | check_irq_off(); |
2969 | node = numa_node_id(); | ||
2970 | ac = cpu_cache_get(cachep); | 2970 | ac = cpu_cache_get(cachep); |
2971 | retry: | ||
2972 | batchcount = ac->batchcount; | 2971 | batchcount = ac->batchcount; |
2973 | if (!ac->touched && batchcount > BATCHREFILL_LIMIT) { | 2972 | if (!ac->touched && batchcount > BATCHREFILL_LIMIT) { |
2974 | /* | 2973 | /* |
@@ -3280,7 +3279,7 @@ retry: | |||
3280 | if (local_flags & __GFP_WAIT) | 3279 | if (local_flags & __GFP_WAIT) |
3281 | local_irq_enable(); | 3280 | local_irq_enable(); |
3282 | kmem_flagcheck(cache, flags); | 3281 | kmem_flagcheck(cache, flags); |
3283 | obj = kmem_getpages(cache, flags, -1); | 3282 | obj = kmem_getpages(cache, local_flags, -1); |
3284 | if (local_flags & __GFP_WAIT) | 3283 | if (local_flags & __GFP_WAIT) |
3285 | local_irq_disable(); | 3284 | local_irq_disable(); |
3286 | if (obj) { | 3285 | if (obj) { |
@@ -1368,7 +1368,7 @@ static void deactivate_slab(struct kmem_cache *s, struct kmem_cache_cpu *c) | |||
1368 | struct page *page = c->page; | 1368 | struct page *page = c->page; |
1369 | int tail = 1; | 1369 | int tail = 1; |
1370 | 1370 | ||
1371 | if (c->freelist) | 1371 | if (page->freelist) |
1372 | stat(c, DEACTIVATE_REMOTE_FREES); | 1372 | stat(c, DEACTIVATE_REMOTE_FREES); |
1373 | /* | 1373 | /* |
1374 | * Merge cpu freelist into slab freelist. Typically we get here | 1374 | * Merge cpu freelist into slab freelist. Typically we get here |
@@ -1856,12 +1856,15 @@ static unsigned long calculate_alignment(unsigned long flags, | |||
1856 | * The hardware cache alignment cannot override the specified | 1856 | * The hardware cache alignment cannot override the specified |
1857 | * alignment though. If that is greater then use it. | 1857 | * alignment though. If that is greater then use it. |
1858 | */ | 1858 | */ |
1859 | if ((flags & SLAB_HWCACHE_ALIGN) && | 1859 | if (flags & SLAB_HWCACHE_ALIGN) { |
1860 | size > cache_line_size() / 2) | 1860 | unsigned long ralign = cache_line_size(); |
1861 | return max_t(unsigned long, align, cache_line_size()); | 1861 | while (size <= ralign / 2) |
1862 | ralign /= 2; | ||
1863 | align = max(align, ralign); | ||
1864 | } | ||
1862 | 1865 | ||
1863 | if (align < ARCH_SLAB_MINALIGN) | 1866 | if (align < ARCH_SLAB_MINALIGN) |
1864 | return ARCH_SLAB_MINALIGN; | 1867 | align = ARCH_SLAB_MINALIGN; |
1865 | 1868 | ||
1866 | return ALIGN(align, sizeof(void *)); | 1869 | return ALIGN(align, sizeof(void *)); |
1867 | } | 1870 | } |