On Tue, Feb 28, 2023 at 10:18:16AM +1100, Jonathan Gray wrote:
> On Mon, Feb 27, 2023 at 04:57:04PM -0600, Scott Cheloha wrote:
> > ticks and jiffies start at zero.  During boot in initclocks(), we
> > reset them:
> > 
> >     /* sys/kern/kern_clock.c */
> > 
> >     89      int     ticks;
> >     90      static int psdiv, pscnt;                /* prof => stat divider 
> > */
> >     91      int     psratio;                        /* ratio: prof / stat */
> >     92      
> >     93      volatile unsigned long jiffies;         /* XXX Linux API for 
> > drm(4) */
> >     94      
> >     95      /*
> >     96       * Initialize clock frequencies and start both clocks running.
> >     97       */
> >     98      void
> >     99      initclocks(void)
> >    100      {
> >    101              ticks = INT_MAX - (15 * 60 * hz);
> >    102              jiffies = ULONG_MAX - (10 * 60 * hz);
> >    103      
> >    104              /* [... ] */
> > 
> > The idea here (committed by dlg@) is sound.  We reset ticks and
> > jiffies to near-rollover values to catch buggy code misusing them.
> > 
> > But!  That jump from zero to whatever violates valid assumptions made
> > by correct code, too.
> 
> Assumptions made by what code?  Does it exist in the tree?

First, even if the code did not exist, wouldn't it be simpler to not
do the jump?  No?

Second, with rare exception, all kernel code using ticks/jiffies
assumes ticks/jiffies does not advance more than once every 1/hz
seconds on average.

In timeout_add(9), we assign an absolute expiration time relative
to the current value of ticks.  Code calling timeout_add(9) before
initclocks() cannot account for the jump in initclocks().

There is probably equivalent code in drm(4) making the same
assumption.

Relatedly, in cpu_relax() we increment jiffies if the kernel is
cold:

sys/dev/pci/drm/include/linux/processor.h

    12  static inline void
    13  cpu_relax(void)
    14  {
    15          CPU_BUSY_CYCLE();
    16          if (cold) {
    17                  delay(tick);
    18                  jiffies++;
    19          }
    20  }

Reply via email to