• R
    cpuidle: menu: Fix wakeup statistics updates for polling state · d3b52881
    Rafael J. Wysocki 提交于
    mainline inclusion
    from mainline-4.20
    commit 5f26bdceb9c0
    category: bugfix
    bugzilla: 6468
    CVE: NA
    
    -------------------------------------------------
    
    If the CPU exits the "polling" state due to the time limit in the
    loop in poll_idle(), this is not a real wakeup and it just means
    that the "polling" state selection was not adequate.  The governor
    mispredicted short idle duration, but had a more suitable state been
    selected, the CPU might have spent more time in it.  In fact, there
    is no reason to expect that there would have been a wakeup event
    earlier than the next timer in that case.
    
    Handling such cases as regular wakeups in menu_update() may cause the
    menu governor to make suboptimal decisions going forward, but ignoring
    them altogether would not be correct either, because every time
    menu_select() is invoked, it makes a separate new attempt to predict
    the idle duration taking distinct time to the closest timer event as
    input and the outcomes of all those attempts should be recorded.
    
    For this reason, make menu_update() always assume that if the
    "polling" state was exited due to the time limit, the next proper
    wakeup event for the CPU would be the next timer event (not
    including the tick).
    
    Fixes: a37b969a "cpuidle: poll_state: Add time limit to poll_idle()"
    Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
    Acked-by: NPeter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: NDaniel Lezcano <daniel.lezcano@linaro.org>
    Signed-off-by: NHanjun Guo <guohanjun@huawei.com>
    Reviewed-by: NXiongfeng Wang <wangxiongfeng2@huawei.com>
    Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
    d3b52881
cpuidle.h 9.3 KB