Re: [PATCH v4 1/1] printk: fix zero-valued printk timestamps in early boot
From: David Laight
Date: Mon Apr 13 2026 - 16:18:06 EST
On Mon, 13 Apr 2026 17:58:34 +0000
"Bird, Tim" <Tim.Bird@xxxxxxxx> wrote:
> Hmmm,
>
> This is a false positive warning from the compiler (see below).
>
> I apologize for not catching it. I did test with CONFIG_EARLY_CYCLES=0
> and I'm not sure why I didn't see the warning.
>
> I'll see if I can silence this warning.
>
> > -----Original Message-----
> > From: kernel test robot <lkp@xxxxxxxxx>
> > Sent: Sunday, April 12, 2026 4:11 AM
> > Hi Tim,
> >
> > kernel test robot noticed the following build warnings:
> >
> > [auto build test WARNING on linus/master]
> > [also build test WARNING on v7.0-rc7 next-20260410]
> > [If your patch is applied to the wrong git tree, kindly drop us a note.
> > And when submitting patch, we suggest to use '--base' as documented in
> > https://git-scm.com/docs/git-format-patch#_base_tree_information]
> >
> > url: https://github.com/intel-lab-lkp/linux/commits/Tim-Bird/printk-fix-zero-valued-printk-timestamps-in-early-boot/20260412-134726
> > base: linus/master
> > patch link: https://lore.kernel.org/r/20260410203741.997410-2-tim.bird%40sony.com
> > patch subject: [PATCH v4 1/1] printk: fix zero-valued printk timestamps in early boot
> > config: arm64-allnoconfig (https://download.01.org/0day-ci/archive/20260412/202604121822.OvOLcTnO-lkp@xxxxxxxxx/config)
> > compiler: aarch64-linux-gcc (GCC) 15.2.0
> > reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260412/202604121822.OvOLcTnO-lkp@xxxxxxxxx/reproduce)
> >
> > If you fix the issue in a separate patch/commit (i.e. not just a new version of
> > the same patch/commit), kindly add following tags
> > | Reported-by: kernel test robot <lkp@xxxxxxxxx>
> > | Closes: https://lore.kernel.org/oe-kbuild-all/202604121822.OvOLcTnO-lkp@xxxxxxxxx/
> >
> > All warnings (new ones prefixed by >>):
> >
> > In file included from kernel/printk/printk.c:49:
> > include/linux/early_times.h: In function 'early_times_ns':
> > >> include/linux/early_times.h:45:61: warning: division by zero [-Wdiv-by-zero]
> > 45 | return (early_unsafe_cycles() * NS_PER_KHZ) / CONFIG_EARLY_CYCLES_KHZ;
> > | ^
> >
> >
> > vim +45 include/linux/early_times.h
> >
> > 34
> > 35 /* returns a nanosecond value based on early cycles */
> > 36 static inline u64 early_times_ns(void)
> > 37 {
> > 38 if (CONFIG_EARLY_CYCLES_KHZ)
> > 39 /*
> > 40 * Note: the multiply must precede the division to avoid
> > 41 * truncation and loss of resolution
> > 42 * Don't use fancier MULT/SHIFT math here. Since this is
> > 43 * static, the compiler can optimize the math operations.
> > 44 */
> > > 45 return (early_unsafe_cycles() * NS_PER_KHZ) / CONFIG_EARLY_CYCLES_KHZ;
> Based on this conditional, it's not possible for CONFIG_EARLY_CYCLES_KHZ to be zero
> on this line of code. Does GCC not catch this?
> if (0)
> x = <some expression>/0;
>
> So this is a false positive.
I suspect the warning is being generated before the optimiser throws
the code away as unreachable.
You might have to do:
return (early_unsafe_cycles() * NS_PER_KHZ) / (CONFIG_EARLY_CYCLES_KHZ ?: 1);
David
>
> > 46 return 0;
> > 47 }
> > 48 #else
> > 49 static inline u64 early_times_ns(void)
> > 50 {
> > 51 return 0;
> > 52 }
> > 53 #endif
> > 54
> >
> > --
> > 0-DAY CI Kernel Test Service
> > https://github.com/intel/lkp-tests/wiki