HMP: Update migration timer when we fork-migrate
authorChris Redpath <chris.redpath@arm.com>
Tue, 3 Feb 2015 07:50:59 +0000 (16:50 +0900)
committerSeung-Woo Kim <sw0312.kim@samsung.com>
Wed, 14 Dec 2016 04:41:46 +0000 (13:41 +0900)
Prevents fork-migration adversely interacting with normal
migration (i.e. runqueues containing forked tasks being
selected as migration targets when there is a better
choice available)

Signed-off-by: Chris Redpath <chris.redpath@arm.com>
Signed-off-by: Liviu Dudau <liviu.dudau@arm.com>
Signed-off-by: Jon Medhurst <tixy@linaro.org>
[k.kozlowski: rebased on 4.1, no signed-off-by of previous committer]
Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
kernel/sched/fair.c

index 280b650..8ca38e6 100644 (file)
@@ -5573,18 +5573,26 @@ select_task_rq_fair(struct task_struct *p, int prev_cpu, int sd_flag, int wake_f
                if(hmp_cpu_is_fastest(prev_cpu)) {
                        struct hmp_domain *hmpdom = list_entry(&hmp_cpu_domain(prev_cpu)->hmp_domains, struct hmp_domain, hmp_domains);
                        __always_unused int lowest_ratio = hmp_domain_min_load(hmpdom, &new_cpu);
-                       if(new_cpu != NR_CPUS && cpumask_test_cpu(new_cpu,tsk_cpus_allowed(p)))
+                       if (new_cpu != NR_CPUS &&
+                               cpumask_test_cpu(new_cpu,
+                                               tsk_cpus_allowed(p))) {
+                               hmp_next_up_delay(&p->se, new_cpu);
                                return new_cpu;
-                       else {
-                               new_cpu = cpumask_any_and(&hmp_faster_domain(cpu)->cpus,
+                       } else {
+                               new_cpu = cpumask_any_and(
+                                               &hmp_faster_domain(cpu)->cpus,
                                                tsk_cpus_allowed(p));
-                               if(new_cpu < nr_cpu_ids)
+                               if (new_cpu < nr_cpu_ids) {
+                                       hmp_next_up_delay(&p->se, new_cpu);
                                        return new_cpu;
+                               }
                        }
                } else {
                        new_cpu = hmp_select_faster_cpu(p, prev_cpu);
-                       if (new_cpu != NR_CPUS)
+                       if (new_cpu != NR_CPUS) {
+                               hmp_next_up_delay(&p->se, new_cpu);
                                return new_cpu;
+                       }
                }
        }
 #endif