Messages in this thread | | | Date | Thu, 7 Apr 2016 17:02:26 +0530 | From | Viresh Kumar <> | Subject | Re: [PATCH] cpufreq: Skip all governor-related actions for cpufreq_suspended set |
| |
On 07-04-16, 13:22, Rafael J. Wysocki wrote: > On Thu, Apr 7, 2016 at 6:28 AM, Viresh Kumar <viresh.kumar@linaro.org> wrote: > > On 07-04-16, 03:29, Rafael J. Wysocki wrote: > >> From: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > >> > >> Since governor operations are generally skipped if cpufreq_suspended > >> is set, do nothing at all in cpufreq_start_governor() and > >> cpufreq_exit_governor() in that case. > >> > >> In particular, this prevents fast frequency switching from being > >> disabled after a suspend-to-RAM cycle on all CPUs except for the > >> boot one. > > > > static int cpufreq_governor(struct cpufreq_policy *policy, unsigned int event) > > { > > int ret; > > > > /* Don't start any governor operations if we are entering suspend */ > > if (cpufreq_suspended) > > return 0; > > > > ... > > > > } > > > > Above already guarantees that we would start/stop governors. Why do we > > need this change then ? > > Because we do extra stuff in cpufreq_start_governor() and > cpufreq_exit_governor() that *also* shouldn't be done if > cpufreq_suspended is set.
The only extra thing done by cpufreq_exit_governor() is cpufreq_disable_fast_switch(), which just plays with cpufreq_fast_switch_count and policy->fast_switch_enabled.
That should be done even if we have started to suspend.
The exit-governor path is be called while we hot-unplug all non-boot CPUs during suspend. Which would eventually mean that at least cpufreq_fast_switch_count will stay positive for ever now, and we just can't recover from this situation.
Similarly for cpufreq_start_governor(), we call cpufreq_update_current_freq(). I think we should move the check to this routine instead.
IOW, we are using this cpufreq_suspended flag to return early in cases where its not safe to try to access the hardware registers, as they might be accessible via a device that has suspended now, like I2C or SPI.
-- viresh
| |