diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2016-04-27 16:37:35 -0600 |
|---|---|---|
| committer | Linux Build Service Account <lnxbuild@localhost> | 2016-04-27 16:37:35 -0600 |
| commit | 7b8a3eca5cd4d20a0428db67e8800b6255005909 (patch) | |
| tree | bb3b119ae8e0dfa296692962f78aa25bb3d6b325 /kernel | |
| parent | 329d280c9909b0974b47c1941976117535822c20 (diff) | |
| parent | be8119c92d0a5dd4170ca7fa0993ff167f96cc61 (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.c | 65 |
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; } |
