Re: [PATCH v4 1/1] printk: fix zero-valued printk timestamps in early boot

"Roberto A. Foglietta" <[email protected]> Wed, 15 Apr 2026 11:19:19 +0200
Newsgroups org.kernel.vger.linux-embedded,org.kernel.vger.linux-kernel
Message-ID <CAJGKYO7-9t=KMN4=jARMHhO7gWSSaphDuwqRha0TAhOtUdXuQQ@mail.gmail.com>
--000000000000401a9e064f7c3879
Content-Type: text/plain; charset="UTF-8"

On Wed, 15 Apr 2026 at 02:19, Roberto A. Foglietta
<[email protected]> wrote:
>
> On Wed, 15 Apr 2026 at 00:38, Thomas Gleixner <[email protected]> wrote:
> >
> > On Fri, Apr 10 2026 at 14:37, Tim Bird wrote:
> > > +
> > > +#include <linux/timekeeping.h>
> > > +#ifdef CONFIG_ARM64
> > > +#include <asm/sysreg.h>
> > > +#endif
> > > +
> > > +#ifdef CONFIG_EARLY_CYCLES_KHZ
> > > +static inline u64 early_unsafe_cycles(void)
> > > +{
> > > +#if defined(CONFIG_X86_64)
> > > +     /*
> > > +      * This rdtsc may happen before secure TSC is initialized, and
> > > +      * it is unordered. So please don't use this value for cryptography
> > > +      * or after SMP is initialized.
> > > +      */
> > > +     return rdtsc();
> > > +#elif defined(CONFIG_ARM64)
> > > +     return read_sysreg(cntvct_el0);
> > > +#elif defined(CONFIG_RISCV_TIMER)
> > > +     u64 val;
> > > +
> > > +     asm volatile("rdtime %0" : "=r"(val));
> > > +     return val;
> > > +#else
> > > +     return 0;
> > > +#endif
> > > +}
> >
> > No. Generic code and generic headers have no business to implement any
> > architecture specific code and there is zero justification for
> > architecture specific #ifdefs in generic code.
>
> This translates in practice in early_unsafe_cycles() various
> instances, one for each architecture supported. Even better a macro
> for each architecture like this example below (untested code, just for
> exemplification):
>
>   ts_nsec = local_clock();
> #ifdef CONFIG_EARLY_CYCLES_KHZ
> #if defined(CONFIG_ARM64)
> #include <asm/sysreg.h>
> #define early_unsafe_cycles read_sysreg(cntvct_el0);
> #elif defined(CONFIG_X86_64)
> #define early_unsafe_cycles rdtsc()
> #elif defined(CONFIG_RISCV_TIMER)
> #define early_unsafe_cycles ({ u64 val; asm volatile("rdtime %0" :
> "=r"(val)); val; })
> #else
> #define early_unsafe_cycles 0
> #endif
> + if (unlikely(!ts_nsec))
> + ts_nsec = early_times_ns();
>  #endif // CONFIG_EARLY_CYCLES_KHZ
>   caller_id = printk_caller_id();
>
> While keeping architectures separate is for abstraction layer best
> practice, in very specific cases abstraction can be a meaningless
> concept or much less important than having a single file for a single
> feature (the complementary way of organising stuff). Because in Linux
> the abstraction layer approach applies for architectures, the gap
> between aesthetic and a specific case like an early boot macros set
> hack for debugging is to clarify the exception from the general rule
> in the header itself.

IMHO, this patch (upstreamed or not) is for a few hackers and it is
not even a tool but a first-outlook or last-resort hack. Therefore the
single point of change that makes sense against spreading stuff that
is supposed to be further hacked isn't the correct approach. The
debate can be about upstreaming this kind of changes, and IMHO this
one still has a sense to be upstreamed among debug features.

I am attaching the path for just sake of independence storage (due my
project github repo linked before is naturally subject to arbitrary
changes by me). It is not supposed to be applied as-is (and probably
cannot be applied anyway) and the patch has been written by hands on a
keyboard. Gemini was used for retrieving information (in a smart man 3
command style) and to collect the ASM code and its fencing.

So the main question is: does this v5 suggested approach bridge the
1-single-point-of-change practical needs with the aim of keeping the
source three? If yes then a V6 is worth being developed to provide the
functionality and propose the upstream (I do not bet in good at the
first write but on resolving the contrast/debate THEN delivery).

Best regards, R-

