[PATCH 2/2] omap2+: pm: cpufreq: Fix loops_per_jiffy calculation

Russell King - ARM Linux linux at arm.linux.org.uk
Fri Jun 24 06:51:44 EDT 2011


On Fri, Jun 24, 2011 at 04:18:31PM +0530, Premi, Sanjeev wrote:
> > -----Original Message-----
> > From: Russell King - ARM Linux [mailto:linux at arm.linux.org.uk] 
> > Sent: Friday, June 24, 2011 4:14 PM
> > To: Premi, Sanjeev
> > Cc: linux-omap at vger.kernel.org; linux-arm-kernel at lists.infradead.org
> > Subject: Re: [PATCH 2/2] omap2+: pm: cpufreq: Fix 
> > loops_per_jiffy calculation
> > 
> > On Fri, Jun 24, 2011 at 04:05:42PM +0530, Sanjeev Premi wrote:
> > > Currently, loops_per_jiffy is being calculated before calling
> > > cpufreq_notify_transition().
> > > 
> > > However, generic cpufreq driver adjusts the jiffies as well.
> > > Double adjustment leads to incorrect value being assigned to
> > > loops_per_jiffy.
> > 
> > Are you sure the generic cpufreq driver adjusts the per-cpu 
> > loops_per_jiffy
> > values?  I don't believe it does.
> 
> Russell,
> 
> I am quoting the function from drivers/cpufreq/cpufreq.h
> Follow the arrows:

Let's go to war with quotes then, because clearly you haven't read the code
properly:

| #ifndef CONFIG_SMP
^^^^^^^^^^^^^^^^^^^^^
| static unsigned long l_p_j_ref;
| static unsigned int  l_p_j_ref_freq;
| 
| static void adjust_jiffies(unsigned long val, struct cpufreq_freqs *ci)
| {
| 	... code to adjust jiffies ...
| }
| #else
| static inline void adjust_jiffies(unsigned long val, struct cpufreq_freqs *ci)
| {
|         return;
| }
| #endif

Notice how if CONFIG_SMP is set, adjust_jiffies becomes a no-op.  So if
CONFIG_SMP=y, loops_per_jiffy will _not_ be scaled by core code.



More information about the linux-arm-kernel mailing list