diff options
-rw-r--r-- | arch/blackfin/Kconfig | 8 | ||||
-rw-r--r-- | arch/frv/Kconfig | 8 | ||||
-rw-r--r-- | arch/m68knommu/Kconfig | 8 | ||||
-rw-r--r-- | arch/v850/Kconfig | 8 | ||||
-rw-r--r-- | include/linux/kmalloc_sizes.h | 20 | ||||
-rw-r--r-- | include/linux/slab.h | 15 | ||||
-rw-r--r-- | include/linux/slub_def.h | 19 | ||||
-rw-r--r-- | mm/slab.c | 19 |
8 files changed, 34 insertions, 71 deletions
diff --git a/arch/blackfin/Kconfig b/arch/blackfin/Kconfig index 1a4930509325..d80e5b1d686e 100644 --- a/arch/blackfin/Kconfig +++ b/arch/blackfin/Kconfig | |||
@@ -560,14 +560,6 @@ endchoice | |||
560 | 560 | ||
561 | source "mm/Kconfig" | 561 | source "mm/Kconfig" |
562 | 562 | ||
563 | config LARGE_ALLOCS | ||
564 | bool "Allow allocating large blocks (> 1MB) of memory" | ||
565 | help | ||
566 | Allow the slab memory allocator to keep chains for very large | ||
567 | memory sizes - upto 32MB. You may need this if your system has | ||
568 | a lot of RAM, and you need to able to allocate very large | ||
569 | contiguous chunks. If unsure, say N. | ||
570 | |||
571 | config BFIN_DMA_5XX | 563 | config BFIN_DMA_5XX |
572 | bool "Enable DMA Support" | 564 | bool "Enable DMA Support" |
573 | depends on (BF533 || BF532 || BF531 || BF537 || BF536 || BF534 || BF561) | 565 | depends on (BF533 || BF532 || BF531 || BF537 || BF536 || BF534 || BF561) |
diff --git a/arch/frv/Kconfig b/arch/frv/Kconfig index 114738a45582..74eef7111f2b 100644 --- a/arch/frv/Kconfig +++ b/arch/frv/Kconfig | |||
@@ -102,14 +102,6 @@ config HIGHPTE | |||
102 | with a lot of RAM, this can be wasteful of precious low memory. | 102 | with a lot of RAM, this can be wasteful of precious low memory. |
103 | Setting this option will put user-space page tables in high memory. | 103 | Setting this option will put user-space page tables in high memory. |
104 | 104 | ||
105 | config LARGE_ALLOCS | ||
106 | bool "Allow allocating large blocks (> 1MB) of memory" | ||
107 | help | ||
108 | Allow the slab memory allocator to keep chains for very large memory | ||
109 | sizes - up to 32MB. You may need this if your system has a lot of | ||
110 | RAM, and you need to able to allocate very large contiguous chunks. | ||
111 | If unsure, say N. | ||
112 | |||
113 | source "mm/Kconfig" | 105 | source "mm/Kconfig" |
114 | 106 | ||
115 | choice | 107 | choice |
diff --git a/arch/m68knommu/Kconfig b/arch/m68knommu/Kconfig index 823f73736bb5..adc64a2bafbb 100644 --- a/arch/m68knommu/Kconfig +++ b/arch/m68knommu/Kconfig | |||
@@ -470,14 +470,6 @@ config AVNET | |||
470 | default y | 470 | default y |
471 | depends on (AVNET5282) | 471 | depends on (AVNET5282) |
472 | 472 | ||
473 | config LARGE_ALLOCS | ||
474 | bool "Allow allocating large blocks (> 1MB) of memory" | ||
475 | help | ||
476 | Allow the slab memory allocator to keep chains for very large | ||
477 | memory sizes - upto 32MB. You may need this if your system has | ||
478 | a lot of RAM, and you need to able to allocate very large | ||
479 | contiguous chunks. If unsure, say N. | ||
480 | |||
481 | config 4KSTACKS | 473 | config 4KSTACKS |
482 | bool "Use 4Kb for kernel stacks instead of 8Kb" | 474 | bool "Use 4Kb for kernel stacks instead of 8Kb" |
483 | default y | 475 | default y |
diff --git a/arch/v850/Kconfig b/arch/v850/Kconfig index 5f54c1236c18..ace479ab273f 100644 --- a/arch/v850/Kconfig +++ b/arch/v850/Kconfig | |||
@@ -240,14 +240,6 @@ menu "Processor type and features" | |||
240 | config RESET_GUARD | 240 | config RESET_GUARD |
241 | bool "Reset Guard" | 241 | bool "Reset Guard" |
242 | 242 | ||
243 | config LARGE_ALLOCS | ||
244 | bool "Allow allocating large blocks (> 1MB) of memory" | ||
245 | help | ||
246 | Allow the slab memory allocator to keep chains for very large | ||
247 | memory sizes - upto 32MB. You may need this if your system has | ||
248 | a lot of RAM, and you need to able to allocate very large | ||
249 | contiguous chunks. If unsure, say N. | ||
250 | |||
251 | source "mm/Kconfig" | 243 | source "mm/Kconfig" |
252 | 244 | ||
253 | endmenu | 245 | endmenu |
diff --git a/include/linux/kmalloc_sizes.h b/include/linux/kmalloc_sizes.h index bda23e00ed71..e576b848ce10 100644 --- a/include/linux/kmalloc_sizes.h +++ b/include/linux/kmalloc_sizes.h | |||
@@ -19,17 +19,27 @@ | |||
19 | CACHE(32768) | 19 | CACHE(32768) |
20 | CACHE(65536) | 20 | CACHE(65536) |
21 | CACHE(131072) | 21 | CACHE(131072) |
22 | #if (NR_CPUS > 512) || (MAX_NUMNODES > 256) || !defined(CONFIG_MMU) | 22 | #if KMALLOC_MAX_SIZE >= 262144 |
23 | CACHE(262144) | 23 | CACHE(262144) |
24 | #endif | 24 | #endif |
25 | #ifndef CONFIG_MMU | 25 | #if KMALLOC_MAX_SIZE >= 524288 |
26 | CACHE(524288) | 26 | CACHE(524288) |
27 | #endif | ||
28 | #if KMALLOC_MAX_SIZE >= 1048576 | ||
27 | CACHE(1048576) | 29 | CACHE(1048576) |
28 | #ifdef CONFIG_LARGE_ALLOCS | 30 | #endif |
31 | #if KMALLOC_MAX_SIZE >= 2097152 | ||
29 | CACHE(2097152) | 32 | CACHE(2097152) |
33 | #endif | ||
34 | #if KMALLOC_MAX_SIZE >= 4194304 | ||
30 | CACHE(4194304) | 35 | CACHE(4194304) |
36 | #endif | ||
37 | #if KMALLOC_MAX_SIZE >= 8388608 | ||
31 | CACHE(8388608) | 38 | CACHE(8388608) |
39 | #endif | ||
40 | #if KMALLOC_MAX_SIZE >= 16777216 | ||
32 | CACHE(16777216) | 41 | CACHE(16777216) |
42 | #endif | ||
43 | #if KMALLOC_MAX_SIZE >= 33554432 | ||
33 | CACHE(33554432) | 44 | CACHE(33554432) |
34 | #endif /* CONFIG_LARGE_ALLOCS */ | 45 | #endif |
35 | #endif /* CONFIG_MMU */ | ||
diff --git a/include/linux/slab.h b/include/linux/slab.h index 6fb2ae214152..a015236cc572 100644 --- a/include/linux/slab.h +++ b/include/linux/slab.h | |||
@@ -74,6 +74,21 @@ static inline void *kmem_cache_alloc_node(struct kmem_cache *cachep, | |||
74 | #endif | 74 | #endif |
75 | 75 | ||
76 | /* | 76 | /* |
77 | * The largest kmalloc size supported by the slab allocators is | ||
78 | * 32 megabyte (2^25) or the maximum allocatable page order if that is | ||
79 | * less than 32 MB. | ||
80 | * | ||
81 | * WARNING: Its not easy to increase this value since the allocators have | ||
82 | * to do various tricks to work around compiler limitations in order to | ||
83 | * ensure proper constant folding. | ||
84 | */ | ||
85 | #define KMALLOC_SHIFT_HIGH ((MAX_ORDER + PAGE_SHIFT) <= 25 ? \ | ||
86 | (MAX_ORDER + PAGE_SHIFT) : 25) | ||
87 | |||
88 | #define KMALLOC_MAX_SIZE (1UL << KMALLOC_SHIFT_HIGH) | ||
89 | #define KMALLOC_MAX_ORDER (KMALLOC_SHIFT_HIGH - PAGE_SHIFT) | ||
90 | |||
91 | /* | ||
77 | * Common kmalloc functions provided by all allocators | 92 | * Common kmalloc functions provided by all allocators |
78 | */ | 93 | */ |
79 | void *__kmalloc(size_t, gfp_t); | 94 | void *__kmalloc(size_t, gfp_t); |
diff --git a/include/linux/slub_def.h b/include/linux/slub_def.h index a9fb92862aaa..0764c829d967 100644 --- a/include/linux/slub_def.h +++ b/include/linux/slub_def.h | |||
@@ -58,17 +58,6 @@ struct kmem_cache { | |||
58 | */ | 58 | */ |
59 | #define KMALLOC_SHIFT_LOW 3 | 59 | #define KMALLOC_SHIFT_LOW 3 |
60 | 60 | ||
61 | #ifdef CONFIG_LARGE_ALLOCS | ||
62 | #define KMALLOC_SHIFT_HIGH ((MAX_ORDER + PAGE_SHIFT) =< 25 ? \ | ||
63 | (MAX_ORDER + PAGE_SHIFT - 1) : 25) | ||
64 | #else | ||
65 | #if !defined(CONFIG_MMU) || NR_CPUS > 512 || MAX_NUMNODES > 256 | ||
66 | #define KMALLOC_SHIFT_HIGH 20 | ||
67 | #else | ||
68 | #define KMALLOC_SHIFT_HIGH 18 | ||
69 | #endif | ||
70 | #endif | ||
71 | |||
72 | /* | 61 | /* |
73 | * We keep the general caches in an array of slab caches that are used for | 62 | * We keep the general caches in an array of slab caches that are used for |
74 | * 2^x bytes of allocations. | 63 | * 2^x bytes of allocations. |
@@ -79,7 +68,7 @@ extern struct kmem_cache kmalloc_caches[KMALLOC_SHIFT_HIGH + 1]; | |||
79 | * Sorry that the following has to be that ugly but some versions of GCC | 68 | * Sorry that the following has to be that ugly but some versions of GCC |
80 | * have trouble with constant propagation and loops. | 69 | * have trouble with constant propagation and loops. |
81 | */ | 70 | */ |
82 | static inline int kmalloc_index(int size) | 71 | static inline int kmalloc_index(size_t size) |
83 | { | 72 | { |
84 | /* | 73 | /* |
85 | * We should return 0 if size == 0 but we use the smallest object | 74 | * We should return 0 if size == 0 but we use the smallest object |
@@ -87,7 +76,7 @@ static inline int kmalloc_index(int size) | |||
87 | */ | 76 | */ |
88 | WARN_ON_ONCE(size == 0); | 77 | WARN_ON_ONCE(size == 0); |
89 | 78 | ||
90 | if (size > (1 << KMALLOC_SHIFT_HIGH)) | 79 | if (size > KMALLOC_MAX_SIZE) |
91 | return -1; | 80 | return -1; |
92 | 81 | ||
93 | if (size > 64 && size <= 96) | 82 | if (size > 64 && size <= 96) |
@@ -110,17 +99,13 @@ static inline int kmalloc_index(int size) | |||
110 | if (size <= 64 * 1024) return 16; | 99 | if (size <= 64 * 1024) return 16; |
111 | if (size <= 128 * 1024) return 17; | 100 | if (size <= 128 * 1024) return 17; |
112 | if (size <= 256 * 1024) return 18; | 101 | if (size <= 256 * 1024) return 18; |
113 | #if KMALLOC_SHIFT_HIGH > 18 | ||
114 | if (size <= 512 * 1024) return 19; | 102 | if (size <= 512 * 1024) return 19; |
115 | if (size <= 1024 * 1024) return 20; | 103 | if (size <= 1024 * 1024) return 20; |
116 | #endif | ||
117 | #if KMALLOC_SHIFT_HIGH > 20 | ||
118 | if (size <= 2 * 1024 * 1024) return 21; | 104 | if (size <= 2 * 1024 * 1024) return 21; |
119 | if (size <= 4 * 1024 * 1024) return 22; | 105 | if (size <= 4 * 1024 * 1024) return 22; |
120 | if (size <= 8 * 1024 * 1024) return 23; | 106 | if (size <= 8 * 1024 * 1024) return 23; |
121 | if (size <= 16 * 1024 * 1024) return 24; | 107 | if (size <= 16 * 1024 * 1024) return 24; |
122 | if (size <= 32 * 1024 * 1024) return 25; | 108 | if (size <= 32 * 1024 * 1024) return 25; |
123 | #endif | ||
124 | return -1; | 109 | return -1; |
125 | 110 | ||
126 | /* | 111 | /* |
@@ -569,21 +569,6 @@ static void **dbg_userword(struct kmem_cache *cachep, void *objp) | |||
569 | #endif | 569 | #endif |
570 | 570 | ||
571 | /* | 571 | /* |
572 | * Maximum size of an obj (in 2^order pages) and absolute limit for the gfp | ||
573 | * order. | ||
574 | */ | ||
575 | #if defined(CONFIG_LARGE_ALLOCS) | ||
576 | #define MAX_OBJ_ORDER 13 /* up to 32Mb */ | ||
577 | #define MAX_GFP_ORDER 13 /* up to 32Mb */ | ||
578 | #elif defined(CONFIG_MMU) | ||
579 | #define MAX_OBJ_ORDER 5 /* 32 pages */ | ||
580 | #define MAX_GFP_ORDER 5 /* 32 pages */ | ||
581 | #else | ||
582 | #define MAX_OBJ_ORDER 8 /* up to 1Mb */ | ||
583 | #define MAX_GFP_ORDER 8 /* up to 1Mb */ | ||
584 | #endif | ||
585 | |||
586 | /* | ||
587 | * Do not go above this order unless 0 objects fit into the slab. | 572 | * Do not go above this order unless 0 objects fit into the slab. |
588 | */ | 573 | */ |
589 | #define BREAK_GFP_ORDER_HI 1 | 574 | #define BREAK_GFP_ORDER_HI 1 |
@@ -2002,7 +1987,7 @@ static size_t calculate_slab_order(struct kmem_cache *cachep, | |||
2002 | size_t left_over = 0; | 1987 | size_t left_over = 0; |
2003 | int gfporder; | 1988 | int gfporder; |
2004 | 1989 | ||
2005 | for (gfporder = 0; gfporder <= MAX_GFP_ORDER; gfporder++) { | 1990 | for (gfporder = 0; gfporder <= KMALLOC_MAX_ORDER; gfporder++) { |
2006 | unsigned int num; | 1991 | unsigned int num; |
2007 | size_t remainder; | 1992 | size_t remainder; |
2008 | 1993 | ||
@@ -2148,7 +2133,7 @@ kmem_cache_create (const char *name, size_t size, size_t align, | |||
2148 | * Sanity checks... these are all serious usage bugs. | 2133 | * Sanity checks... these are all serious usage bugs. |
2149 | */ | 2134 | */ |
2150 | if (!name || in_interrupt() || (size < BYTES_PER_WORD) || | 2135 | if (!name || in_interrupt() || (size < BYTES_PER_WORD) || |
2151 | (size > (1 << MAX_OBJ_ORDER) * PAGE_SIZE) || dtor) { | 2136 | size > KMALLOC_MAX_SIZE || dtor) { |
2152 | printk(KERN_ERR "%s: Early error in slab %s\n", __FUNCTION__, | 2137 | printk(KERN_ERR "%s: Early error in slab %s\n", __FUNCTION__, |
2153 | name); | 2138 | name); |
2154 | BUG(); | 2139 | BUG(); |