--- x/kernel/cgroup/legacy_freezer.c +++ l/kernel/cgroup/legacy_freezer.c @@ -22,6 +22,8 @@ #include #include #include +#include +#include /* * A cgroup is freezing if any FREEZING flags are set. FREEZING_SELF is @@ -350,7 +352,7 @@ static void freezer_apply_state(struct f if (freeze) { if (!(freezer->state & CGROUP_FREEZING)) - static_branch_inc(&freezer_active); + static_key_slow_inc_cpuslocked(&freezer_active); freezer->state |= state; freeze_cgroup(freezer); } else { @@ -361,7 +363,7 @@ static void freezer_apply_state(struct f if (!(freezer->state & CGROUP_FREEZING)) { freezer->state &= ~CGROUP_FROZEN; if (was_freezing) - static_branch_dec(&freezer_active); + static_key_slow_dec_cpuslocked(&freezer_active); unfreeze_cgroup(freezer); } } @@ -379,6 +381,7 @@ static void freezer_change_state(struct { struct cgroup_subsys_state *pos; + cpus_read_lock(); /* * Update all its descendants in pre-order traversal. Each * descendant will try to inherit its parent's FREEZING state as @@ -407,6 +410,7 @@ static void freezer_change_state(struct } rcu_read_unlock(); mutex_unlock(&freezer_mutex); + cpus_read_unlock(); } static ssize_t freezer_write(struct kernfs_open_file *of,