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

Commit e4188507 authored by Morten Rasmussen's avatar Morten Rasmussen Committed by Andres Oportus
Browse files

ANDROID: sched/fair: Fix sched_group_energy() to support per-cpu capacity states



sched_group_energy() was supposed to support per-cpu capacity states
(DVFS), however, while fixing a hotplug issue this was broken as we bail
out if there is no SD_SHARE_CAP_STATES flag set.

This patch implements the hotplug race check differently and should
therefore reinstate support for per-cpu capacity states.

Change-Id: I5b865666c9ce833dcfa6514c574580d75aa0a195
Signed-off-by: default avatarMorten Rasmussen <morten.rasmussen@arm.com>
Signed-off-by: default avatarQuentin Perret <quentin.perret@arm.com>
parent 352e0961
Loading
Loading
Loading
Loading
+9 −9
Original line number Diff line number Diff line
@@ -5582,15 +5582,7 @@ static int sched_group_energy(struct energy_env *eenv)
		 */
		sd = rcu_dereference(per_cpu(sd_scs, cpu));

		if (!sd)
			/*
			 * We most probably raced with hotplug; returning a
			 * wrong energy estimation is better than entering an
			 * infinite loop.
			 */
			return -EINVAL;

		if (sd->parent)
		if (sd && sd->parent)
			sg_shared_cap = sd->parent->groups;

		for_each_domain(cpu, sd) {
@@ -5645,6 +5637,14 @@ static int sched_group_energy(struct energy_env *eenv)

			} while (sg = sg->next, sg != sd->groups);
		}

		/*
		 * If we raced with hotplug and got an sd NULL-pointer;
		 * returning a wrong energy estimation is better than
		 * entering an infinite loop.
		 */
		if (cpumask_test_cpu(cpu, &visit_cpus))
			return -EINVAL;
next_cpu:
		cpumask_clear_cpu(cpu, &visit_cpus);
		continue;