• Rafael J. Wysocki's avatar
    cpuidle: menu: Retain tick when shallow state is selected · 757ab15c
    Rafael J. Wysocki authored
    The case addressed by commit 5ef499cd (cpuidle: menu: Handle
    stopped tick more aggressively) in the stopped tick case is present
    when the tick has not been stopped yet too.  Namely, if only two CPU
    idle states, shallow state A with target residency significantly
    below the tick boundary and deep state B with target residency
    significantly above it, are available and the predicted idle
    duration is above the tick boundary, but below the target residency
    of state B, state A will be selected and the CPU may spend indefinite
    amount of time in it, which is not quite energy-efficient.
    
    However, if the tick has not been stopped yet and the governor is
    about to select a shallow idle state for the CPU even though the idle
    duration predicted by it is above the tick boundary, it should be
    fine to wake up the CPU early, so the tick can be retained then and
    the governor will have a chance to select a deeper state when it runs
    next time.
    
    [Note that when this really happens, it will make the idle duration
     predictor believe that the CPU might be idle longer than predicted,
     which will make it more likely to predict longer idle durations going
     forward, but that will also cause deeper idle states to be selected
     going forward, on average, which is what's needed here.]
    
    Fixes: 87c9fe6e (cpuidle: menu: Avoid selecting shallow states with stopped tick)
    Reported-by: default avatarLeo Yan <leo.yan@linaro.org>
    Cc: 4.17+ <stable@vger.kernel.org> # 4.17+: 5ef499cd (cpuidle: menu: Handle ...)
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    757ab15c
menu.c 18.3 KB