lkml.org 
[lkml]   [2020]   [Jun]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.7 122/163] cpufreq: Fix up cpufreq_boost_set_sw()
    Date
    From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

    commit 552abb884e97d26589964e5a8c7e736f852f95f0 upstream.

    After commit 18c49926c4bf ("cpufreq: Add QoS requests for userspace
    constraints") the return value of freq_qos_update_request(), that can
    be 1, passed by cpufreq_boost_set_sw() to its caller sometimes
    confuses the latter, which only expects to see 0 or negative error
    codes, so notice that cpufreq_boost_set_sw() can return an error code
    (which should not be -EINVAL for that matter) as soon as the first
    policy without a frequency table is found (because either all policies
    have a frequency table or none of them have it) and rework it to meet
    its caller's expectations.

    Fixes: 18c49926c4bf ("cpufreq: Add QoS requests for userspace constraints")
    Reported-by: Serge Semin <Sergey.Semin@baikalelectronics.ru>
    Reported-by: Xiongfeng Wang <wangxiongfeng2@huawei.com>
    Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
    Cc: 5.3+ <stable@vger.kernel.org> # 5.3+
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/cpufreq/cpufreq.c | 11 ++++++-----
    1 file changed, 6 insertions(+), 5 deletions(-)

    --- a/drivers/cpufreq/cpufreq.c
    +++ b/drivers/cpufreq/cpufreq.c
    @@ -2535,26 +2535,27 @@ EXPORT_SYMBOL_GPL(cpufreq_update_limits)
    static int cpufreq_boost_set_sw(int state)
    {
    struct cpufreq_policy *policy;
    - int ret = -EINVAL;

    for_each_active_policy(policy) {
    + int ret;
    +
    if (!policy->freq_table)
    - continue;
    + return -ENXIO;

    ret = cpufreq_frequency_table_cpuinfo(policy,
    policy->freq_table);
    if (ret) {
    pr_err("%s: Policy frequency update failed\n",
    __func__);
    - break;
    + return ret;
    }

    ret = freq_qos_update_request(policy->max_freq_req, policy->max);
    if (ret < 0)
    - break;
    + return ret;
    }

    - return ret;
    + return 0;
    }

    int cpufreq_boost_trigger_state(int state)

    \
     
     \ /
      Last update: 2020-06-16 18:07    [W:7.227 / U:0.156 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site