Messages in this thread | | | Date | Mon, 25 Dec 2017 17:24:21 +0100 | From | Frederic Weisbecker <> | Subject | Re: [patch 1/4] timer: Use deferrable base independent of base::nohz_active |
| |
On Fri, Dec 22, 2017 at 03:51:12PM +0100, Thomas Gleixner wrote: > From: Anna-Maria Gleixner <anna-maria@linutronix.de> > > During boot and before base::nohz_active is set in the timer bases, deferrable > timers are enqueued into the standard timer base. This works correctly as > long as base::nohz_active is false. > > Once it base::nohz_active is set and a timer which was enqueued before that > is accessed the lock selector code choses the lock of the deferred > base. This causes unlocked access to the standard base and in case the > timer is removed it does not clear the pending flag in the standard base > bitmap which causes get_next_timer_interrupt() to return bogus values. > > To prevent that, the deferrable timers must be enqueued in the deferrable > base, even when base::nohz_active is not set. Those deferrable timers also > need to be expired unconditional. > > Fixes: 500462a9de65 ("timers: Switch to a non-cascading wheel") > Signed-off-by: Anna-Maria Gleixner <anna-maria@linutronix.de> > Signed-off-by: Thomas Gleixner <tglx@linutronix.de> > Cc: stable@vger.kernel.org > Cc: rt@linutronix.de
Nice catch!
Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
Thanks!
| |