• Pan Xinhui's avatar
    cpufreq: Correct a freq check in cpufreq_set_policy() · fba9573b
    Pan Xinhui authored
    This check was originally added by commit 9c9a43ed ("[CPUFREQ]
    return error when failing to set minfreq").It attempt to return an error
    on obviously incorrect limits when we echo xxx >.../scaling_max,min_freq
    Actually we just need check if new_policy->min > new_policy->max.
    Because at least one of max/min is copied from cpufreq_get_policy().
    
    For example, when we echo xxx > .../scaling_min_freq, new_policy is
    copied from policy in cpufreq_get_policy. new_policy->max is same with
    policy->max. new_policy->min is set to a new value.
    
    Let me explain it in deduction method, first statement in if ():
    new_policy->min > policy->max
    policy->max == new_policy->max
    ==> new_policy->min > new_policy->max
    
    second statement in if():
    new_policy->max < policy->min
    policy->max < policy->min
    ==>new_policy->min > new_policy->max (induction method)
    
    So we have proved that we only need check if new_policy->min >
    new_policy->max.
    
    After apply this patch, we can also modify ->min and ->max at same time
    if new freq range is very much different from current freq range. For
    example, if current freq range is 480000-960000, then we want to set
    this range to 1120000-2240000, we would fail in the past because
    new_policy->min > policy->max. As long as the cpufreq range is valid, we
    has no reason to reject the user. So correct the check to avoid such
    case.
    Signed-off-by: default avatarPan Xinhui <xinhuix.pan@intel.com>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    fba9573b
cpufreq.c 66.4 KB