|
@@ -6090,7 +6090,6 @@ mem_cgroup_css_alloc(struct cgroup *cont)
|
|
|
&per_cpu(memcg_stock, cpu);
|
|
|
INIT_WORK(&stock->work, drain_local_stock);
|
|
|
}
|
|
|
- hotcpu_notifier(memcg_cpu_hotplug_callback, 0);
|
|
|
} else {
|
|
|
parent = mem_cgroup_from_cont(cont->parent);
|
|
|
memcg->use_hierarchy = parent->use_hierarchy;
|
|
@@ -6756,6 +6755,19 @@ struct cgroup_subsys mem_cgroup_subsys = {
|
|
|
.use_id = 1,
|
|
|
};
|
|
|
|
|
|
+/*
|
|
|
+ * The rest of init is performed during ->css_alloc() for root css which
|
|
|
+ * happens before initcalls. hotcpu_notifier() can't be done together as
|
|
|
+ * it would introduce circular locking by adding cgroup_lock -> cpu hotplug
|
|
|
+ * dependency. Do it from a subsys_initcall().
|
|
|
+ */
|
|
|
+static int __init mem_cgroup_init(void)
|
|
|
+{
|
|
|
+ hotcpu_notifier(memcg_cpu_hotplug_callback, 0);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+subsys_initcall(mem_cgroup_init);
|
|
|
+
|
|
|
#ifdef CONFIG_MEMCG_SWAP
|
|
|
static int __init enable_swap_account(char *s)
|
|
|
{
|