Hi Mark
The last set of MP patches [1] uncovered some issues (particularly [2])
and we believe it safest if we revert the changes until the situation is
fully understood. So please accept this pull request which does this.
Thanks.
[1] http://lists.linaro.org/pipermail/linaro-kernel/2014-March/012975.html
[2] http://lists.linaro.org/pipermail/linaro-kernel/2014-April/013086.html
The following changes since commit 5a570cfc01b06906faa8ac67ad7c0c6f278761c4:
hmp: dont attempt to pull tasks if affinity doesn't allow it (2014-03-24 15:14:35 +0000)
are available in the git repository at:
git://git.linaro.org/arm/big.LITTLE/mp.git for-lsk
for you to fetch changes up to db3dba6818796b90053d5b1bc9f15837acdc9b9c:
Revert "hmp: sched: Clean up hmp_up_threshold checks into a utility fn" (2014-04-08 16:43:25 +0100)
----------------------------------------------------------------
Jon Medhurst (4):
Revert "hmp: dont attempt to pull tasks if affinity doesn't allow it"
Revert "hmp: Use idle pull to perform forced up-migrations"
Revert "sched: hmp: unify active migration code"
Revert "hmp: sched: Clean up hmp_up_threshold checks into a utility fn"
kernel/sched/core.c | 11 +-
kernel/sched/fair.c | 386 +++++++++++++++++++++++---------------------------
kernel/sched/sched.h | 1 -
3 files changed, 177 insertions(+), 221 deletions(-)
.driver_data field is only required to be filled if drivers want to preserve
some data in there which they can use according to the value of .frequency
field. But this driver isn't using this field at all, but just setting it equal
to the index value. Which isn't required. Fix it.
Signed-off-by: Viresh Kumar <viresh.kumar(a)linaro.org>
---
V1->V2: No Change
Hi Rafael,
To avoid confusion I am sending all related cpufreq patches again.
drivers/cpufreq/ia64-acpi-cpufreq.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/drivers/cpufreq/ia64-acpi-cpufreq.c b/drivers/cpufreq/ia64-acpi-cpufreq.c
index a22b5d1..beb191b 100644
--- a/drivers/cpufreq/ia64-acpi-cpufreq.c
+++ b/drivers/cpufreq/ia64-acpi-cpufreq.c
@@ -275,7 +275,6 @@ acpi_cpufreq_cpu_init (
/* table init */
for (i = 0; i <= data->acpi_data.state_count; i++)
{
- data->freq_table[i].driver_data = i;
if (i < data->acpi_data.state_count) {
data->freq_table[i].frequency =
data->acpi_data.states[i].core_frequency * 1000;
--
1.7.12.rc2.18.g61b472e
In anticipation of modifying the up_threshold handling, make all
instances use the same utility fn to check if a task is eligible
for up-migration. This also removes the previous difference in
threshold comparison where up-migration used '!<threshold' and
idle pull used '>threshold' to decide up-migration eligibility.
Make them both use '!<threshold' instead for consistency, although
this is unlikely to change any results.
Signed-off-by: Chris Redpath <chris.redpath(a)arm.com>
---
kernel/sched/fair.c | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 62a8808..29e2c74 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -6734,6 +6734,14 @@ static void nohz_idle_balance(int this_cpu, enum cpu_idle_type idle) { }
#endif
#ifdef CONFIG_SCHED_HMP
+static unsigned int hmp_task_eligible_for_up_migration(struct sched_entity *se)
+{
+ /* below hmp_up_threshold, never eligible */
+ if (se->avg.load_avg_ratio < hmp_up_threshold)
+ return 0;
+ return 1;
+}
+
/* Check if task should migrate to a faster cpu */
static unsigned int hmp_up_migration(int cpu, int *target_cpu, struct sched_entity *se)
{
@@ -6749,7 +6757,7 @@ static unsigned int hmp_up_migration(int cpu, int *target_cpu, struct sched_enti
if (p->prio >= hmp_up_prio)
return 0;
#endif
- if (se->avg.load_avg_ratio < hmp_up_threshold)
+ if (!hmp_task_eligible_for_up_migration(se))
return 0;
/* Let the task load settle before doing another up migration */
@@ -7237,7 +7245,10 @@ static unsigned int hmp_idle_pull(int this_cpu)
}
orig = curr;
curr = hmp_get_heaviest_task(curr, 1);
- if (curr->avg.load_avg_ratio > hmp_up_threshold &&
+ /* check if heaviest eligible task on this
+ * CPU is heavier than previous task
+ */
+ if (hmp_task_eligible_for_up_migration(curr) &&
curr->avg.load_avg_ratio > ratio) {
p = task_of(curr);
target = rq;
--
1.7.9.5
Changelog:
V2:
* Added comment in changelog for calls order (5/17)
* Call the powerdown only for cpu0 in the pm notifier
* Set the pm notifier for all boards
V1: initial post
This patchset relies on the cpm_pm notifier to initiate the powerdown sequence
operations from pm.c instead cpuidle.c. Thus the cpuidle driver is no longer
dependent from arch specific code as everything is called from the pm.c file.
The patchset applies on top of linux-samsung/for-next.
Tested on exynos4: 4210
Tested on exynos5: 5250 (without AFTR)
Daniel Lezcano (17):
ARM: exynos: cpuidle: Prevent forward declaration
ARM: exynos: cpuidle: use cpuidle_register
ARM: exynos: cpuidle: change function name prefix
ARM: exynos: cpuidle: encapsulate register access inside a function
ARM: exynos: cpuidle: Move some code inside the idle_finisher
ARM: exynos: cpuidle: Fix S5P_WAKEUP_STAT call
ARM: exynos: cpuidle: Use the cpu_pm notifier
ARM: exynos: cpuidle: Move scu_enable in the cpu_pm notifier
ARM: exynos: cpuidle: Remove ifdef for scu_enable
ARM: exynos: cpuidle: Move exynos_set_wakeupmask in the cpu_pm
notifier
ARM: exynos: cpuidle: Move the power sequence call in the cpu_pm
notifier
ARM: exynos: cpuidle: Move S5P_CHECK_AFTR in a header
ARM: exynos: cpuidle: Move clock setup to pm.c
ARM: exynos: cpuidle: Move the boot vector in pm.c
ARM: exynos: cpuidle: Pass the AFTR callback to the platform_data
ARM: exynos: cpuidle: Move the driver to drivers/cpuidle directory
ARM: exynos: config: Enable cpuidle
arch/arm/configs/exynos_defconfig | 1 +
arch/arm/mach-exynos/Makefile | 1 -
arch/arm/mach-exynos/common.c | 5 +-
arch/arm/mach-exynos/common.h | 1 +
arch/arm/mach-exynos/cpuidle.c | 256 -------------------------------------
arch/arm/mach-exynos/pm.c | 191 ++++++++++++++++++++++-----
arch/arm/mach-exynos/pmu.c | 6 +
arch/arm/mach-exynos/regs-pmu.h | 1 +
drivers/cpuidle/Kconfig.arm | 7 +
drivers/cpuidle/Makefile | 1 +
drivers/cpuidle/cpuidle-exynos.c | 102 +++++++++++++++
11 files changed, 281 insertions(+), 291 deletions(-)
delete mode 100644 arch/arm/mach-exynos/cpuidle.c
create mode 100644 drivers/cpuidle/cpuidle-exynos.c
--
1.7.9.5