Messages in this thread |  | | Date | Thu, 9 Jul 2020 11:42:31 +0200 (CEST) | From | Anna-Maria Behnsen <> | Subject | Re: [PATCH] timer: Prevent base->clk from moving backward |
| |
Hi,
On Fri, 3 Jul 2020, Frederic Weisbecker wrote:
> When a timer is enqueued with a negative delta (ie: expiry is below > base->clk), it gets added to the wheel as expiring now (base->clk). > > Yet the value that gets stored in base->next_expiry, while calling > trigger_dyntick_cpu(), is the initial timer->expires value. The > resulting state becomes: > > base->next_expiry < base->clk > > On the next timer enqueue, forward_timer_base() may accidentally > rewind base->clk. As a possible outcome, timers may expire way too > early, the worst case being that the highest wheel levels get spuriously > processed again. > > To prevent from that, make sure that base->next_expiry doesn't get below > base->clk. > > Fixes: a683f390b93f ("timers: Forward the wheel clock whenever possible") > Signed-off-by: Frederic Weisbecker <frederic@kernel.org> > Cc: Peter Zijlstra <peterz@infradead.org> > Cc: Anna-Maria Gleixner <anna-maria@linutronix.de> > Cc: Juri Lelli <juri.lelli@redhat.com> > ---
Reviewed-by: Anna-Maria Behnsen <anna-maria@linutronix.de>
Thanks,
Anna-Maria
|  |