Re: [PATCH v3] printk: fix zero-valued printk timestamps in early boot
Petr Mladek <[email protected]> Tue, 10 Mar 2026 11:43:21 +0100
| Newsgroups | org.kernel.vger.linux-embedded,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
On Tue 2026-03-10 02:27:27, Shashank Balaji wrote: > Hi Tim, > > Tested-by: Shashank Balaji <[email protected]> > > ...on top of rc3 on an AMD Ryzen 7 4800H laptop. This patch conflicts > with these commits with trivial fixes: > > 032a730268a3 init/main.c: wrap long kernel cmdline when printing to logs > 60325c27d3cfq printk: Add execution context (task name/CPU) to printk_info > 499f86de4f8c init/main: read bootconfig header with get_unaligned_le32() Good to know. > On Tue, Feb 10, 2026 at 04:47:41PM -0700, Tim Bird wrote: > > During early boot, printk timestamps are reported as zero before > <snip> > > diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c > > index 1d765ad242b8..5afd31c3345c 100644 > > --- a/kernel/printk/printk.c > > +++ b/kernel/printk/printk.c > > @@ -2242,6 +2254,8 @@ int vprintk_store(int facility, int level, > > * timestamp with respect to the caller. > > */ > > ts_nsec = local_clock(); > > + if (!ts_nsec) > > + ts_nsec = early_cycles(); > > ts_nsec goes on to be stored in a struct printk_info's ts_nsec which is > documented to be "timestamp in nanoseconds": > > /* > * Meta information about each stored message. > * > * All fields are set by the printk code except for @seq, which is > * set by the ringbuffer code. > */ > struct printk_info { > u64 seq; /* sequence number */ > u64 ts_nsec; /* timestamp in nanoseconds */ > u16 text_len; /* length of text message */ > u8 facility; /* syslog facility */ > u8 flags:5; /* internal record flags */ > u8 level:3; /* syslog level */ > u32 caller_id; /* thread id or processor id */ > #ifdef CONFIG_PRINTK_EXECUTION_CTX > u32 caller_id2; /* caller_id complement */ > /* name of the task that generated the message */ > char comm[TASK_COMM_LEN]; > #endif > > struct dev_printk_info dev_info; > }; > > Since with this patch, ts_nsec can either be a timestamp in ns or a > cycle count, the comment should be updated. Yup, great catch! > Ideally, I'd like the member > name to be changed as well to reflect the new semantic. I'm thinking > ts_raw or ts_ns_or_cyc... naming is hard :) Hmm, we could not change it easily because it would break user space tools for reading kernel crash dump. Alternative solution would be usign an union. union { u64 ts_nsec; u64 ts_cycles; }; Best Regards, Petr