Unverified Commit 2d258ab1 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!2319 add a mutex lock for qos_level

Merge Pull Request from: @zhangwei123171 
 


 In order to reduce the concurrent operations introduced
    by users setting qos_level, we add a mutex lock.

 
 
Link:https://gitee.com/openeuler/kernel/pulls/2319

 

Reviewed-by: default avatarzhao xiaoqiang <zhaoxiaoqiang11@jd.com>
Reviewed-by: default avatarZucheng Zheng <zhengzucheng@huawei.com>
Signed-off-by: default avatarJialin Zhang <zhangjialin11@huawei.com>
parents 0d6eaed4 995f0e60
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -8572,6 +8572,13 @@ static inline int alloc_qos_sched_group(struct task_group *tg,
#ifdef CONFIG_QOS_SCHED_SMT_EXPELLER
	tg->smt_expell = parent->smt_expell;
#endif
	tg->qos_level_mutex = kzalloc(sizeof(struct mutex), GFP_KERNEL);

	if (!tg->qos_level_mutex)
		return 0;

	mutex_init(tg->qos_level_mutex);

	return 1;
}

@@ -9515,6 +9522,7 @@ static int tg_change_scheduler(struct task_group *tg, void *data)
	s64 qos_level = *(s64 *)data;
	struct cgroup_subsys_state *css = &tg->css;

	mutex_lock(tg->qos_level_mutex);
	tg->qos_level = qos_level;
	if (is_offline_level(qos_level))
		policy = SCHED_IDLE;
@@ -9532,6 +9540,7 @@ static int tg_change_scheduler(struct task_group *tg, void *data)
		sched_setscheduler(tsk, policy, &param);
	}
	css_task_iter_end(&it);
	mutex_unlock(tg->qos_level_mutex);

	return 0;
}
+3 −0
Original line number Diff line number Diff line
@@ -12897,6 +12897,9 @@ void free_fair_sched_group(struct task_group *tg)
			kfree(tg->se[i]);
	}

#ifdef CONFIG_QOS_SCHED
	kfree(tg->qos_level_mutex);
#endif
	kfree(tg->cfs_rq);
	kfree(tg->se);
}
+4 −0
Original line number Diff line number Diff line
@@ -466,7 +466,11 @@ struct task_group {
#else
	KABI_RESERVE(2)
#endif
#ifdef CONFIG_QOS_SCHED
	KABI_USE(3, struct mutex *qos_level_mutex)
#else
	KABI_RESERVE(3)
#endif
	KABI_RESERVE(4)
};