- The bug apparently doesn't affect the Ubuntu build. So I tried
a kernel without the Android patches (the Android user space isn't
all happy about it but the shell is working) and the test still fails.
At least this rules out Android kernel changes.
- Then I hacked the cpufreq driver to let user space believe switch
requests were honored but without doing any switching using this
patch:
So... it seems that the difference between the Android user libraries
and the Ubuntu user libraries is triggering the bug. However the bug
appears only when real switching is taking place, indicating some
remaining flaw with the switcher.
Would it be possible to get a strace dump of the running test when
running on Ubuntu vs Android? Extracting syscalls differences between
the two could help identify the problem. No need to switch at the same
time therefore no need to use Fast Models for this.
Here's what I found so far:
- The bug apparently doesn't affect the Ubuntu build. So I tried
a kernel without the Android patches (the Android user space isn't
all happy about it but the shell is working) and the test still fails.
At least this rules out Android kernel changes.
- Then I hacked the cpufreq driver to let user space believe switch
requests were honored but without doing any switching using this
patch:
diff --git a/drivers/ cpufreq/ arm-bl- cpufreq. c b/drivers/ cpufreq/ arm-bl- cpufreq. c .14e62d9866 100644 cpufreq/ arm-bl- cpufreq. c cpufreq/ arm-bl- cpufreq. c cluster( void *_data)
index 85e1bb0519.
--- a/drivers/
+++ b/drivers/
@@ -106,9 +106,13 @@ static void __get_current_
static int get_current_ cluster( unsigned int cpu) function_ single( cpu, __get_current_ cluster, &cluster, 1); cpu_cur_ cluster, cpu);
{
+#if 0
unsigned int cluster = 0;
smp_call_
return cluster;
+#else
+ return per_cpu(
+#endif
}
static int get_current_ cached_ cluster( unsigned int cpu) to_entry( unsigned int cpu, freq(target) ;
@@ -143,7 +147,7 @@ static void switch_
freqs.new = entry_to_
cpufreq_ notify_ transition( &freqs, CPUFREQ_PRECHANGE); request( cpu, new_cluster); request( cpu, new_cluster); cpu_cur_ cluster, cpu) = new_cluster; notify_ transition( &freqs, CPUFREQ_ POSTCHANGE) ;
- bL_switch_
+ //bL_switch_
per_cpu(
cpufreq_
}
And then the test appears to work OK.
So... it seems that the difference between the Android user libraries
and the Ubuntu user libraries is triggering the bug. However the bug
appears only when real switching is taking place, indicating some
remaining flaw with the switcher.
Would it be possible to get a strace dump of the running test when
running on Ubuntu vs Android? Extracting syscalls differences between
the two could help identify the problem. No need to switch at the same
time therefore no need to use Fast Models for this.