diff -uNr -X linux-2.6.15/Documentation/dontdiff linux-2.6.15/drivers/acpi/ac.c linux-2.6.15.4/drivers/acpi/ac.c --- linux-2.6.15/drivers/acpi/ac.c 2006-01-03 04:21:10.000000000 +0100 +++ linux-2.6.15.4/drivers/acpi/ac.c 2006-02-19 17:50:20.000000000 +0100 @@ -29,6 +29,7 @@ #include #include #include +#include #include #include @@ -213,6 +214,8 @@ break; } + cpufreq_reinit(); + return_VOID; } diff -uNr -X linux-2.6.15/Documentation/dontdiff linux-2.6.15/drivers/cpufreq/cpufreq.c linux-2.6.15.4/drivers/cpufreq/cpufreq.c --- linux-2.6.15/drivers/cpufreq/cpufreq.c 2006-01-03 04:21:10.000000000 +0100 +++ linux-2.6.15.4/drivers/cpufreq/cpufreq.c 2006-02-21 20:00:06.000000000 +0100 @@ -863,6 +863,30 @@ /** + * cpufreq_reinit - reinitialize CPU frequency of all CPUs + */ + +int cpufreq_reinit(void) +{ + int cpu, ret; + struct cpufreq_policy *policy; + + for_each_online_cpu (cpu) { + policy = cpufreq_cpu_get(cpu); + if (!policy) + return -EINVAL; + ret = cpufreq_driver->exit(policy); + if (ret) + return ret; + ret = cpufreq_driver->init(policy); + if (ret) + return ret; + } + return (0); +} +EXPORT_SYMBOL(cpufreq_reinit); + +/** * cpufreq_suspend - let the low level driver prepare for suspend */ --- linux-2.6.15/include/linux/cpufreq.h 2006-01-03 04:21:10.000000000 +0100 +++ linux-2.6.15.4/include/linux/cpufreq.h 2006-02-21 20:37:27.000000000 +0100 @@ -256,6 +256,11 @@ /* query the current CPU frequency (in kHz). If zero, cpufreq couldn't detect it */ unsigned int cpufreq_get(unsigned int cpu); +#ifdef CONFIG_CPU_FREQ +int cpu_freq_reinit(void); +#else +static inline int cpu_freq_reinit(void) { return 0; } +#endif /********************************************************************* * CPUFREQ DEFAULT GOVERNOR *