• Xuewen Yan's avatar
    cpufreq: Use a smaller freq for the policy->max when verify · db9ea3b2
    Xuewen Yan authored
    When driver use the cpufreq_frequency_table_verify() as the
    cpufreq_driver->verify's callback. It may cause the policy->max
    bigger than the freq_qos's max freq.
    
    Just as follow:
    
    unisoc:/sys/devices/system/cpu/cpufreq/policy0 # cat scaling_available_frequencies
    614400 768000 988000 1228800 1469000 1586000 1690000 1833000 2002000 2093000
    
    unisoc:/sys/devices/system/cpu/cpufreq/policy0 # echo 1900000 > scaling_max_freq
    unisoc:/sys/devices/system/cpu/cpufreq/policy0 # echo 1900000 > scaling_min_freq
    unisoc:/sys/devices/system/cpu/cpufreq/policy0 # cat scaling_max_freq
    2002000
    unisoc:/sys/devices/system/cpu/cpufreq/policy0 # cat scaling_min_freq
    2002000
    
    When user set the qos_min and qos_max as the same value, and the value
    is not in the freq-table, the above scenario will occur.
    
    This is because in cpufreq_frequency_table_verify() func, when it can not
    find the freq in table, it will change the policy->max to be a bigger freq,
    as above, because there is no 1.9G in the freq-table, the policy->max would
    be set to 2.002G. As a result, the cpufreq_policy->max is bigger than the
    user's qos_max. This is unreasonable.
    
    So use a smaller freq when can not find the freq in fre-table, to prevent
    the policy->max exceed the qos's max freq.
    Signed-off-by: default avatarXuewen Yan <xuewen.yan@unisoc.com>
    Acked-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
    Reviewed-by: default avatarDhruva Gole <d-gole@ti.com>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    db9ea3b2
freq_table.c 8.94 KB