···12501250{12511251 int ret = 0;1252125212531253-#ifdef __powerpc__12541253 int cpu = sysdev->id;12551255- unsigned int cur_freq = 0;12561254 struct cpufreq_policy *cpu_policy;1257125512581256 dprintk("suspending cpu %u\n", cpu);12591259-12601260- /*12611261- * This whole bogosity is here because Powerbooks are made of fail.12621262- * No sane platform should need any of the code below to be run.12631263- * (it's entirely the wrong thing to do, as driver->get may12641264- * reenable interrupts on some architectures).12651265- */1266125712671258 if (!cpu_online(cpu))12681259 return 0;···1273128212741283 if (cpufreq_driver->suspend) {12751284 ret = cpufreq_driver->suspend(cpu_policy, pmsg);12761276- if (ret) {12851285+ if (ret)12771286 printk(KERN_ERR "cpufreq: suspend failed in ->suspend "12781287 "step on CPU %u\n", cpu_policy->cpu);12791279- goto out;12801280- }12811281- }12821282-12831283- if (cpufreq_driver->flags & CPUFREQ_CONST_LOOPS)12841284- goto out;12851285-12861286- if (cpufreq_driver->get)12871287- cur_freq = cpufreq_driver->get(cpu_policy->cpu);12881288-12891289- if (!cur_freq || !cpu_policy->cur) {12901290- printk(KERN_ERR "cpufreq: suspend failed to assert current "12911291- "frequency is what timing core thinks it is.\n");12921292- goto out;12931293- }12941294-12951295- if (unlikely(cur_freq != cpu_policy->cur)) {12961296- struct cpufreq_freqs freqs;12971297-12981298- if (!(cpufreq_driver->flags & CPUFREQ_PM_NO_WARN))12991299- dprintk("Warning: CPU frequency is %u, "13001300- "cpufreq assumed %u kHz.\n",13011301- cur_freq, cpu_policy->cur);13021302-13031303- freqs.cpu = cpu;13041304- freqs.old = cpu_policy->cur;13051305- freqs.new = cur_freq;13061306-13071307- srcu_notifier_call_chain(&cpufreq_transition_notifier_list,13081308- CPUFREQ_SUSPENDCHANGE, &freqs);13091309- adjust_jiffies(CPUFREQ_SUSPENDCHANGE, &freqs);13101310-13111311- cpu_policy->cur = cur_freq;13121288 }1313128913141290out:13151291 cpufreq_cpu_put(cpu_policy);13161316-#endif /* __powerpc__ */13171292 return ret;13181293}13191294···12871330 * cpufreq_resume - restore proper CPU frequency handling after resume12881331 *12891332 * 1.) resume CPUfreq hardware support (cpufreq_driver->resume())12901290- * 2.) if ->target and !CPUFREQ_CONST_LOOPS: verify we're in sync12911291- * 3.) schedule call cpufreq_update_policy() ASAP as interrupts are12921292- * restored.13331333+ * 2.) schedule call cpufreq_update_policy() ASAP as interrupts are13341334+ * restored. It will verify that the current freq is in sync with13351335+ * what we believe it to be. This is a bit later than when it13361336+ * should be, but nonethteless it's better than calling13371337+ * cpufreq_driver->get() here which might re-enable interrupts...12931338 */12941339static int cpufreq_resume(struct sys_device *sysdev)12951340{12961341 int ret = 0;1297134212981298-#ifdef __powerpc__12991343 int cpu = sysdev->id;13001344 struct cpufreq_policy *cpu_policy;1301134513021346 dprintk("resuming cpu %u\n", cpu);13031303-13041304- /* As with the ->suspend method, all the code below is13051305- * only necessary because Powerbooks suck.13061306- * See commit 42d4dc3f4e1e for jokes. */1307134713081348 if (!cpu_online(cpu))13091349 return 0;···13271373 }13281374 }1329137513301330- if (!(cpufreq_driver->flags & CPUFREQ_CONST_LOOPS)) {13311331- unsigned int cur_freq = 0;13321332-13331333- if (cpufreq_driver->get)13341334- cur_freq = cpufreq_driver->get(cpu_policy->cpu);13351335-13361336- if (!cur_freq || !cpu_policy->cur) {13371337- printk(KERN_ERR "cpufreq: resume failed to assert "13381338- "current frequency is what timing core "13391339- "thinks it is.\n");13401340- goto out;13411341- }13421342-13431343- if (unlikely(cur_freq != cpu_policy->cur)) {13441344- struct cpufreq_freqs freqs;13451345-13461346- if (!(cpufreq_driver->flags & CPUFREQ_PM_NO_WARN))13471347- dprintk("Warning: CPU frequency "13481348- "is %u, cpufreq assumed %u kHz.\n",13491349- cur_freq, cpu_policy->cur);13501350-13511351- freqs.cpu = cpu;13521352- freqs.old = cpu_policy->cur;13531353- freqs.new = cur_freq;13541354-13551355- srcu_notifier_call_chain(13561356- &cpufreq_transition_notifier_list,13571357- CPUFREQ_RESUMECHANGE, &freqs);13581358- adjust_jiffies(CPUFREQ_RESUMECHANGE, &freqs);13591359-13601360- cpu_policy->cur = cur_freq;13611361- }13621362- }13631363-13641364-out:13651376 schedule_work(&cpu_policy->update);13771377+13661378fail:13671379 cpufreq_cpu_put(cpu_policy);13681368-#endif /* __powerpc__ */13691380 return ret;13701381}13711382