On Fri, Oct 12, 2012 at 04:33:19PM +0100, Jon Medhurst (Tixy) wrote:
On Fri, 2012-10-12 at 16:11 +0100, Morten Rasmussen wrote:
Hi Tixy,
Thanks for the patch. I think this patch is the right way to solve this issue.
There is still a problem with the priority filter in hmp_down_migration() which Viresh pointed out earlier. There is no checking of whether the task is actually allowed to run on any of the slower cpus. Solving that would actually also fix the issue that you are observing as a side effect. I have attached a patch.
The patch looks reasonable. I've just run it on TC2 and A9 with the addition of a "pr_err("$");" before the "return 1;" and can see the occosional '$' on TC2 and none on A9, as we would expect. So I guess that counts as:
Reviewed-by: Jon Medhurst tixy@linaro.org Tested-by: Jon Medhurst tixy@linaro.org
Thanks for reviewing and testing.
My comments to your patch in the previous reply would count as:
Reviewed-by: Morten Rasmussen morten.rasmussen@arm.com
I have only tested it on TC2.
Morten
-- Tixy
I think we should apply both.
Thanks, Morten
On Fri, Oct 12, 2012 at 02:33:40PM +0100, Jon Medhurst (Tixy) wrote:
On Fri, 2012-10-12 at 14:19 +0100, Jon Medhurst (Tixy) wrote:
The attached patch fixes the immediate problem by avoiding the empty domain (which is probably a good thing anyway)
Oops, my last patch included some extra junk, the one attached to this mail fixes this...
From 7365076675b851355d48e9b1157e223d7719e3ac Mon Sep 17 00:00:00 2001 From: Jon Medhurst tixy@linaro.org Date: Fri, 12 Oct 2012 13:45:35 +0100 Subject: [PATCH] ARM: sched: Avoid empty 'slow' HMP domain
On homogeneous (non-heterogeneous) systems all CPUs will be declared 'fast' and the slow cpu list will be empty. In this situation we need to avoid adding an empty slow HMP domain otherwise the scheduler code will blow up when it attempts to move a task to the slow domain.
Signed-off-by: Jon Medhurst tixy@linaro.org
arch/arm/kernel/topology.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/arch/arm/kernel/topology.c b/arch/arm/kernel/topology.c index 58dac7a..0b51233 100644 --- a/arch/arm/kernel/topology.c +++ b/arch/arm/kernel/topology.c @@ -396,10 +396,12 @@ void __init arch_get_hmp_domains(struct list_head *hmp_domains_list) * Must be ordered with respect to compute capacity. * Fastest domain at head of list. */
- domain = (struct hmp_domain *)
kmalloc(sizeof(struct hmp_domain), GFP_KERNEL);
- cpumask_copy(&domain->cpus, &hmp_slow_cpu_mask);
- list_add(&domain->hmp_domains, hmp_domains_list);
- if(!cpumask_empty(&hmp_slow_cpu_mask)) {
domain = (struct hmp_domain *)
kmalloc(sizeof(struct hmp_domain), GFP_KERNEL);
cpumask_copy(&domain->cpus, &hmp_slow_cpu_mask);
list_add(&domain->hmp_domains, hmp_domains_list);
- } domain = (struct hmp_domain *) kmalloc(sizeof(struct hmp_domain), GFP_KERNEL); cpumask_copy(&domain->cpus, &hmp_fast_cpu_mask);
-- 1.7.10.4