Skip to content

Commit

Permalink
[CPUFREQ] Make cpufreq suspend code conditional on powerpc.
Browse files Browse the repository at this point in the history
The suspend code runs with interrupts disabled, and the powerpc workaround we
do in the cpufreq suspend hook calls the drivers ->get method.

powernow-k8's ->get does an smp_call_function_single
which needs interrupts enabled

cpufreq's suspend/resume code was added in 42d4dc3 to work around
a hardware problem on ppc powerbooks.  If we make all this code
conditional on powerpc, we avoid the issue above.

Signed-off-by: Dave Jones <davej@redhat.com>
  • Loading branch information
Dave Jones committed Aug 4, 2009
1 parent d5194de commit 4bc5d34
Showing 1 changed file with 19 additions and 2 deletions.
21 changes: 19 additions & 2 deletions drivers/cpufreq/cpufreq.c
Original file line number Diff line number Diff line change
Expand Up @@ -1248,13 +1248,22 @@ EXPORT_SYMBOL(cpufreq_get);

static int cpufreq_suspend(struct sys_device *sysdev, pm_message_t pmsg)
{
int cpu = sysdev->id;
int ret = 0;

#ifdef __powerpc__
int cpu = sysdev->id;
unsigned int cur_freq = 0;
struct cpufreq_policy *cpu_policy;

dprintk("suspending cpu %u\n", cpu);

/*
* This whole bogosity is here because Powerbooks are made of fail.
* No sane platform should need any of the code below to be run.
* (it's entirely the wrong thing to do, as driver->get may
* reenable interrupts on some architectures).
*/

if (!cpu_online(cpu))
return 0;

Expand Down Expand Up @@ -1313,6 +1322,7 @@ static int cpufreq_suspend(struct sys_device *sysdev, pm_message_t pmsg)

out:
cpufreq_cpu_put(cpu_policy);
#endif /* __powerpc__ */
return ret;
}

Expand All @@ -1326,12 +1336,18 @@ static int cpufreq_suspend(struct sys_device *sysdev, pm_message_t pmsg)
*/
static int cpufreq_resume(struct sys_device *sysdev)
{
int cpu = sysdev->id;
int ret = 0;

#ifdef __powerpc__
int cpu = sysdev->id;
struct cpufreq_policy *cpu_policy;

dprintk("resuming cpu %u\n", cpu);

/* As with the ->suspend method, all the code below is
* only necessary because Powerbooks suck.
* See commit 42d4dc3f4e1e for jokes. */

if (!cpu_online(cpu))
return 0;

Expand Down Expand Up @@ -1395,6 +1411,7 @@ static int cpufreq_resume(struct sys_device *sysdev)
schedule_work(&cpu_policy->update);
fail:
cpufreq_cpu_put(cpu_policy);
#endif /* __powerpc__ */
return ret;
}

Expand Down

0 comments on commit 4bc5d34

Please sign in to comment.