--000000000000401a9e064f7c3879
Content-Type: text/plain; charset="US-ASCII"; 
	name="printk-fix-early-boot-timestamps-patch-v4.txt"
Content-Disposition: attachment; 
	filename="printk-fix-early-boot-timestamps-patch-v4.txt"
Content-Transfer-Encoding: base64
Content-ID: <f_mnzu16tz0>
X-Attachment-Id: f_mnzu16tz0

VGhpcyBpcyBhIGhlYXZpbHkgInJlZmFjdG9yZWQgYnkgaGFuZHMiIHBhdGNoIChleGFtcGxlKSBi
YXNlZCBvbiB0aGUgb25lIGJ5CgpGcm9tOiBUaW0gQmlyZCA8dGltLmJpcmRAc29ueS5jb20+ClN1
YmplY3Q6IFtQQVRDSCB2NCAxLzFdIHByaW50azogZml4IHplcm8tdmFsdWVkIHByaW50ayB0aW1l
c3RhbXBzIGluIGVhcmx5IGJvb3QKRGF0ZTogRnJpLCAxMCBBcHIgMjAyNiAxNDozNzo0MSAtMDYw
MApNZXNzYWdlLUlEOiA8MjAyNjA0MTAyMDM3NDEuOTk3NDEwLTItdGltLmJpcmRAc29ueS5jb20+
CgpEdXJpbmcgZWFybHkgYm9vdCwgcHJpbnRrIHRpbWVzdGFtcHMgYXJlIHJlcG9ydGVkIGFzIHpl
cm8gYmVmb3JlCmtlcm5lbCB0aW1la2VlcGluZyBzdGFydHMgKGkuZS4gYmVmb3JlIHRpbWVfaW5p
dCgpKS4gIFRoaXMKaGluZGVycyBib290LXRpbWUgb3B0aW1pemF0aW9uIGVmZm9ydHMuICBUaGlz
IHBlcmlvZCByYW5nZXMgZnJvbQoxNyB0byAxNzAwIG1pbGxpc2Vjb25kcyBvbiBkaWZmZXJlbnQg
ZW1iZWRkZWQgbWFjaGluZXMgcnVubmluZyBMaW51eC4KCkFkZCBzdXBwb3J0IGZvciBlYXJseSB0
aW1lc3RhbXBzIGJhc2VkIG9uIHByb2Nlc3NvciBjeWNsZS1nZW5lcmF0b3JzCnRoYXQgbmVlZCBu
byBrZXJuZWwgaW5pdGlhbGl6YXRpb24uVGhpcyBmZWF0dXJlIGlzbid0IGludGVuZGVkIGZvciBh
IApnZW5lcmljIGRpc3RybyBrZXJuZWxzIGJ1dCBmb3IgdGVtcG9yYXJ5IHVzZSBkdXJpbmcga2Vy
bmVsIGRldmVsb3BtZW50CmFuZCBib290LXRpbWUgcmVzZWFyY2ggYW5kIG9wdGltaXphdGlvbiBi
eSBrZXJuZWwgaGFja2VycyBvbmx5LgoKVGhpcyB5aWVsZHMgbm9uLXplcm8gdGltZXN0YW1wcyBm
b3IgcHJpbnRrcyBmcm9tIHRoZSB2ZXJ5IHN0YXJ0Cm9mIGtlcm5lbCBleGVjdXRpb24uICBUaGUg
dGltZXN0YW1wcyBhcmUgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mCmFuIGFyY2hpdGVjdHVyZS1z
cGVjaWZpYyBjb3VudGVyIChlLmcuIHRzYyBvbiB4ODZfNjQgYW5kIGNudHZjdF9lbDAKb24gYXJt
NjQpLiBBZmZlY3RlZCB0aW1lc3RhbXBzIHJlZmxlY3QgY3ljbGUgY291bnRlciByZWxhdGVkIHZh
bHVlcwpzaW5jZSBpbml0ICh1c3VhbGx5IG1hY2hpbmUgcG93ZXItb24gb3IgdmlydHVhbCBtYWNo
aW5lIHN0YXJ0KSBpbnN0ZWFkCm9mIHRpbWUgZnJvbSB0aGUga2VybmVsJ3MgdGltZWtlZXBpbmcg
aW5pdGlhbGl6YXRpb24uIFRoaXMgcmVzdWx0cyBpbgphIGRpc2NvbnRpbnVpdHkgaW4gdGhlIHBy
aW50ayB0aW1lc3RhbXAgdmFsdWVzLCBvbmUgdGltZSwgd2hlbgprZXJuZWwgdGltZWtlZXBpbmcg
c3RhcnRzLgoKU2lnbmVkLW9mZi1ieTogVGltIEJpcmQgPHRpbS5iaXJkQHNvbnkuY29tPgpTaWdu
ZWQtb2ZmLWJ5OiBSb2JlcnRvIEEuIEZvZ2xpZXR0YSA8cm9iZXJ0by5mb2dsaWV0dGFAZ21haWwu
Y29tPgotLS0KVjUgLT4gVjQKICBSYXRpb25hbGU6IHNpbmdsZSBwb2ludCBvZiBjaGFuZ2UgaGFj
ayBmb3IgcHJpbnRrLgogIEl0IHByb3ZpZGVzIGEgZmVhdHVyZSBmb3Iga2VybmVsIGhhY2tlcnMg
d2lsbGluZyB0byBwcm9maWxpbmcgdGhlIGVhcmx5IGJvb3QKICB3aXRoIGEgYmFzaWMgcHJpbnRr
IGFwcHJvYWNoIChyYXRoZXIgdGhhbiB1c2luZyBIVyBtb25pdG9ycyB3aGljaCBtaWdodCBub3QK
ICBiZSBhdmFpbGFibGUgb3IgaW1tZWRpYXRlbHkgYXZhaWxhYmxlKS4gVGh1cywgaXQgaXMgYSBm
aXJzdC1sb29rIG9yIGEgbGFzdAogIHJlc29ydCBoYWNrIHByb2ZpbGluZyBmZWF0dXJlLiBTb21l
dGhpbmcgdGhhdCBpc24ndCBnb29kIHRvIHNwcmVhZCBhcm91bmQKICB0aGUga2VybmVsIHNvdXJj
ZXMgdHJlZSBhbmQgaXQgaXMgZmluZSB0byBoYXZlIGludG8gYSBzaW5nbGUgaGVhZGVyIGZpbGUu
ClYzIC0+IFY0CiAgUmVwbGFjZSBjb25maWcgdmFycyB3aXRoIHNpbmdsZSBvbmU6IENPTkZJR19F
QVJMWV9DWUNMRVNfS0haCiAgUmVwbGFjZSBydW50aW1lIGNhbGlicmF0aW9uIHdpdGggc3RhdGlj
IGNvbmZpZyB2YXJpYWJsZQogIFJlbW92ZSByZWZlcmVuY2UgdG8gZ2V0X2N5Y2xlcygpCiAgQWRk
IHN1cHBvcnQgZm9yIFJJU0NWIHBsYXRmb3JtcwpWMiAtPiBWMwogIERlZmF1bHQgQ09ORklHIG9w
dGlvbiB0byAnbicKICBNb3ZlIG1vcmUgY29kZSBpbnRvIGVhcmx5X3RpbWVzLmggKHJlZHVjZSBp
ZmRlZnMgaW4gaW5pdC9tYWluLmMpCiAgVXNlIG1hdGNoNjQgaGVscGVyIHJvdXRpbmVzCiAgVXNl
IGN5Y2xlc190IGluc3RlYWQgb2YgdTY0IHR5cGUKICBBZGQgI2RlZmluZXMgZm9yIEVBUkxZX0NZ
Q0xFU19CSVQgYW5kIEVBUkxZX0NZQ0xFU19NQVNLCiAgSW52ZXJ0IGlmIGxvZ2ljIGluIGFkanVz
dF9lYXJseV90cygpClYxIC0+IFYyCiAgUmVtb3ZlIGNhbGlicmF0aW9uIENPTkZJRyB2YXJzCiAg
QWRkICdkZXBlbmRzIG9uJyB0byByZXN0cmljdCBhcmNoZXMgKHRvIGhhbmRsZSBwcGMgYnVnKQog
IEFkZCBlYXJseV90c19vZmZzZXQgdG8gYXZvaWQgZGlzY29udGludWl0eQogIFNhdmUgY3ljbGVz
IGluIHRzX25zZWMsIGFuZCBjb252ZXJ0IG9uIG91dHB1dAogIE1vdmUgY29uZGl0aW9uYWwgY29k
ZSB0byBpbmNsdWRlIGZpbGUgKGVhcmx5X3RpbWVzLmg+CgpkaWZmIC1wcnVOIC9kZXYvbnVsbCBr
ZXJuZWwvcHJpbnRrL2Vhcmx5X3RpbWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwLi44MmJhY2ZkMGUyNmIKLS0tIC9kZXYvbnVsbAorKysga2VybmVsL3ByaW50ay9l
YXJseV90aW1lcy5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy
OiBHUEwtMi4wICovCisKKyNpZm5kZWYgX0VBUkxZX1RJTUVTX0gKKyNkZWZpbmUgX0VBUkxZX1RJ
TUVTX0gKKworI2luY2x1ZGUgPGxpbnV4L3RpbWVrZWVwaW5nLmg+CisKKy8qCisgKiBGZW5jaW5n
IGlzbid0IG9wdGlvbmFsIGhlcmUsIG90aGVyd2lzZSB1bnJlbGlhYmxlIHZhbHVlcyBkaXNwbGF5
aW5nCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19BUk02NCkKKwkJI2luY2x1ZGUgPGFzbS9zeXNy
ZWcuaD4KKwkJI2RlZmluZSBfX2Vhcmx5X3Jhd19jeWNsZXMgKHsgdTY0IHZhbDsgXAorCQkgICAg
YXNtIHZvbGF0aWxlKCJpc2I7IG1ycyAlMCwgY250dmN0X2VsMCIgOiAiPXIiKHZhbCkpOyB2YWw7
IH0pCisjZWxpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpCisJCSNkZWZpbmUgX19lYXJseV9yYXdf
Y3ljbGVzICh7IHU2NCB2YWw7IFwKKwkJICAgIGFzbSB2b2xhdGlsZSgibGZlbmNlOyByZHRzYzsg
c2hsICQzMiwgJSVyZHg7IG9yICUlcmR4LCAlJXJheCIgXAorCQkgICAgICAgIDogIj1hIih2YWwp
IDogOiAicmR4Iik7IHZhbDsgfSkKKyNlbGlmIGRlZmluZWQoQ09ORklHX1JJU0NWX1RJTUVSKQor
CQkjZGVmaW5lIF9fZWFybHlfcmF3X2N5Y2xlcyAoeyB1NjQgdmFsOyBcCisJCSAgICBhc20gdm9s
YXRpbGUoImZlbmNlOyByZHRpbWUgJTAiIDogIj1yIih2YWwpKTsgdmFsOyB9KQorI2Vsc2UKKwkJ
I2RlZmluZSBfX2Vhcmx5X3Jhd19jeWNsZXMgMAorI2VuZGlmCisKKyNlbmRpZiAvKiBfRUFSTFlf
VElNRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnCmluZGV4
IDc0ODRjZDcwM2JjMS4uNDBjMzEyM2MyYzI3IDEwMDY0NAotLS0gYS9pbml0L0tjb25maWcKKysr
IGIvaW5pdC9LY29uZmlnCkBAIC03OTIsNiArNzkyLDI2IEBAIGNvbmZpZyBJS0hFQURFUlMKIAkg
IG9yIHNpbWlsYXIgcHJvZ3JhbXMuICBJZiB5b3UgYnVpbGQgdGhlIGhlYWRlcnMgYXMgYSBtb2R1
bGUsIGEgbW9kdWxlIGNhbGxlZAogCSAga2hlYWRlcnMua28gaXMgYnVpbHQgd2hpY2ggY2FuIGJl
IGxvYWRlZCBvbi1kZW1hbmQgdG8gZ2V0IGFjY2VzcyB0byBoZWFkZXJzLgogCitjb25maWcgRUFS
TFlfQk9PVF9USU1JTkdTCisJaW50ICJFYXJseSBib290IHByaW50ayBzaG93cyB0aW1lcyBpbiBy
YXcgY3ljbGUgY291bnRlciBzdHlsZSIKKwlkZWZhdWx0IDAKKwlkZXBlbmRzIG9uIFBSSU5USwor
CWRlcGVuZHMgb24gQVJNNjQgfHwgWDg2XzY0IHx8IFJJU0NWX1RJTUVSCisJaGVscAorCSAgQm9v
bGVhbiB2YWx1ZSwgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKworCSAgU2V0IHRoaXMgdG8gcHJvdmlk
ZSBjeWNsZXMgaW5mb3JtYXRpb24gZm9yIHByaW50a3MgaW4gZWFybHkgYm9vdAorCSAgKGJlZm9y
ZSB0aGUgc3RhcnQgb2Yga2VybmVsIHRpbWVrZWVwaW5nKSwgdGhhdCB3b3VsZCBvdGhlcndpc2UK
KwkgIHNob3cgYXMgMC4gUHJvZmlsaW5nIGJ5IHJlbGF0aXZlIG1vbm90b25pYyB2YWx1ZXMsIG5v
dCB0aW1lLiAKKworCSAgTm90ZSB0aGF0IHRoaXMgY2F1c2VzIHRoZSBrZXJuZWwgdG8gc2hvdywg
Zm9yIHNvbWUgZWFybHkgcHJpbnRrcywKKwkgIGN5Y2xlcyB0aGF0IGFyZSByZWxhdGl2ZSB0byBw
cm9jZXNzb3IgcG93ZXIgb24sIGluc3RlYWQgb2YKKwkgIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBv
ZiBrZXJuZWwgdGltZWtlZXBpbmcuICBXaGVuIGtlcm5lbAorCSAgdGltZWtlZXBpbmcgc3RhcnRz
LCB0aGUgdGltZXN0YW1wcyB2YWx1ZXMgcmVzZXQsIGNhdXNpbmcKKwkgIGEgZGlzY29udGludWl0
eSBpbiB0aGUgdGltZXN0YW1wIHZhbHVlcy4KKworCSAgSWYgdW5zdXJlLCBrZWVwIGl0IGRpc2Fi
bGVkIGFzIHBlciBpdHMgZGVmYXVsdC4KKwogY29uZmlnIExPR19CVUZfU0hJRlQKIAlpbnQgIktl
cm5lbCBsb2cgYnVmZmVyIHNpemUgKDE2ID0+IDY0S0IsIDE3ID0+IDEyOEtCKSIKIAlyYW5nZSAx
MiAyNQpkaWZmIC0tZ2l0IGEva2VybmVsL3ByaW50ay9wcmludGsuYyBiL2tlcm5lbC9wcmludGsv
cHJpbnRrLmMKaW5kZXggMDMyMzE0OTU0OGY2Li5kZGVhYjgxZjA0ZWYgMTAwNjQ0Ci0tLSBhL2tl
cm5lbC9wcmludGsvcHJpbnRrLmMKKysrIGIva2VybmVsL3ByaW50ay9wcmludGsuYwpAQCAtMjI5
NCw2ICsyMjk1LDggQEAgaW50IHZwcmludGtfc3RvcmUoaW50IGZhY2lsaXR5LCBpbnQgbGV2ZWws
CiAJICogdGltZXN0YW1wIHdpdGggcmVzcGVjdCB0byB0aGUgY2FsbGVyLgogCSAqLwogCXRzX25z
ZWMgPSBsb2NhbF9jbG9jaygpOwogCisjaWYgQ09ORklHX0VBUkxZX0JPT1RfVElNSU5HUworI2lu
Y2x1ZGUgImVhcmx5X3RpbWVzLmgiCisJCS8qCisJCSAqIFZlcnkgZmV3IGRldmVsb3BlcnMgYXJl
IHVzaW5nIHRoaXMgZmVhdHVyZSBhbmQgdGhleSdyZSBleHBlY3RpbmcgdG8gZGVhbAorCQkgKiB3
aXRoIGl0IGFzIGEgc2luZ2xlIHBvaW50IG9mIGNoYW5nZSBoYWNrIHRvIGJlIGZ1cnRoZXIgY3Vz
dG9taXNlZCBieSB0aGVtLgorCQkgKiBUaGUgcmlnaHQgc2hpZnQgYnkgMl4xMCBpcyBhIHJhdyBl
eHRpbWF0aW9uIHRvIHByb3ZpZGUgNi1maWd1cmUgd2l0aGluIHRoZQorCQkgKiBmaXJzdCBzZWNv
bmQgd2hlbiB0aGUga2VybmVsIGludGVybmFsIGN5Y2xlL25TIGNhbGlicmF0aW9uIGlzbid0IHJl
YWR5IHlldC4KKwkJICovCisJCWlmICh1bmxpa2VseSghdHNfbnNlYykpCisJCQl0c19uc2VjID0g
X19lYXJseV9yYXdfY3ljbGVzID4+IDEwOworI2VuZGlmCisKIAljYWxsZXJfaWQgPSBwcmludGtf
Y2FsbGVyX2lkKCk7CiAKLS0gCjIuNDMuMAo=
--000000000000401a9e064f7c3879--