Commit 4a711dd9 authored by Chen Ridong's avatar Chen Ridong Committed by Tejun Heo
Browse files

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: default avatarChen Ridong <chenridong@huawei.com>
Reviewed-by: default avatarKamalesh Babulal <kamalesh.babulal@oracle.com>
Reviewed-by: default avatarWaiman Long <longman@redhat.com>
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
parent c149c4a4
Loading
Loading
Loading
Loading
+24 −15
Original line number Diff line number Diff line
@@ -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
 * 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);

	mutex_lock(&cpuset_mutex);
	cs->attach_in_progress--;
	if (!cs->attach_in_progress)
		wake_up(&cpuset_attach_wq);
	dec_attach_in_progress_locked(cs);

	if (cs->nr_migrate_dl_tasks) {
		int cpu = cpumask_any(cs->effective_cpus);
@@ -3539,9 +3557,7 @@ static void cpuset_attach(struct cgroup_taskset *tset)
		reset_migrate_dl_data(cs);
	}

	cs->attach_in_progress--;
	if (!cs->attach_in_progress)
		wake_up(&cpuset_attach_wq);
	dec_attach_in_progress_locked(cs);

	mutex_unlock(&cpuset_mutex);
}
@@ -4284,11 +4300,7 @@ static void cpuset_cancel_fork(struct task_struct *task, struct css_set *cset)
	if (same_cs)
		return;

	mutex_lock(&cpuset_mutex);
	cs->attach_in_progress--;
	if (!cs->attach_in_progress)
		wake_up(&cpuset_attach_wq);
	mutex_unlock(&cpuset_mutex);
	dec_attach_in_progress(cs);
}

/*
@@ -4320,10 +4332,7 @@ static void cpuset_fork(struct task_struct *task)
	guarantee_online_mems(cs, &cpuset_attach_nodemask_to);
	cpuset_attach_task(cs, task);

	cs->attach_in_progress--;
	if (!cs->attach_in_progress)
		wake_up(&cpuset_attach_wq);

	dec_attach_in_progress_locked(cs);
	mutex_unlock(&cpuset_mutex);
}