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

Commit e367c5d7 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "sched/walt: Improve the scheduler"

parents 667c4465 6e4616df
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -2486,7 +2486,8 @@ static void ttwu_queue(struct task_struct *p, int cpu, int wake_flags)
	struct rq_flags rf;

#if defined(CONFIG_SMP)
	if (sched_feat(TTWU_QUEUE) && !cpus_share_cache(smp_processor_id(), cpu)) {
	if ((sched_feat(TTWU_QUEUE) && !cpus_share_cache(smp_processor_id(), cpu)) ||
			walt_want_remote_wakeup()) {
		sched_clock_cpu(cpu); /* Sync clocks across CPUs */
		ttwu_queue_remote(p, cpu, wake_flags);
		return;
+6 −9
Original line number Diff line number Diff line
@@ -6890,7 +6890,6 @@ enum fastpaths {
	NONE = 0,
	SYNC_WAKEUP,
	PREV_CPU_FASTPATH,
	MANY_WAKEUP,
};

static void find_best_target(struct sched_domain *sd, cpumask_t *cpus,
@@ -7686,8 +7685,13 @@ static int find_energy_efficient_cpu(struct task_struct *p, int prev_cpu,
	int delta = 0;
	int task_boost = per_task_boost(p);
	int boosted = (schedtune_task_boost(p) > 0) || (task_boost > 0);
	int start_cpu = get_start_cpu(p);
	int start_cpu;

	if (is_many_wakeup(sibling_count_hint) && prev_cpu != cpu &&
			cpumask_test_cpu(prev_cpu, &p->cpus_allowed))
		return prev_cpu;

	start_cpu = get_start_cpu(p);
	if (start_cpu < 0)
		goto eas_not_ready;

@@ -7714,13 +7718,6 @@ static int find_energy_efficient_cpu(struct task_struct *p, int prev_cpu,
		goto done;
	}

	if (is_many_wakeup(sibling_count_hint) && prev_cpu != cpu &&
				bias_to_this_cpu(p, prev_cpu, start_cpu)) {
		best_energy_cpu = prev_cpu;
		fbt_env.fastpath = MANY_WAKEUP;
		goto done;
	}

	rcu_read_lock();
	pd = rcu_dereference(rd->pd);
	if (!pd)
+10 −0
Original line number Diff line number Diff line
@@ -2740,6 +2740,12 @@ enum sched_boost_policy {

#ifdef CONFIG_SCHED_WALT

#define WALT_MANY_WAKEUP_DEFAULT 1000
static inline bool walt_want_remote_wakeup(void)
{
	return sysctl_sched_many_wakeup_threshold < WALT_MANY_WAKEUP_DEFAULT;
}

static inline int cluster_first_cpu(struct sched_cluster *cluster)
{
	return cpumask_first(&cluster->cpus);
@@ -3188,6 +3194,10 @@ static inline unsigned int power_cost(int cpu, u64 demand)
#endif

static inline void note_task_waking(struct task_struct *p, u64 wallclock) { }
static inline bool walt_want_remote_wakeup(void)
{
	return false;
}
#endif	/* CONFIG_SCHED_WALT */

struct sched_avg_stats {
+1 −1
Original line number Diff line number Diff line
@@ -1026,7 +1026,7 @@ unsigned int max_possible_efficiency = 1;
unsigned int min_possible_efficiency = UINT_MAX;

unsigned int sysctl_sched_conservative_pl;
unsigned int sysctl_sched_many_wakeup_threshold = 1000;
unsigned int sysctl_sched_many_wakeup_threshold = WALT_MANY_WAKEUP_DEFAULT;

#define INC_STEP 8
#define DEC_STEP 2