On Thu, May 30, 2013 at 10:06:20AM +0800, Andy Green wrote:
Hi -
We're using one kernel binary with BL Switcher enabled in config, but able to work on SoC without Big Little.
This is OK except where the BL patches touch the PMU driver. It makes an assumption about BL configured == in use which is not true. PMU init fails and when you try to use perf list later, it blows chunks.
I worked around it with the hack below, so it can fail out from the bigLITTLE path when it doesn't see the cluster property in DT, but there's presumably a better way to do that which more directly checks if we care about BL in this execution environment.
-Andy
Author: Andy Green andy.green@linaro.org Date: Thu May 30 09:44:17 2013 +0800
bl switcher fix dont assume bl active in pmu probe Signed-off-by: Andy Green <andy.green@linaro.org>
diff --git a/arch/arm/kernel/perf_event_cpu.c b/arch/arm/kernel/perf_event_cpu.c index b3ae24f..c02ea21 100644 --- a/arch/arm/kernel/perf_event_cpu.c +++ b/arch/arm/kernel/perf_event_cpu.c @@ -440,6 +440,9 @@ static int cpu_pmu_device_probe(struct platform_device *pdev) hwid = of_get_property(ncluster, "reg", &len); if (hwid && len == 4) cluster = be32_to_cpup(hwid);
} else {
ret = probe_current_pmu(pmu);
goto bail;
Can you provide logs?
Why is the DT different for MP versus IKS?
It is incorrect for the DT to be different, because the hardware is exactly the same in both cases.
If the DT isn't different, then can you elaborate on what is fixed by this change?
You may be getting affected by the fact that we're relying on non- pstreamed DT bindings to describe the PMUs in the system. Discussions upstream are taking a different direction, so this code is going to get substantially rewritten at some point. The perf support for IKS is a big hack at the moment... Unfortunately, I have ongoing distractions which mean that progress on this is mostly stalled right now.
There is also a separate problem caused by a recent change to the IKS code which breaks the perf support's assumptions about what physical/ logical CPU mappings are possible. I need to fix this, but it's not done yet... If you are using up-to-date IKS code, it's possible you're hitting this issue.
Cheers ---Dave
} /* set sibling mask to all cpu mask if socket is not
specified */ /* @@ -501,7 +504,7 @@ static int cpu_pmu_device_probe(struct platform_device *pdev) } else { ret = probe_current_pmu(pmu); }
+bail: if (ret) goto error;
-- Andy Green | Fujitsu Landing Team Leader Linaro.org │ Open source software for ARM SoCs | Follow Linaro http://facebook.com/pages/Linaro/155974581091106 - http://twitter.com/#%21/linaroorg - http://linaro.org/linaro-blog
linaro-dev mailing list linaro-dev@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-dev