Commit 8a506873 authored by Guan Jing's avatar Guan Jing Committed by Lu Jialin
Browse files

sched: programmable: Add hook in can_migrate_task()

hulk inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I8OIT1



--------------------------------

Add hook of sched type in can_migrate_task(), as follows:
    'cfs_can_migrate_task'
     Decide whether the task can be migrated to dst_cpu.

Signed-off-by: default avatarGuan Jing <guanjing6@huawei.com>
parent 5cbe2342
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -2491,6 +2491,13 @@ struct sched_migrate_ctx {
	int sd_flag;
	int new_cpu;
};

struct sched_migrate_node {
	int src_cpu;
	int src_node;
	int dst_cpu;
	int dst_node;
};
#endif

#ifdef CONFIG_SCHED_CORE
+2 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0 */
BPF_SCHED_HOOK(int, -1, cfs_select_rq, struct sched_migrate_ctx *ctx)
BPF_SCHED_HOOK(int, -1, cfs_can_migrate_task, struct task_struct *p,
			struct sched_migrate_node *migrate_node)
+17 −0
Original line number Diff line number Diff line
@@ -9907,9 +9907,26 @@ static
int can_migrate_task(struct task_struct *p, struct lb_env *env)
{
	int tsk_cache_hot;
#ifdef CONFIG_BPF_SCHED
	struct sched_migrate_node migrate_node;
	int ret;
#endif

	lockdep_assert_rq_held(env->src_rq);

#ifdef CONFIG_BPF_SCHED
	if (bpf_sched_enabled()) {
		migrate_node.src_cpu = env->src_cpu;
		migrate_node.src_node = cpu_to_node(env->src_cpu);
		migrate_node.dst_cpu = env->dst_cpu;
		migrate_node.dst_node = cpu_to_node(env->dst_cpu);

		ret = bpf_sched_cfs_can_migrate_task(p, &migrate_node);
		if (!ret)
			return ret;
	}
#endif

	/*
	 * We do not migrate tasks that are:
	 * 1) throttled_lb_pair, or