• Tao Wang's avatar
    cpufreq: Fix new policy initialization during limits updates via sysfs · c7d1f119
    Tao Wang authored
    If the policy limits are updated via cpufreq_update_policy() and
    subsequently via sysfs, the limits stored in user_policy may be
    set incorrectly.
    
    For example, if both min and max are set via sysfs to the maximum
    available frequency, user_policy.min and user_policy.max will also
    be the maximum.  If a policy notifier triggered by
    cpufreq_update_policy() lowers both the min and the max at this
    point, that change is not reflected by the user_policy limits, so
    if the max is updated again via sysfs to the same lower value,
    then user_policy.max will be lower than user_policy.min which
    shouldn't happen.  In particular, if one of the policy CPUs is
    then taken offline and back online, cpufreq_set_policy() will
    fail for it due to a failing limits check.
    
    To prevent that from happening, initialize the min and max fields
    of the new_policy object to the ones stored in user_policy that
    were previously set via sysfs.
    Signed-off-by: default avatarKevin Wangtao <kevin.wangtao@hisilicon.com>
    Acked-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
    [ rjw: Subject & changelog ]
    Cc: All applicable <stable@vger.kernel.org>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    c7d1f119
cpufreq.c 66.8 KB