> -----Original Message-----
> From: Thomas Gleixner <t...@linutronix.de>
> Sent: Tuesday, March 30, 2021 5:18 AM
> To: J.d. Yue <jindong....@nxp.com>
> Cc: linux-kernel@vger.kernel.org; fweis...@gmail.com; mi...@kernel.org
> Subject: [EXT] Re: [PATCH] tick/broadcast: Allow later probed device enter
> oneshot mode
> 
> Caution: EXT Email
> 
> On Mon, Mar 29 2021 at 13:25, Jindong Yue wrote:
> 
> >  /*
> >   * Debugging: see timer_list.c
> > @@ -115,8 +116,20 @@ void tick_install_broadcast_device(struct
> clock_event_device *dev)
> >        * notification the systems stays stuck in periodic mode
> >        * forever.
> >        */
> > -     if (dev->features & CLOCK_EVT_FEAT_ONESHOT)
> > +     if (dev->features & CLOCK_EVT_FEAT_ONESHOT) {
> >               tick_clock_notify();
> 
> If the kernel runs in oneshot mode already, then calling
> tick_clock_notify() does not make sense.

Yes, there should be more check before tick_clock_notify().

> 
> > +             /*
> > +              * If new broadcast device is installed after high resolution
> > +              * timers enabled, it can not switch to oneshot mode
> anymore.
> 
> This is not restricted to high resolution timers. The point is that the mode 
> is
> ONESHOT which might be either HIGHRES or NOHZ or both.

Got it, after kernel enters ONESHOT mode, new registered broadcast device can't 
be switched to ONESHOT mode. 

> 
> > +              */
> > +             if (tick_broadcast_oneshot_active() &&
> > +                 dev->event_handler != tick_handle_oneshot_broadcast)
> > + {
> 
> How would that condition ever be false for a newly installed device?

Okay, will remove this condition.

> 
> > +                     tick_broadcast_switch_to_oneshot();
> > +             }
> 
> So what you really want is:
> 
>         if (!(dev->features & CLOCK_EVT_FEAT_ONESHOT))
>                 return;
> 
>         if (tick_broadcast_oneshot_active()) {
>                 tick_broadcast_switch_to_oneshot();
>                 return;
>         }
> 
>         tick_clock_notify();
> 
> Thanks,
> 
>         tglx

Thanks for your quick review and advice. I will test this code locally and send 
V2 patch later.
Jindong

Reply via email to