lkml.org 
[lkml]   [2016]   [Apr]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [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

    \
     
     \ /
      Last update: 2016-04-07 13:41    [W:7.180 / U:0.732 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site