Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c28f9d39 authored by Quentin Perret's avatar Quentin Perret Committed by Quentin Perret
Browse files

ANDROID: sched/core: Add a latency-sensitive flag to uclamp



Add a 'latency_sensitive' flag to uclamp in order to express the need
for some tasks to find a CPU where they can wake-up quickly. This is not
expected to be used without cgroup support, so add solely a cgroup
interface for it.

As this flag represents a boolean attribute and not an amount of
resources to be shared, it is not clear what the delegation logic should
be. As such, it is kept simple: every new cgroup starts with
latency_sensitive set to false, regardless of the parent.

In essence, this is similar to SchedTune's prefer-idle flag which was
used in android-4.19 and prior.

Change-Id: I722d8ecabb428bb7b95a5b54bc70a87f182dde2a
Signed-off-by: default avatarQuentin Perret <quentin.perret@arm.com>
parent 588085fe
Loading
Loading
Loading
Loading
+33 −0
Original line number Diff line number Diff line
@@ -7356,6 +7356,27 @@ static int cpu_uclamp_max_show(struct seq_file *sf, void *v)
	cpu_uclamp_print(sf, UCLAMP_MAX);
	return 0;
}

static int cpu_uclamp_ls_write_u64(struct cgroup_subsys_state *css,
				   struct cftype *cftype, u64 ls)
{
	struct task_group *tg;

	if (ls > 1)
		return -EINVAL;
	tg = css_tg(css);
	tg->latency_sensitive = (unsigned int) ls;

	return 0;
}

static u64 cpu_uclamp_ls_read_u64(struct cgroup_subsys_state *css,
				  struct cftype *cft)
{
	struct task_group *tg = css_tg(css);

	return (u64) tg->latency_sensitive;
}
#endif /* CONFIG_UCLAMP_TASK_GROUP */

#ifdef CONFIG_FAIR_GROUP_SCHED
@@ -7716,6 +7737,12 @@ static struct cftype cpu_legacy_files[] = {
		.seq_show = cpu_uclamp_max_show,
		.write = cpu_uclamp_max_write,
	},
	{
		.name = "uclamp.latency_sensitive",
		.flags = CFTYPE_NOT_ON_ROOT,
		.read_u64 = cpu_uclamp_ls_read_u64,
		.write_u64 = cpu_uclamp_ls_write_u64,
	},
#endif
	{ }	/* Terminate */
};
@@ -7897,6 +7924,12 @@ static struct cftype cpu_files[] = {
		.seq_show = cpu_uclamp_max_show,
		.write = cpu_uclamp_max_write,
	},
	{
		.name = "uclamp.latency_sensitive",
		.flags = CFTYPE_NOT_ON_ROOT,
		.read_u64 = cpu_uclamp_ls_read_u64,
		.write_u64 = cpu_uclamp_ls_write_u64,
	},
#endif
	{ }	/* terminate */
};
+2 −0
Original line number Diff line number Diff line
@@ -399,6 +399,8 @@ struct task_group {
	struct uclamp_se	uclamp_req[UCLAMP_CNT];
	/* Effective clamp values used for a task group */
	struct uclamp_se	uclamp[UCLAMP_CNT];
	/* Latency-sensitive flag used for a task group */
	unsigned int		latency_sensitive;
#endif

};