On Thu, May 30, 2013 at 06:58:53PM +0800, Andy Green wrote:
On 30/05/13 18:50, the mail apparently from Dave Martin included:
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?
If you really want them, but --->
Why is the DT different for MP versus IKS?
That is not the issue (nor did I mention IKS anywhere...), we are using CONFIG_ARCH_MULTIPLATFORM and supporting SoCs based on CA9 and SoCs with "other things". In the case I'm talking about, the kernel with big.LITTLE configured on finds itself waking up on a CA9 box.
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?
The bug where having BL_SWITCHER configured on has gotten mixed up with the idea that the kernel must therefore be running on a bL SoC, for PMU purposes. In a CONFIG_ARCH_MULTIPLATFORM world, that ain't so.
I think the bug is smaller and less interesting than you're giving it credit for ^^ but it's still something that should be fixed.
Ah, I get you now.
So, the problem is the hacked DT bindings we're using for vexpress, which aren't compatible with upstream -- the perf changes assume these non-standard bindings are in use.
Your fix won't work for platforms which describe multiple CPU PMUs in their DTs -- but that shouldn't happen for non-multicluster platforms anyway.
Since this code needs significant rework anyway, I think your patch is a reasonable workaround for now?
Nico, do you think it's worth picking this up in your tree? It only really affects people using the BL support in multiplatform kernels.
Cheers ---Dave