Merge tag 'timers-urgent-2020-07-19' of git://git.kernel.org/pub/scm/linux/kernel...
authorLinus Torvalds <torvalds@linux-foundation.org>
Sun, 19 Jul 2020 19:06:08 +0000 (12:06 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sun, 19 Jul 2020 19:06:08 +0000 (12:06 -0700)
commit66e4b63624fcfa47f4d4e0d451f22a8f67902426
treed7164cbc6d3500da31638496db69635287ad5c11
parent43768f7ce0996590cb9588de71f026f30fb35581
parente2a71bdea81690b6ef11f4368261ec6f5b6891aa
Merge tag 'timers-urgent-2020-07-19' of git://git./linux/kernel/git/tip/tip into master

Pull timer fixes from Thomas Gleixner:
 "Two fixes for the timer wheel:

   - A timer which is already expired at enqueue time can set the
     base->next_expiry value backwards. As a consequence base->clk can
     be set back as well. This can lead to timers expiring early. Add a
     sanity check to prevent this.

   - When a timer is queued with an expiry time beyond the wheel
     capacity then it should be queued in the bucket of the last wheel
     level which is expiring last.

     The code adjusted the expiry time to the maximum wheel capacity,
     which is only correct when the wheel clock is 0. Aside of that the
     check whether the delta is larger than wheel capacity does not
     check the delta, it checks the expiry value itself. As a result
     timers can expire at random.

     Fix this by checking the right variable and adjust expiry time so
     it becomes base->clock plus capacity which places it into the
     outmost bucket in the last wheel level"

* tag 'timers-urgent-2020-07-19' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  timer: Fix wheel index calculation on last level
  timer: Prevent base->clk from moving backward