lkml.org 
[lkml]   [2021]   [Jul]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 14/60] sched/fair: Fix CFS bandwidth hrtimer expiry type
    Date
    From: Odin Ugedal <odin@uged.al>

    [ Upstream commit 72d0ad7cb5bad265adb2014dbe46c4ccb11afaba ]

    The time remaining until expiry of the refresh_timer can be negative.
    Casting the type to an unsigned 64-bit value will cause integer
    underflow, making the runtime_refresh_within return false instead of
    true. These situations are rare, but they do happen.

    This does not cause user-facing issues or errors; other than
    possibly unthrottling cfs_rq's using runtime from the previous period(s),
    making the CFS bandwidth enforcement less strict in those (special)
    situations.

    Signed-off-by: Odin Ugedal <odin@uged.al>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: Ben Segall <bsegall@google.com>
    Link: https://lore.kernel.org/r/20210629121452.18429-1-odin@uged.al
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    kernel/sched/fair.c | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
    index 5a349fcb634e..39b59248d9c3 100644
    --- a/kernel/sched/fair.c
    +++ b/kernel/sched/fair.c
    @@ -4196,7 +4196,7 @@ static const u64 cfs_bandwidth_slack_period = 5 * NSEC_PER_MSEC;
    static int runtime_refresh_within(struct cfs_bandwidth *cfs_b, u64 min_expire)
    {
    struct hrtimer *refresh_timer = &cfs_b->period_timer;
    - u64 remaining;
    + s64 remaining;

    /* if the call-back is running a quota refresh is already occurring */
    if (hrtimer_callback_running(refresh_timer))
    @@ -4204,7 +4204,7 @@ static int runtime_refresh_within(struct cfs_bandwidth *cfs_b, u64 min_expire)

    /* is a quota refresh about to occur? */
    remaining = ktime_to_ns(hrtimer_expires_remaining(refresh_timer));
    - if (remaining < min_expire)
    + if (remaining < (s64)min_expire)
    return 1;

    return 0;
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-07-26 17:44    [W:4.458 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site