• Srinivas Pandruvada's avatar
    powercap: idle_inject: Support 100% idle injection · c7cd6f04
    Srinivas Pandruvada authored
    The users of the idle injection framework allow 100% idle injection. For
    example: thermal/cpuidle_cooling.c driver. When the ratio is set to
    100%, the runtime_duration becomes zero.
    
    However, idle_inject_set_duration() in the idle injection framework
    silently ignores run_duration_us == 0 without any error (it is a void
    function). The caller will then assume that everything is fine and
    100% idle is effective, but in reality the idle duration will not
    change.
    
    There are two options:
    
     - The caller may change their max state to 99% instead of 100% and
       document that 100% is not supported by the idle inject framework.
    
     - Add 100% idle support to the idle inject framework.
    
    Since there are other protections via RT throttling, this framework can
    allow 100% idle. The RT throttling will be activated at 95% idle by
    default. The caller disabling RT throttling and injecting 100% idle,
    should be aware that CPU can't be used at all.
    
    The idle inject timer is started for (run_duration_us + idle_duration_us)
    duration. Hence replace (run_duration_us && idle_duration_us) with
    (run_duration_us + idle_duration_us) in the function
    idle_inject_set_duration(). Also check for !(run_duration_us +
    idle_duration_us) to return -EINVAL in idle_inject_start().
    Signed-off-by: default avatarSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
    Acked-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
    [ rjw: Changelog edits ]
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    c7cd6f04
idle_inject.c 11 KB