mirror of
https://github.com/torvalds/linux.git
synced 2026-06-08 06:25:52 +02:00
ANDROID: sched/fair: add arch scaling function for max frequency capping
To be able to scale the cpu capacity by this factor introduce a call to the new arch scaling function arch_scale_max_freq_capacity() in update_cpu_capacity() and provide a default implementation which returns SCHED_CAPACITY_SCALE. Another subsystem (e.g. cpufreq) or architectural or platform specific code can overwrite this default implementation, exactly as for frequency and cpu invariance. It has to be enabled by the arch by defining arch_scale_max_freq_capacity to the actual implementation. Signed-off-by: Ionela Voinescu <ionela.voinescu@arm.com> Signed-off-by: Dietmar Eggemann <dietmar.eggemann@arm.com> ( Fixed conflict with scaling against the PELT-based scale_rt_capacity ) Signed-off-by: Quentin Perret <quentin.perret@arm.com> Change-Id: I770a8b1f4f7340e9e314f71c64a765bf880f4b4d
This commit is contained in:
parent
c06013206c
commit
6c401bf9b0
|
|
@ -8357,10 +8357,9 @@ static inline int get_sd_load_idx(struct sched_domain *sd,
|
|||
return load_idx;
|
||||
}
|
||||
|
||||
static unsigned long scale_rt_capacity(struct sched_domain *sd, int cpu)
|
||||
static unsigned long scale_rt_capacity(int cpu, unsigned long max)
|
||||
{
|
||||
struct rq *rq = cpu_rq(cpu);
|
||||
unsigned long max = arch_scale_cpu_capacity(sd, cpu);
|
||||
unsigned long used, free;
|
||||
unsigned long irq;
|
||||
|
||||
|
|
@ -8382,10 +8381,15 @@ static unsigned long scale_rt_capacity(struct sched_domain *sd, int cpu)
|
|||
|
||||
static void update_cpu_capacity(struct sched_domain *sd, int cpu)
|
||||
{
|
||||
unsigned long capacity = scale_rt_capacity(sd, cpu);
|
||||
unsigned long capacity = arch_scale_cpu_capacity(sd, cpu);
|
||||
struct sched_group *sdg = sd->groups;
|
||||
|
||||
cpu_rq(cpu)->cpu_capacity_orig = arch_scale_cpu_capacity(sd, cpu);
|
||||
cpu_rq(cpu)->cpu_capacity_orig = capacity;
|
||||
|
||||
capacity *= arch_scale_max_freq_capacity(sd, cpu);
|
||||
capacity >>= SCHED_CAPACITY_SHIFT;
|
||||
|
||||
capacity = scale_rt_capacity(cpu, capacity);
|
||||
|
||||
if (!capacity)
|
||||
capacity = 1;
|
||||
|
|
|
|||
|
|
@ -1809,6 +1809,15 @@ unsigned long arch_scale_freq_capacity(int cpu)
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifndef arch_scale_max_freq_capacity
|
||||
struct sched_domain;
|
||||
static __always_inline
|
||||
unsigned long arch_scale_max_freq_capacity(struct sched_domain *sd, int cpu)
|
||||
{
|
||||
return SCHED_CAPACITY_SCALE;
|
||||
}
|
||||
#endif
|
||||
|
||||
struct rq *__task_rq_lock(struct task_struct *p, struct rq_flags *rf)
|
||||
__acquires(rq->lock);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user