* 2.6.12-rc3 cpufreq compile error on ppc32 @ 2005-04-21 7:26 Colin Leroy 2005-04-22 0:17 ` Benjamin Herrenschmidt 0 siblings, 1 reply; 5+ messages in thread From: Colin Leroy @ 2005-04-21 7:26 UTC (permalink / raw) To: Benjamin Herrenschmidt; +Cc: Andrew Morton, linux-kernel, debian-powerpc Hi guys, One of Ben's patches ("ppc32: Fix cpufreq problems") went in 2.6.12- rc3, but it depended on another patch that's still in -mm only: add-suspend-method-to-cpufreq-core.patch In addition to this, there's a third patch in -mm that fixes warnings and line length to the previous patch, but it doesn't apply cleanly anymore. It's named add-suspend-method-to-cpufreq-core-warning-fix.patch Here's an updated version. HTH, Signed-off-by: Colin Leroy <colin@colino.net> --- a/drivers/cpufreq/cpufreq.c 2005-04-21 09:14:28.000000000 +0200 +++ b/drivers/cpufreq/cpufreq.c 2005-04-21 09:18:11.000000000 +0200 @@ -955,7 +955,6 @@ { int cpu = sysdev->id; unsigned int ret = 0; - unsigned int cur_freq = 0; struct cpufreq_policy *cpu_policy; dprintk("resuming cpu %u\n", cpu); @@ -995,21 +994,24 @@ cur_freq = cpufreq_driver->get(cpu_policy->cpu); if (!cur_freq || !cpu_policy->cur) { - printk(KERN_ERR "cpufreq: resume failed to assert current frequency is what timing core thinks it is.\n"); + printk(KERN_ERR "cpufreq: resume failed to assert " + "current frequency is what timing core " + "thinks it is.\n"); goto out; } if (unlikely(cur_freq != cpu_policy->cur)) { struct cpufreq_freqs freqs; - printk(KERN_WARNING "Warning: CPU frequency is %u, " - "cpufreq assumed %u kHz.\n", cur_freq, cpu_policy->cur); + printk(KERN_WARNING "Warning: CPU frequency is %u, cpufreq assumed " + "%u kHz.\n", cur_freq, cpu_policy->cur); freqs.cpu = cpu; freqs.old = cpu_policy->cur; freqs.new = cur_freq; - notifier_call_chain(&cpufreq_transition_notifier_list, CPUFREQ_RESUMECHANGE, &freqs); + notifier_call_chain(&cpufreq_transition_notifier_list, + CPUFREQ_RESUMECHANGE, &freqs); adjust_jiffies(CPUFREQ_RESUMECHANGE, &freqs); cpu_policy->cur = cur_freq; ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: 2.6.12-rc3 cpufreq compile error on ppc32 2005-04-21 7:26 2.6.12-rc3 cpufreq compile error on ppc32 Colin Leroy @ 2005-04-22 0:17 ` Benjamin Herrenschmidt 2005-04-25 20:20 ` Colin Leroy 0 siblings, 1 reply; 5+ messages in thread From: Benjamin Herrenschmidt @ 2005-04-22 0:17 UTC (permalink / raw) To: Colin Leroy; +Cc: Andrew Morton, Linux Kernel list, debian-powerpc On Thu, 2005-04-21 at 09:26 +0200, Colin Leroy wrote: > Hi guys, > > One of Ben's patches ("ppc32: Fix cpufreq problems") went in 2.6.12- > rc3, but it depended on another patch that's still in -mm only: > add-suspend-method-to-cpufreq-core.patch > > In addition to this, there's a third patch in -mm that fixes warnings > and line length to the previous patch, but it doesn't apply cleanly > anymore. It's named add-suspend-method-to-cpufreq-core-warning-fix.patch Yup, please, Andrew, get those 2 to Linus. Ben. > Here's an updated version. HTH, > > Signed-off-by: Colin Leroy <colin@colino.net> > --- a/drivers/cpufreq/cpufreq.c 2005-04-21 09:14:28.000000000 +0200 > +++ b/drivers/cpufreq/cpufreq.c 2005-04-21 09:18:11.000000000 +0200 > @@ -955,7 +955,6 @@ > { > int cpu = sysdev->id; > unsigned int ret = 0; > - unsigned int cur_freq = 0; > struct cpufreq_policy *cpu_policy; > > dprintk("resuming cpu %u\n", cpu); > @@ -995,21 +994,24 @@ > cur_freq = cpufreq_driver->get(cpu_policy->cpu); > > if (!cur_freq || !cpu_policy->cur) { > - printk(KERN_ERR "cpufreq: resume failed to assert current frequency is what timing core thinks it is.\n"); > + printk(KERN_ERR "cpufreq: resume failed to assert " > + "current frequency is what timing core " > + "thinks it is.\n"); > goto out; > } > > if (unlikely(cur_freq != cpu_policy->cur)) { > struct cpufreq_freqs freqs; > > - printk(KERN_WARNING "Warning: CPU frequency is %u, " > - "cpufreq assumed %u kHz.\n", cur_freq, cpu_policy->cur); > + printk(KERN_WARNING "Warning: CPU frequency is %u, cpufreq assumed " > + "%u kHz.\n", cur_freq, cpu_policy->cur); > > freqs.cpu = cpu; > freqs.old = cpu_policy->cur; > freqs.new = cur_freq; > > - notifier_call_chain(&cpufreq_transition_notifier_list, CPUFREQ_RESUMECHANGE, &freqs); > + notifier_call_chain(&cpufreq_transition_notifier_list, > + CPUFREQ_RESUMECHANGE, &freqs); > adjust_jiffies(CPUFREQ_RESUMECHANGE, &freqs); > > cpu_policy->cur = cur_freq; > > -- Benjamin Herrenschmidt <benh@kernel.crashing.org> ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: 2.6.12-rc3 cpufreq compile error on ppc32 2005-04-22 0:17 ` Benjamin Herrenschmidt @ 2005-04-25 20:20 ` Colin Leroy 2005-04-29 13:15 ` Christoph Hellwig 0 siblings, 1 reply; 5+ messages in thread From: Colin Leroy @ 2005-04-25 20:20 UTC (permalink / raw) To: Benjamin Herrenschmidt Cc: Andrew Morton, Linux Kernel list, debian-powerpc, Linus Torvalds On 22 Apr 2005 at 10h04, Benjamin Herrenschmidt wrote: Hi, > > > > One of Ben's patches ("ppc32: Fix cpufreq problems") went in 2.6.12- > > rc3, but it depended on another patch that's still in -mm only: > > add-suspend-method-to-cpufreq-core.patch > > > > In addition to this, there's a third patch in -mm that fixes > > warnings and line length to the previous patch, but it doesn't > > apply cleanly anymore. It's named add-suspend-method-to-cpufreq- > > core-warning-fix.patch > > Yup, please, Andrew, get those 2 to Linus. Just a heads-up : I didn't see these go into the git tree? -- Colin ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: 2.6.12-rc3 cpufreq compile error on ppc32 2005-04-25 20:20 ` Colin Leroy @ 2005-04-29 13:15 ` Christoph Hellwig 2005-04-29 13:26 ` Andrew Morton 0 siblings, 1 reply; 5+ messages in thread From: Christoph Hellwig @ 2005-04-29 13:15 UTC (permalink / raw) To: Colin Leroy Cc: Benjamin Herrenschmidt, Andrew Morton, Linux Kernel list, debian-powerpc, Linus Torvalds On Mon, Apr 25, 2005 at 10:20:39PM +0200, Colin Leroy wrote: > > > One of Ben's patches ("ppc32: Fix cpufreq problems") went in 2.6.12- > > > rc3, but it depended on another patch that's still in -mm only: > > > add-suspend-method-to-cpufreq-core.patch > > > > > > In addition to this, there's a third patch in -mm that fixes > > > warnings and line length to the previous patch, but it doesn't > > > apply cleanly anymore. It's named add-suspend-method-to-cpufreq- > > > core-warning-fix.patch > > > > Yup, please, Andrew, get those 2 to Linus. > > Just a heads-up : I didn't see these go into the git tree? still not in. Linus, can you please put in the patch below from benh? Index: linux-work/drivers/cpufreq/cpufreq.c =================================================================== --- linux-work.orig/drivers/cpufreq/cpufreq.c 2005-03-30 09:42:18.000000000 +1000 +++ linux-work/drivers/cpufreq/cpufreq.c 2005-03-30 09:47:22.000000000 +1000 @@ -223,7 +223,7 @@ } if ((val == CPUFREQ_PRECHANGE && ci->old < ci->new) || (val == CPUFREQ_POSTCHANGE && ci->old > ci->new) || - (val == CPUFREQ_RESUMECHANGE)) { + (val == CPUFREQ_RESUMECHANGE || val == CPUFREQ_SUSPENDCHANGE)) { loops_per_jiffy = cpufreq_scale(l_p_j_ref, l_p_j_ref_freq, ci->new); dprintk("scaling loops_per_jiffy to %lu for frequency %u kHz\n", loops_per_jiffy, ci->new); } @@ -866,16 +866,96 @@ /** + * cpufreq_suspend - let the low level driver prepare for suspend + */ + +static int cpufreq_suspend(struct sys_device * sysdev, u32 state) +{ + int cpu = sysdev->id; + unsigned int ret = 0; + unsigned int cur_freq = 0; + struct cpufreq_policy *cpu_policy; + + dprintk("resuming cpu %u\n", cpu); + + if (!cpu_online(cpu)) + return 0; + + /* we may be lax here as interrupts are off. Nonetheless + * we need to grab the correct cpu policy, as to check + * whether we really run on this CPU. + */ + + cpu_policy = cpufreq_cpu_get(cpu); + if (!cpu_policy) + return -EINVAL; + + /* only handle each CPU group once */ + if (unlikely(cpu_policy->cpu != cpu)) { + cpufreq_cpu_put(cpu_policy); + return 0; + } + + if (cpufreq_driver->suspend) { + ret = cpufreq_driver->suspend(cpu_policy, state); + if (ret) { + printk(KERN_ERR "cpufreq: suspend failed in ->suspend " + "step on CPU %u\n", cpu_policy->cpu); + cpufreq_cpu_put(cpu_policy); + return ret; + } + } + + + if (cpufreq_driver->flags & CPUFREQ_CONST_LOOPS) + goto out; + + if (cpufreq_driver->get) + cur_freq = cpufreq_driver->get(cpu_policy->cpu); + + if (!cur_freq || !cpu_policy->cur) { + printk(KERN_ERR "cpufreq: suspend failed to assert current " + "frequency is what timing core thinks it is.\n"); + goto out; + } + + if (unlikely(cur_freq != cpu_policy->cur)) { + struct cpufreq_freqs freqs; + + if (!(cpufreq_driver->flags & CPUFREQ_PM_NO_WARN)) + printk(KERN_DEBUG "Warning: CPU frequency is %u, " + "cpufreq assumed %u kHz.\n", + cur_freq, cpu_policy->cur); + + freqs.cpu = cpu; + freqs.old = cpu_policy->cur; + freqs.new = cur_freq; + + notifier_call_chain(&cpufreq_transition_notifier_list, + CPUFREQ_SUSPENDCHANGE, &freqs); + adjust_jiffies(CPUFREQ_SUSPENDCHANGE, &freqs); + + cpu_policy->cur = cur_freq; + } + + out: + cpufreq_cpu_put(cpu_policy); + return 0; +} + +/** * cpufreq_resume - restore proper CPU frequency handling after resume * * 1.) resume CPUfreq hardware support (cpufreq_driver->resume()) * 2.) if ->target and !CPUFREQ_CONST_LOOPS: verify we're in sync - * 3.) schedule call cpufreq_update_policy() ASAP as interrupts are restored. + * 3.) schedule call cpufreq_update_policy() ASAP as interrupts are + * restored. */ static int cpufreq_resume(struct sys_device * sysdev) { int cpu = sysdev->id; unsigned int ret = 0; + unsigned int cur_freq = 0; struct cpufreq_policy *cpu_policy; dprintk("resuming cpu %u\n", cpu); @@ -908,32 +988,34 @@ } } - if (!(cpufreq_driver->flags & CPUFREQ_CONST_LOOPS)) { - unsigned int cur_freq = 0; - - if (cpufreq_driver->get) - cur_freq = cpufreq_driver->get(cpu_policy->cpu); - - if (!cur_freq || !cpu_policy->cur) { - printk(KERN_ERR "cpufreq: resume failed to assert current frequency is what timing core thinks it is.\n"); - goto out; - } - - if (unlikely(cur_freq != cpu_policy->cur)) { - struct cpufreq_freqs freqs; + if (cpufreq_driver->flags & CPUFREQ_CONST_LOOPS) + goto out; - printk(KERN_WARNING "Warning: CPU frequency is %u, " - "cpufreq assumed %u kHz.\n", cur_freq, cpu_policy->cur); + if (cpufreq_driver->get) + cur_freq = cpufreq_driver->get(cpu_policy->cpu); - freqs.cpu = cpu; - freqs.old = cpu_policy->cur; - freqs.new = cur_freq; + if (!cur_freq || !cpu_policy->cur) { + printk(KERN_ERR "cpufreq: resume failed to assert current " + "frequency is what timing core thinks it is.\n"); + goto out; + } - notifier_call_chain(&cpufreq_transition_notifier_list, CPUFREQ_RESUMECHANGE, &freqs); - adjust_jiffies(CPUFREQ_RESUMECHANGE, &freqs); + if (unlikely(cur_freq != cpu_policy->cur)) { + struct cpufreq_freqs freqs; - cpu_policy->cur = cur_freq; - } + if (!(cpufreq_driver->flags & CPUFREQ_PM_NO_WARN)) + printk(KERN_DEBUG "Warning: CPU frequency is %u, " + "cpufreq assumed %u kHz.\n", + cur_freq, cpu_policy->cur); + + freqs.cpu = cpu; + freqs.old = cpu_policy->cur; + freqs.new = cur_freq; + + notifier_call_chain(&cpufreq_transition_notifier_list, + CPUFREQ_RESUMECHANGE, &freqs); + adjust_jiffies(CPUFREQ_RESUMECHANGE, &freqs); + cpu_policy->cur = cur_freq; } out: @@ -945,6 +1027,7 @@ static struct sysdev_driver cpufreq_sysdev_driver = { .add = cpufreq_add_dev, .remove = cpufreq_remove_dev, + .suspend = cpufreq_suspend, .resume = cpufreq_resume, }; Index: linux-work/include/linux/cpufreq.h =================================================================== --- linux-work.orig/include/linux/cpufreq.h 2005-03-30 09:42:18.000000000 +1000 +++ linux-work/include/linux/cpufreq.h 2005-03-30 09:46:25.000000000 +1000 @@ -103,6 +103,7 @@ #define CPUFREQ_PRECHANGE (0) #define CPUFREQ_POSTCHANGE (1) #define CPUFREQ_RESUMECHANGE (8) +#define CPUFREQ_SUSPENDCHANGE (9) struct cpufreq_freqs { unsigned int cpu; /* cpu nr */ @@ -200,6 +201,7 @@ /* optional */ int (*exit) (struct cpufreq_policy *policy); + int (*suspend) (struct cpufreq_policy *policy, u32 state); int (*resume) (struct cpufreq_policy *policy); struct freq_attr **attr; }; @@ -211,7 +213,8 @@ #define CPUFREQ_CONST_LOOPS 0x02 /* loops_per_jiffy or other kernel * "constants" aren't affected by * frequency transitions */ - +#define CPUFREQ_PM_NO_WARN 0x04 /* don't warn on suspend/resume speed + * mismatches */ int cpufreq_register_driver(struct cpufreq_driver *driver_data); int cpufreq_unregister_driver(struct cpufreq_driver *driver_data); ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: 2.6.12-rc3 cpufreq compile error on ppc32 2005-04-29 13:15 ` Christoph Hellwig @ 2005-04-29 13:26 ` Andrew Morton 0 siblings, 0 replies; 5+ messages in thread From: Andrew Morton @ 2005-04-29 13:26 UTC (permalink / raw) To: Christoph Hellwig; +Cc: colin, benh, linux-kernel, debian-powerpc, torvalds Christoph Hellwig <hch@infradead.org> wrote: > > On Mon, Apr 25, 2005 at 10:20:39PM +0200, Colin Leroy wrote: > > > > One of Ben's patches ("ppc32: Fix cpufreq problems") went in 2.6.12- > > > > rc3, but it depended on another patch that's still in -mm only: > > > > add-suspend-method-to-cpufreq-core.patch > > > > > > > > In addition to this, there's a third patch in -mm that fixes > > > > warnings and line length to the previous patch, but it doesn't > > > > apply cleanly anymore. It's named add-suspend-method-to-cpufreq- > > > > core-warning-fix.patch > > > > > > Yup, please, Andrew, get those 2 to Linus. > > > > Just a heads-up : I didn't see these go into the git tree? > > still not in. Linus, can you please put in the patch below from benh? > > > Index: linux-work/drivers/cpufreq/cpufreq.c This patch is missing a warning fix. I'll send the correct one. ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2005-04-29 13:29 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2005-04-21 7:26 2.6.12-rc3 cpufreq compile error on ppc32 Colin Leroy 2005-04-22 0:17 ` Benjamin Herrenschmidt 2005-04-25 20:20 ` Colin Leroy 2005-04-29 13:15 ` Christoph Hellwig 2005-04-29 13:26 ` Andrew Morton
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).