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

Commit 858d7188 authored by Morten Rasmussen's avatar Morten Rasmussen Committed by Dmitry Shmidt
Browse files

ANDROID: sched: Introduce SD_SHARE_CAP_STATES sched_domain flag



cpufreq is currently keeping it a secret which cpus are sharing
clock source. The scheduler needs to know about clock domains as well
to become more energy aware. The SD_SHARE_CAP_STATES domain flag
indicates whether cpus belonging to the sched_domain share capacity
states (P-states).

There is no connection with cpufreq (yet). The flag must be set by
the arch specific topology code.

cc: Russell King <linux@arm.linux.org.uk>
cc: Ingo Molnar <mingo@redhat.com>
cc: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: default avatarMorten Rasmussen <morten.rasmussen@arm.com>
Signed-off-by: default avatarAndres Oportus <andresoportus@google.com>
parent dd23c09a
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -277,7 +277,8 @@ void store_cpu_topology(unsigned int cpuid)

static inline int cpu_corepower_flags(void)
{
	return SD_SHARE_PKG_RESOURCES  | SD_SHARE_POWERDOMAIN;
	return SD_SHARE_PKG_RESOURCES  | SD_SHARE_POWERDOMAIN | \
	       SD_SHARE_CAP_STATES;
}

static struct sched_domain_topology_level arm_topology[] = {
+1 −0
Original line number Diff line number Diff line
@@ -1035,6 +1035,7 @@ extern void wake_up_q(struct wake_q_head *head);
#define SD_PREFER_SIBLING	0x1000	/* Prefer to place tasks in a sibling domain */
#define SD_OVERLAP		0x2000	/* sched_domains of this level overlap */
#define SD_NUMA			0x4000	/* cross-node balancing */
#define SD_SHARE_CAP_STATES	0x8000  /* Domain members share capacity state */

#ifdef CONFIG_SCHED_SMT
static inline int cpu_smt_flags(void)
+7 −3
Original line number Diff line number Diff line
@@ -5771,7 +5771,8 @@ static int sd_degenerate(struct sched_domain *sd)
			 SD_SHARE_CPUCAPACITY |
			 SD_ASYM_CPUCAPACITY |
			 SD_SHARE_PKG_RESOURCES |
			 SD_SHARE_POWERDOMAIN)) {
			 SD_SHARE_POWERDOMAIN |
			 SD_SHARE_CAP_STATES)) {
		if (sd->groups != sd->groups->next)
			return 0;
	}
@@ -5804,7 +5805,8 @@ sd_parent_degenerate(struct sched_domain *sd, struct sched_domain *parent)
				SD_SHARE_CPUCAPACITY |
				SD_SHARE_PKG_RESOURCES |
				SD_PREFER_SIBLING |
				SD_SHARE_POWERDOMAIN);
				SD_SHARE_POWERDOMAIN |
				SD_SHARE_CAP_STATES);
		if (nr_node_ids == 1)
			pflags &= ~SD_SERIALIZE;
	}
@@ -6487,6 +6489,7 @@ static int sched_domains_curr_level;
 *   SD_NUMA                - describes NUMA topologies
 *   SD_SHARE_POWERDOMAIN   - describes shared power domain
 *   SD_ASYM_CPUCAPACITY    - describes mixed capacity topologies
 *   SD_SHARE_CAP_STATES    - describes shared capacity states
 *
 * Odd one out, which beside describing the topology has a quirk also
 * prescribes the desired behaviour that goes along with it:
@@ -6499,7 +6502,8 @@ static int sched_domains_curr_level;
	 SD_NUMA |			\
	 SD_ASYM_PACKING |		\
	 SD_ASYM_CPUCAPACITY |		\
	 SD_SHARE_POWERDOMAIN)
	 SD_SHARE_POWERDOMAIN |		\
	 SD_SHARE_CAP_STATES)

static struct sched_domain *
sd_init(struct sched_domain_topology_level *tl,