diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c index 7c9e97553a00..9e2e96fa57e9 100644 --- a/kernel/cgroup/cgroup.c +++ b/kernel/cgroup/cgroup.c @@ -5720,6 +5720,8 @@ int __init cgroup_init_early(void) } static u16 cgroup_disable_mask __initdata; +static u16 cgroup_enable_mask __initdata; +static int __init cgroup_disable(char *str); /** * cgroup_init - cgroup initialization @@ -5759,6 +5761,12 @@ int __init cgroup_init(void) mutex_unlock(&cgroup_mutex); + /* Apply an implicit disable... */ + cgroup_disable("memory"); + + /* ...knowing that an explicit enable will override it. */ + cgroup_disable_mask &= ~cgroup_enable_mask; + for_each_subsys(ss, ssid) { if (ss->early_init) { struct cgroup_subsys_state *css = @@ -6178,6 +6186,28 @@ static int __init cgroup_disable(char *str) } __setup("cgroup_disable=", cgroup_disable); +static int __init cgroup_enable(char *str) +{ + struct cgroup_subsys *ss; + char *token; + int i; + + while ((token = strsep(&str, ",")) != NULL) { + if (!*token) + continue; + + for_each_subsys(ss, i) { + if (strcmp(token, ss->name) && + strcmp(token, ss->legacy_name)) + continue; + + cgroup_enable_mask |= 1 << i; + } + } + return 1; +} +__setup("cgroup_enable=", cgroup_enable); + void __init __weak enable_debug_cgroup(void) { } static int __init enable_cgroup_debug(char *str)