cgroup/cpuset: add decrease attach_in_progress helpers

There are several functions to decrease attach_in_progress, and they
will wake up cpuset_attach_wq when attach_in_progress is zero. So,
add a helper to make it concise.

Signed-off-by: Chen Ridong <chenridong@huawei.com>
Reviewed-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Reviewed-by: Waiman Long <longman@redhat.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
This commit is contained in:
Chen Ridong 2024-07-26 01:05:02 +00:00 committed by Tejun Heo
parent c149c4a48b
commit 4a711dd910

View File

@ -490,6 +490,26 @@ static inline void check_insane_mems_config(nodemask_t *nodes)
} }
} }
/*
* decrease cs->attach_in_progress.
* wake_up cpuset_attach_wq if cs->attach_in_progress==0.
*/
static inline void dec_attach_in_progress_locked(struct cpuset *cs)
{
lockdep_assert_held(&cpuset_mutex);
cs->attach_in_progress--;
if (!cs->attach_in_progress)
wake_up(&cpuset_attach_wq);
}
static inline void dec_attach_in_progress(struct cpuset *cs)
{
mutex_lock(&cpuset_mutex);
dec_attach_in_progress_locked(cs);
mutex_unlock(&cpuset_mutex);
}
/* /*
* Cgroup v2 behavior is used on the "cpus" and "mems" control files when * Cgroup v2 behavior is used on the "cpus" and "mems" control files when
* on default hierarchy or when the cpuset_v2_mode flag is set by mounting * on default hierarchy or when the cpuset_v2_mode flag is set by mounting
@ -3422,9 +3442,7 @@ static void cpuset_cancel_attach(struct cgroup_taskset *tset)
cs = css_cs(css); cs = css_cs(css);
mutex_lock(&cpuset_mutex); mutex_lock(&cpuset_mutex);
cs->attach_in_progress--; dec_attach_in_progress_locked(cs);
if (!cs->attach_in_progress)
wake_up(&cpuset_attach_wq);
if (cs->nr_migrate_dl_tasks) { if (cs->nr_migrate_dl_tasks) {
int cpu = cpumask_any(cs->effective_cpus); int cpu = cpumask_any(cs->effective_cpus);
@ -3539,9 +3557,7 @@ static void cpuset_attach(struct cgroup_taskset *tset)
reset_migrate_dl_data(cs); reset_migrate_dl_data(cs);
} }
cs->attach_in_progress--; dec_attach_in_progress_locked(cs);
if (!cs->attach_in_progress)
wake_up(&cpuset_attach_wq);
mutex_unlock(&cpuset_mutex); mutex_unlock(&cpuset_mutex);
} }
@ -4284,11 +4300,7 @@ static void cpuset_cancel_fork(struct task_struct *task, struct css_set *cset)
if (same_cs) if (same_cs)
return; return;
mutex_lock(&cpuset_mutex); dec_attach_in_progress(cs);
cs->attach_in_progress--;
if (!cs->attach_in_progress)
wake_up(&cpuset_attach_wq);
mutex_unlock(&cpuset_mutex);
} }
/* /*
@ -4320,10 +4332,7 @@ static void cpuset_fork(struct task_struct *task)
guarantee_online_mems(cs, &cpuset_attach_nodemask_to); guarantee_online_mems(cs, &cpuset_attach_nodemask_to);
cpuset_attach_task(cs, task); cpuset_attach_task(cs, task);
cs->attach_in_progress--; dec_attach_in_progress_locked(cs);
if (!cs->attach_in_progress)
wake_up(&cpuset_attach_wq);
mutex_unlock(&cpuset_mutex); mutex_unlock(&cpuset_mutex);
} }