• Srinivas Pandruvada's avatar
    cpufreq: intel_pstate: Remove max/min fractions to limit performance · 1a4fe38a
    Srinivas Pandruvada authored
    In the current model the max/min perf limits are a fraction of current
    user space limits to the allowed max_freq or 100% for global limits.
    This results in wrong ratio limits calculation because of rounding
    issues for some user space limits.
    
    Initially we tried to solve this issue by issue by having more shift
    bits to increase precision. Still there are isolated cases where we still
    have error.
    
    This can be avoided by using ratios all together. Since the way we get
    cpuinfo.max_freq is by multiplying scaling factor to max ratio, we can
    easily keep the max/min ratios in terms of ratios and not fractions.
    
    For example:
    if the max ratio = 36
    cpuinfo.max_freq = 36 * 100000 = 3600000
    
    Suppose user space sets a limit of 1200000, then we can calculate
    max ratio limit as
    = 36 * 1200000 / 3600000
    = 12
    This will be correct for any user limits.
    
    The other advantage is that, we don't need to do any calculation in the
    fast path as ratio limit is already calculated via set_policy() callback.
    Signed-off-by: default avatarSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    1a4fe38a
intel_pstate.c 64.9 KB