schedule_timeout sleeps too long after dividing CPU frequency

Mason slash.tmp at
Thu May 14 07:48:33 PDT 2015

On 14/05/2015 15:59, Viresh Kumar wrote:
> On 14 May 2015 at 18:36, Mason wrote:
>> When I execute "echo 18500 > scaling_max_freq"
>> the system is supposed to change the CPU frequency to 18.5 MHz
>> (I might have a bug lurking there) and PERIPHCLK is 1/2 of that,
>> i.e 9.25 MHz.
> So at least we are on the right path. But it looks to me that this
> call is not getting propagated well.
> From the attachment you gave initially, the event handler for
> twd-timers is: tick_handle_periodic(). i.e. you are running in
> periodic mode and not one-shot... why ?

I don't know. Is it not obvious (to someone who knows what to
look for) from reading the smp_twd.c source?

How do I run the TWD in one-shot mode?

>> Yes, I do, but I was trying to use as much generic code as
>> possible to limit the chances of introducing bugs.
> Hmm..
>> I'll take a fresh look at the ARM GLOBAL TIMER, but last I
>> checked, it didn't seem to handle frequency scaling.
> why is that required? Why will you change its freq ?

"The global timer is clocked by PERIPHCLK."


Change the CPUCLK, change the PERIPHCLK.

> The same timer is probably used for SPEAr (the platform
> I used to work on):

Did that platform use cpufreq DFS?


More information about the linux-arm-kernel mailing list