• Vincent Donnefort's avatar
    cpufreq: Make policy min/max hard requirements · 15171769
    Vincent Donnefort authored
    When applying the policy min/max limits, the requested frequency is
    simply clamped to not be out of range. It means, however, if one of the
    boundaries isn't an available frequency, the frequency resolution can
    return a value out of those limits, depending on the relation used.
    
    e.g. freq{0,1,2} being available frequencies.
    
              freq0  policy->min  freq1  policy->max   freq2
                |        |          |        |           |
              17kHz     18kHz     19kHz     20kHz      21kHz
    
         __resolve_freq(21kHz, CPUFREQ_RELATION_L) -> 21kHz (out of bounds)
         __resolve_freq(17kHz, CPUFREQ_RELATION_H) -> 17kHz (out of bounds)
    
    If, during the policy init, we resolve the requested min/max to existing
    frequencies, we ensure that any CPUFREQ_RELATION_* would resolve to a
    frequency which is inside the policy min/max range.
    
    Making the policy limits rigid helps to introduce the inefficient
    frequencies support. Resolving an inefficient frequency to an efficient
    one should not transgress policy->max (which can be set for thermal
    reason) and having a value we can trust simplify this comparison.
    Signed-off-by: default avatarVincent Donnefort <vincent.donnefort@arm.com>
    Acked-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    15171769
cpufreq.c 75.6 KB