summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2016-04-27 16:37:35 -0600
committerLinux Build Service Account <lnxbuild@localhost>2016-04-27 16:37:35 -0600
commit7b8a3eca5cd4d20a0428db67e8800b6255005909 (patch)
treebb3b119ae8e0dfa296692962f78aa25bb3d6b325 /kernel
parent329d280c9909b0974b47c1941976117535822c20 (diff)
parentbe8119c92d0a5dd4170ca7fa0993ff167f96cc61 (diff)
Promotion of kernel.lnx.4.4-160425.
CRs Change ID Subject -------------------------------------------------------------------------------------------------------------- 1000754 I5e04980eb451b193e9c024bfe35383d10d17feff phy: ufs-qcom: add optional ref aux clk 1007183 I34f7cbf2aa10b63712e5142f908fa77ae195f5b1 dwc3-msm: Don't perform bus voting from dwc3 driver prob 1005638 Icbf1e0abb937d4196677aa896a5386fbaa8ae034 msm: mdss: send FB registered event before initializing 1005638 I94dde166dabf2b3260b6cae34bfcdf0e99fe4112 msm: mdss: hdmi: enable scrambler during handoff 1004652 I59ba98d86bf0532a7e4c2cfa03d65e57e6a7fdcf crypto: ice: update ICE HCI v3 1004290 I57123159b9fade665a775fe060d6cba34f0ec5ad ARM: dts: msm: add L7, L17, and L25 regulator pin contro 1008022 I2427f674ef4889c39580dc2568a6b9566f03f8f2 bluetooth: Fix populating issue for no DT node 936208 I930b7c0ffdce0f1bfc4f8a582a698be16ed44d1f mm: fix compile time error with !CONFIG_CMA 954074 Ife0b5b62805b827449a1bb1002348db445f03c60 crypto: ice: split the config callback 1000724 Ib2fe58e6c4f0da7a14c10b74328c17fc5abaa7c8 ARM: dts: msm: add MDSS DSI device node for msmcobalt 954074 I51ff1e99240386ce533b5ab3f5f024043532b0ad scsi: ufs: qcom-ice: block further requests until ICE co 1005497 I35751afdc418cd5bd38422d90cedcfd97442a6f7 ARM: dts: msm: Fix used registers' offset with QUSB PHY 998162 I4bd278c9f6e22cdaeed012d0d0d6314acfacd36e ARM: msm: dts: Add interrupt and clock gpios for codec o 1005619 I244ad4b1ae3936f4362d6b85f04985a611b82d99 msm: mdss: fix bit offset in pps configuraiton for dsc 983048 I59f6c2a5cb552f4462a1ebd3ff8e1c64e7519e2c ARM: dts: msm: add sensor information for LMH DCVS senso 1005638 I8279b8933386db184ed2c627cef928321cbc3eea msm: mdss: hdmi: do not toggle power for HDMI modules 983048 If1c078fbb432bd9f314cd788edfab5ebb7687117 defconfig: msm: enable QCOM_THERMAL_LIMITS_DCVS 996008 I43f33505be5151640ad7dc2ee1a14df8a55a6dfe msm: mdss: update backlight during unblank if required 983048 I70d4bc387717491256fec1ef6bd8cd6a28ea641b drivers: thermal: add LMH-DCVS driver 998162 I753a782a1b4587ac77c4dd6afc6b6a3ec07fcd8b ARM: msm: dts: Use msm codec pinctrl for wsa881x reset g 1004149 I0cd5adc5c9c6ff9979b6d3a626541e6755029d2f msm: thermal: Support thermal driver for 4.4 kernel 984609 I3cd3699af1aa63b12e43a9d53ac505235b668e98 msm: mdss: reset WB mixercfg during WB destroy 1003142 I113c42a906b2b455026326a98e4d68bb85c5b10b ARM: dts: msm: Move QUSB PHY device node from dt to st o 1000576 1000756 If851190cc2ec863d8d8a556e1002d7a9f08668d1 ARM: dts: msm: add MDSS DSI PLL device node for msmcobal 954074 Id7f8a3302fac9fafd1203d8d56ca13d59b45bbd5 PFK: fix race between key set and key invalidate in TZ 1006303 I752f020acf1a76580edb5cd0e5ad283b62edfeed sched: revise sched_boost to make the best of big cluste 1000576 1000756 Ic11a3747a0e008e1f71df91a1a79d33242d2a2a4 clk: msm: mdss: add support for dsi pll on msmcobalt 1002077 998162 I3255322fe3ee9784c688dd4ec6eea69974a4d684 ARM: dts: Add slimbus instance entries for msmcobalt 1007775 I2bc9c0fedefef931ad2bf36841a0226f5dcca3d8 ARM: dts: msm: load ipa3-uc on MSMCobalt 983048 Ia80616cc97737beadc1c327bcac399d9f7849f25 ARM: dts: msm: Add LMH DCVS device bindings for msmcobal 999123 I894a877346ff1d395c6f1b06267dfec333cb1024 net: ipc_router: Fix xprt_info use after free issue 1001330 Ic5cba530ea22cd19a20a21f0c33433c5e023debc clk: msm: clock-gcc-cobalt: Source HMSS RCGs off cxo ao 994200 I64aba71bb4c5602df9a524b77bd8bf3296dda012 msm: mdss: fix possible race condition in mdp resource c 1004686 I9dfeb46520e0d1b1fc6f850a007fce35bdc60d35 md: dm-req-crypt: Increase mempool size for dm-req-crypt 1006797 I331463e3de8e6ff874995b122aa7415a7da64b31 gpio: qpnp-pin: Fix crash while freeing memory when prob 983048 I2912eaf418d5e7ea4d62a9a55702e02b744a785b drivers: msm_thermal: use OSM to set CPU freq limits 1004678 Ib1edeac145ef1696e657f775cd938839b79dbac0 crypto: ice: add stub bus scaling functions 990377 I3aa62bf78d296cb68b10013a24816e7016acab65 msm: mdss: Fix deadlock between AD lock and mdp clk lock 1000754 Id93509ddcf298ee076b46703d9a55a5a7ba60638 phy: qcom-ufs: update pll max voltage 1005638 If2f4fb5837c0a0a380d95be8292b8d5064eaec0f msm: mdss: hdmi: update power module state during probe 1005638 Iffdf3b974ceaf0cade50d0589a2d5014136fbd69 msm: mdss: hdmi: add debug method to print panel event n 987965 I3241ed89979deb777ca62d0c893afb96926820ee msm: mdss: Fix potential pipe NULL pointer dereference Change-Id: I576557c0d199cd57f5127da5f9c74bcc3e748c08 CRs-Fixed: 1006303, 1005619, 1000756, 1000754, 999123, 1003142, 1005497, 1004149, 983048, 1001330, 996008, 1007775, 987965, 954074, 1004678, 1000576, 998162, 1002077, 936208, 1004652, 1004290, 990377, 1007183, 1000724, 1006797, 1004686, 1008022, 994200, 984609, 1005638
Diffstat (limited to 'kernel')
-rw-r--r--kernel/sched/fair.c65
1 files changed, 48 insertions, 17 deletions
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 7e25cce86c94..997339470655 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -2675,6 +2675,12 @@ struct cpu_pwr_stats __weak *get_cpu_pwr_stats(void)
return NULL;
}
+enum sched_boost_type {
+ SCHED_BOOST_NONE,
+ SCHED_BOOST_ON_BIG,
+ SCHED_BOOST_ON_ALL,
+};
+
#ifdef CONFIG_SCHED_HMP
/* Initial task load. Newly created tasks are assigned this load. */
@@ -2995,31 +3001,46 @@ done:
* tasks with load close to the upmigrate threshold
*/
-static int task_load_will_fit(struct task_struct *p, u64 task_load, int cpu)
+static int task_load_will_fit(struct task_struct *p, u64 task_load, int cpu,
+ enum sched_boost_type boost_type)
{
int upmigrate;
if (cpu_capacity(cpu) == max_capacity)
return 1;
- if (task_nice(p) > sched_upmigrate_min_nice || upmigrate_discouraged(p))
- return 1;
+ if (boost_type != SCHED_BOOST_ON_BIG) {
+ if (task_nice(p) > sched_upmigrate_min_nice ||
+ upmigrate_discouraged(p))
+ return 1;
- upmigrate = sched_upmigrate;
- if (cpu_capacity(task_cpu(p)) > cpu_capacity(cpu))
- upmigrate = sched_downmigrate;
+ upmigrate = sched_upmigrate;
+ if (cpu_capacity(task_cpu(p)) > cpu_capacity(cpu))
+ upmigrate = sched_downmigrate;
- if (task_load < upmigrate)
- return 1;
+ if (task_load < upmigrate)
+ return 1;
+ }
return 0;
}
+static enum sched_boost_type sched_boost_type(void)
+{
+ if (sched_boost()) {
+ if (min_possible_efficiency != max_possible_efficiency)
+ return SCHED_BOOST_ON_BIG;
+ else
+ return SCHED_BOOST_ON_ALL;
+ }
+ return SCHED_BOOST_NONE;
+}
+
static int task_will_fit(struct task_struct *p, int cpu)
{
u64 tload = scale_load_to_cpu(task_load(p), cpu);
- return task_load_will_fit(p, tload, cpu);
+ return task_load_will_fit(p, tload, cpu, sched_boost_type());
}
int group_will_fit(struct sched_cluster *cluster,
@@ -3123,9 +3144,9 @@ struct cpu_select_env {
u8 reason;
u8 need_idle:1;
u8 need_waker_cluster:1;
- u8 boost:1;
u8 sync:1;
u8 ignore_prev_cpu:1;
+ enum sched_boost_type boost_type;
int prev_cpu;
DECLARE_BITMAP(candidate_list, NR_CPUS);
DECLARE_BITMAP(backup_list, NR_CPUS);
@@ -3272,7 +3293,8 @@ select_least_power_cluster(struct cpu_select_env *env)
env->task_load = scale_load_to_cpu(task_load(env->p),
cpu);
- if (task_load_will_fit(env->p, env->task_load, cpu))
+ if (task_load_will_fit(env->p, env->task_load, cpu,
+ env->boost_type))
return cluster;
__set_bit(cluster->id, env->backup_list);
@@ -3507,7 +3529,8 @@ static void find_best_cpu_in_cluster(struct sched_cluster *c,
update_spare_capacity(stats, env, i, c->capacity,
env->cpu_load);
- if (env->boost || env->need_waker_cluster ||
+ if (env->boost_type == SCHED_BOOST_ON_ALL ||
+ env->need_waker_cluster ||
sched_cpu_high_irqload(i) ||
spill_threshold_crossed(env, cpu_rq(i)))
continue;
@@ -3550,8 +3573,8 @@ bias_to_prev_cpu(struct cpu_select_env *env, struct cluster_cpu_stats *stats)
struct task_struct *task = env->p;
struct sched_cluster *cluster;
- if (env->boost || env->reason || env->need_idle ||
- !sched_short_sleep_task_threshold)
+ if (env->boost_type != SCHED_BOOST_NONE || env->reason ||
+ env->need_idle || !sched_short_sleep_task_threshold)
return false;
prev_cpu = env->prev_cpu;
@@ -3572,7 +3595,8 @@ bias_to_prev_cpu(struct cpu_select_env *env, struct cluster_cpu_stats *stats)
env->task_load = scale_load_to_cpu(task_load(task), prev_cpu);
cluster = cpu_rq(prev_cpu)->cluster;
- if (!task_load_will_fit(task, env->task_load, prev_cpu)) {
+ if (!task_load_will_fit(task, env->task_load, prev_cpu,
+ sched_boost_type())) {
__set_bit(cluster->id, env->backup_list);
__clear_bit(cluster->id, env->candidate_list);
@@ -3625,7 +3649,7 @@ static int select_best_cpu(struct task_struct *p, int target, int reason,
.reason = reason,
.need_idle = wake_to_idle(p),
.need_waker_cluster = 0,
- .boost = sched_boost(),
+ .boost_type = sched_boost_type(),
.sync = sync,
.prev_cpu = target,
.ignore_prev_cpu = 0,
@@ -4203,6 +4227,12 @@ static inline int migration_needed(struct task_struct *p, int cpu)
if (task_will_be_throttled(p))
return 0;
+ if (sched_boost_type() == SCHED_BOOST_ON_BIG) {
+ if (cpu_capacity(cpu) != max_capacity)
+ return UP_MIGRATION;
+ return 0;
+ }
+
if (sched_cpu_high_irqload(cpu))
return IRQLOAD_MIGRATION;
@@ -4297,7 +4327,8 @@ unsigned int cpu_temp(int cpu)
struct cpu_select_env;
struct sched_cluster;
-static inline int task_will_fit(struct task_struct *p, int cpu)
+static inline int task_will_fit(struct task_struct *p, int cpu,
+ enum sched_boost_type boost_type)
{
return 1;
}