Re: [PATCH V6 0/7] cpufreq: suspend early/resume late: dpm_{suspend|resume}()

Viresh Kumar
2014-02-24T06:44:06Z

On 17 February 2014 14:55, Viresh Kumar <viresh.kumar@linaro.org> wrote:
> This patchset creates/calls cpufreq suspend/resume callbacks from dpm_{suspend|resume}()
> for handling suspend/resume of cpufreq governors and core.
>
> There are multiple problems that are fixed by this patch:
> - Nishanth Menon (TI) found an interesting problem on his platform, OMAP. His board
> wasn't working well with suspend/resume as calls for removing non-boot CPUs
> was turning out into a call to drivers ->target() which then tries to play
> with regulators. But regulators and their I2C bus were already suspended and
> this resulted in a failure. Many platforms have such problems, samsung, tegra,
> etc.. They solved it with driver specific PM notifiers where they used to
> disable their driver's ->target() routine.
> - Lan Tianyu (Intel) & Jinhyuk Choi (Broadcom) found an issue where tunables
> configuration for clusters/sockets with non-boot CPUs was getting lost after
> suspend/resume, as we were notifying governors with CPUFREQ_GOV_POLICY_EXIT on
> removal of the last cpu for that policy and so deallocating memory for
> tunables. This is fixed by this patch as we don't allow any operation on
> governors after device suspend and before device resume now.
>
> This is already tested by few people and so incorporating their Tested-by as
> well.
>
> I have tested this again on latest stuff on my thinkpad for several
> suspend/resume cycles.
>
> V6->V7:
> - Fixed crash reported by S.Warren on systems without a cpufreq driver.
> - Moved some function doc-comments to patch 1 from a later patch.
>
> For-v3.15
>
> Viresh Kumar (7):
> cpufreq: suspend governors on system suspend/hibernate
> cpufreq: suspend governors from dpm_{suspend|resume}()
> cpufreq: call driver's suspend/resume for each policy
> cpufreq: Implement cpufreq_generic_suspend()
> cpufreq: exynos: Use cpufreq_generic_suspend()
> cpufreq: s5pv210: Use cpufreq_generic_suspend()
> cpufreq: Tegra: Use cpufreq_generic_suspend()
>
> drivers/base/power/main.c | 5 ++
> drivers/cpufreq/cpufreq.c | 137 +++++++++++++++++++++++---------------
> drivers/cpufreq/exynos-cpufreq.c | 96 ++------------------------
> drivers/cpufreq/s5pv210-cpufreq.c | 49 +-------------
> drivers/cpufreq/tegra-cpufreq.c | 46 ++-----------
> include/linux/cpufreq.h | 11 +++
> 6 files changed, 113 insertions(+), 231 deletions(-)

Hi Rafael,

I think this patch is good to go now for 3.15?

--
viresh