|
@@ -479,11 +479,13 @@ EXPORT_SYMBOL(slab_buffer_size);
|
|
|
#endif
|
|
|
|
|
|
/*
|
|
|
- * Do not go above this order unless 0 objects fit into the slab.
|
|
|
+ * Do not go above this order unless 0 objects fit into the slab or
|
|
|
+ * overridden on the command line.
|
|
|
*/
|
|
|
#define SLAB_MAX_ORDER_HI 1
|
|
|
#define SLAB_MAX_ORDER_LO 0
|
|
|
static int slab_max_order = SLAB_MAX_ORDER_LO;
|
|
|
+static bool slab_max_order_set __initdata;
|
|
|
|
|
|
/*
|
|
|
* Functions for storing/retrieving the cachep and or slab from the page
|
|
@@ -851,6 +853,17 @@ static int __init noaliencache_setup(char *s)
|
|
|
}
|
|
|
__setup("noaliencache", noaliencache_setup);
|
|
|
|
|
|
+static int __init slab_max_order_setup(char *str)
|
|
|
+{
|
|
|
+ get_option(&str, &slab_max_order);
|
|
|
+ slab_max_order = slab_max_order < 0 ? 0 :
|
|
|
+ min(slab_max_order, MAX_ORDER - 1);
|
|
|
+ slab_max_order_set = true;
|
|
|
+
|
|
|
+ return 1;
|
|
|
+}
|
|
|
+__setup("slab_max_order=", slab_max_order_setup);
|
|
|
+
|
|
|
#ifdef CONFIG_NUMA
|
|
|
/*
|
|
|
* Special reaping functions for NUMA systems called from cache_reap().
|
|
@@ -1499,9 +1512,10 @@ void __init kmem_cache_init(void)
|
|
|
|
|
|
/*
|
|
|
* Fragmentation resistance on low memory - only use bigger
|
|
|
- * page orders on machines with more than 32MB of memory.
|
|
|
+ * page orders on machines with more than 32MB of memory if
|
|
|
+ * not overridden on the command line.
|
|
|
*/
|
|
|
- if (totalram_pages > (32 << 20) >> PAGE_SHIFT)
|
|
|
+ if (!slab_max_order_set && totalram_pages > (32 << 20) >> PAGE_SHIFT)
|
|
|
slab_max_order = SLAB_MAX_ORDER_HI;
|
|
|
|
|
|
/* Bootstrap is tricky, because several objects are allocated
|