Re: [PATCH 2/2] tick: Make sure tick timer is active when bypassing reprogramming

From: Thomas Gleixner
Date: Thu Apr 20 2017 - 15:40:32 EST


On Thu, 20 Apr 2017, Frederic Weisbecker wrote:
> On Thu, Apr 20, 2017 at 07:56:22PM +0200, Thomas Gleixner wrote:
> > > /* Skip reprogram of event if its not changed */
> > > - if (ts->tick_stopped && (expires == ts->next_tick))
> > > + if (ts->tick_stopped && (expires == ts->next_tick)) {
> > > + WARN_ON_ONCE(dev->next_event > ts->next_tick);
> >
> > What about handling it proper ? dev->next_event might be KTIME_MAX,
> > i.e. no more event for the next 500+ years.
>
> I thought I handled this case, what I'm I missing?

if (ts->tick_stopped && (expires == ts->next_tick)) {
WARN_ON_ONCE(dev->next_event > ts->next_tick);
goto out;
}

IOW, the WARN_ON yells in dmesg, but despite seing the wreckage it just
leaves it and goes out doing nothing.

Why can't you just do

if (ts->tick_stopped && (expires == ts->next_tick)) {
if (dev->next_event > ts->next_tick)) {
WARN_ONCE();
do_something_sensible();
}
goto out;
}

Hmm?

tglx