Re: [PATCH v4 1/1] printk: fix zero-valued printk timestamps in early boot
"Roberto A. Foglietta" <[email protected]> Wed, 15 Apr 2026 21:23:32 +0200
| Newsgroups | org.kernel.vger.linux-embedded,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <CAJGKYO4d65gUBr5_hY0Z1XdwsxO31K8c25tDbGNuzBBU2RYXKQ@mail.gmail.com> |
--000000000000fa11f9064f84a890 Content-Type: text/plain; charset="UTF-8" On Wed, 15 Apr 2026 at 20:41, Geert Uytterhoeven <[email protected]> wrote: > > Hi Roberto, ... > Thanks for your patch! > > > --- /dev/null > > +++ kernel/printk/early_times.h > > @@ -0,0 +1,26 @@ > > +/* SPDX-License-Identifier: GPL-2.0 */ > > + > > +#ifndef _EARLY_TIMES_H > > +#define _EARLY_TIMES_H > > + > > +#include <linux/timekeeping.h> > > + > > +/* > > + * Fencing isn't optional here, otherwise unreliable values displaying > > + */ > > +#if defined(CONFIG_ARM64) > > + #include <asm/sysreg.h> > > + #define __early_raw_cycles ({ u64 val; \ > > + asm volatile("isb; mrs %0, cntvct_el0" : "=r"(val)); val; }) > > +#elif defined(CONFIG_X86_64) > > + #define __early_raw_cycles ({ u64 val; \ > > + asm volatile("lfence; rdtsc; shl $32, %%rdx; or %%rdx, %%rax" \ > > + : "=a"(val) : : "rdx"); val; }) > > +#elif defined(CONFIG_RISCV_TIMER) > > + #define __early_raw_cycles ({ u64 val; \ > > + asm volatile("fence; rdtime %0" : "=r"(val)); val; }) > > +#else > > All of these should be handled in arch/*/include/asm/early_times.h... > > > + #define __early_raw_cycles 0 > > ... while this should be in include/asm-generic/early_times.h. In the last release of the patch, I decided to stick with the "single point of hacking" approach https://github.com/robang74/uchaosys/blob/v069/cnfg/printk-early-boot-timestamps-hack-v5.patch and I developed it in a way that can be proposed in such "exceptional way" for this very specific case: +#if CONFIG_PRINTK_EARLY_BOOT_TIMINGS +#include "early_times.h" + /* + * Very few developers are using this feature and they're expecting to deal + * with it as a single point of change hack to be further customised by them. + */ + if (unlikely(!ts_nsec)) + ts_nsec = __early_raw_cycles; +#endif As you can see the include uses double quotes to indicate that the header is local and it is not supposed to belong to the formal three: it is where everyone of us will put it when we are going to do dirty tricks to reach somewhat result, in the same folder of the printk.c, out-of-the-three. Why is this a very special case? - First of all because just a variable is provided by the macros set. No hypothesis, just a variable as-is because most of the few users that might be interested in are going to watch HOW the relative sequences of events are happening. Moreover, there is no reason to pretend (sell) a timestamp when the timestamp sub-system is not ready to provide that feature: fairness first, by clarity. Previously the time skew was from zeros and something, now from two different ways of tagging the printk. - Second, because there is a very limited use of it due to almost immediate timestamp readiness. Therefore those who are interested, they were hacking with very LOW level stuff (or BIOS for those are constraint but that evilness in x86 arch). For those people the ASM code is fine and it is very useful to have it in the same place. And it is in the interest of those who maintain the kernel that those people have a single point of hack for the major arch available. Easier is for them to test different arches, far more improbable an under-tested patch will reach a proposal upstream stage... and trust me about "under-tested" because I am an expert on that field... ;-) LOL - Third, because every assumption has been removed, even the basics >>10 shifts. Just something that appears as a variable emerging from a local header and these two things together should ring some bells in the head of those who have a little experience of firmware / embedded. Few constructs are more vicious than macros that resemble variables... ;-) > > + if (unlikely(!ts_nsec)) > > + ts_nsec = __early_raw_cycles >> 10; > > As there can be lots of variation in the granularity of early timers, > I think the shift should be moved in the arch-specific __early_raw_cycles, > so it is only done when useful. > I am attaching the matured V5 patch that I tested against the 5.15.202 LTS kernel. Please, sit on the approach -- include"local-stuff.h" -- and let your judgement get soothed by time and PoVs. For sure one change is probably a necessity, moving the Kconfig part into the DEBUG section from the INIT where it stays by now. However, moving a feature around the menuconfig is the last and less effort change in a TODO list. For sake of completeness, I am attaching the V5 matured patch. Will it be refused because of its approach? Fine, at least the idea of that approach has a patch that can be applied to something and people can give it a try. Which add a practical degree of judgemental because usually we are attracted by the beauty of perfection and purity, something that Franco Battiato entitled "Inneres Auge" (a call from above) but as complementary we are also keen to fall in love for those bare-simple dirty-practical solution... in the same sense that song was intending with a convoluted and educated paraphrase... LOL Cheers, R- --000000000000fa11f9064f84a890 Content-Type: text/x-patch; charset="US-ASCII"; name="printk-early-boot-timestamps-hack-v5.patch" Content-Disposition: attachment; filename="printk-early-boot-timestamps-hack-v5.patch" Content-Transfer-Encoding: base64 Content-ID: <f_mo0fht4z0> X-Attachment-Id: f_mo0fht4z0 VGhpcyBpcyBhIGhlYXZpbHkgInJlZmFjdG9yZWQgYnkgaGFuZHMiIHBhdGNoIGZvciBMaW51eCBL ZXJuZWwgNS4xNS4yMDIgTFRTCnRyeWluZyB0byBzb2x2ZSB0aGUgc291cmNlIHRyZWUgamFuaXRv cmluZyB2cyAxLXNpbmdsZSBwbGFjZSBoYWNrIGZvciBoYWNrZXJzCmluIG5lZWQgZm9yIGEgc2lt cGxlLWJhcmUgcHJvZmlsaW5nIHRvb2wgYW5kIGJhc2VkIG9uIHRoZSBwYXRjaCBWNCBzdWJtaXR0 ZWQgYnkKCkZyb206IFRpbSBCaXJkIDx0aW0uYmlyZEBzb255LmNvbT4KU3ViamVjdDogW1BBVENI IHY0IDEvMV0gcHJpbnRrOiBmaXggemVyby12YWx1ZWQgcHJpbnRrIHRpbWVzdGFtcHMgaW4gZWFy bHkgYm9vdApEYXRlOiBGcmksIDEwIEFwciAyMDI2IDE0OjM3OjQxIC0wNjAwCk1lc3NhZ2UtSUQ6 IDwyMDI2MDQxMDIwMzc0MS45OTc0MTAtMi10aW0uYmlyZEBzb255LmNvbT4KCkR1cmluZyBlYXJs eSBib290LCBwcmludGsgdGltZXN0YW1wcyBhcmUgcmVwb3J0ZWQgYXMgemVybyBiZWZvcmUKa2Vy bmVsIHRpbWVrZWVwaW5nIHN0YXJ0cyAoaS5lLiBiZWZvcmUgdGltZV9pbml0KCkpLiBUaGlzIGhp bmRlcnMKYm9vdC10aW1lIG9wdGltaXphdGlvbiBlZmZvcnRzLiBUaGlzIHBlcmlvZCByYW5nZXMg ZnJvbSAxNyB0byAxNzAwCm1pbGxpc2Vjb25kcyBvbiBkaWZmZXJlbnQgZW1iZWRkZWQgbWFjaGlu ZXMgcnVubmluZyBMaW51eC4KCkFkZCBzdXBwb3J0IGZvciBlYXJseSB0aW1lc3RhbXBzIGJhc2Vk IG9uIHByb2Nlc3NvciBjeWNsZS1nZW5lcmF0b3JzCnRoYXQgbmVlZCBubyBrZXJuZWwgaW5pdGlh bGl6YXRpb24uVGhpcyBmZWF0dXJlIGlzbid0IGludGVuZGVkIGZvciBhIApnZW5lcmljIGRpc3Ry byBrZXJuZWxzIGJ1dCBmb3IgdGVtcG9yYXJ5IHVzZSBkdXJpbmcga2VybmVsIGRldmVsb3BtZW50 CmFuZCBib290LXRpbWUgcmVzZWFyY2ggYW5kIG9wdGltaXphdGlvbiBieSBrZXJuZWwgaGFja2Vy cyBvbmx5LgoKVGhpcyB5aWVsZHMgbm9uLXplcm8gdGltZXN0YW1wcyBmb3IgcHJpbnRrcyBmcm9t IHRoZSB2ZXJ5IHN0YXJ0Cm9mIGtlcm5lbCBleGVjdXRpb24uIFRoZSB0aW1lc3RhbXBzIGFyZSBy ZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YKYW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvdW50ZXIg KGUuZy4gdHNjIG9uIHg4Nl82NCBhbmQgY250dmN0X2VsMApvbiBhcm02NCkuIEFmZmVjdGVkIHRp bWVzdGFtcHMgcmVmbGVjdCBjeWNsZSBjb3VudGVyIHJlbGF0ZWQgdmFsdWVzCnNpbmNlIGluaXQg KHVzdWFsbHkgbWFjaGluZSBwb3dlci1vbiBvciB2aXJ0dWFsIG1hY2hpbmUgc3RhcnQpIGluc3Rl YWQKb2YgdGltZSBmcm9tIHRoZSBrZXJuZWwncyB0aW1la2VlcGluZyBpbml0aWFsaXphdGlvbi4g VGhpcyByZXN1bHRzIGluCmEgZGlzY29udGludWl0eSBpbiB0aGUgcHJpbnRrIHRpbWVzdGFtcCB2 YWx1ZXMsIG9uZSB0aW1lLCB3aGVuCmtlcm5lbCB0aW1la2VlcGluZyBzdGFydHMuCgpTaWduZWQt b2ZmLWJ5OiBUaW0gQmlyZCA8dGltLmJpcmRAc29ueS5jb20+ClNpZ25lZC1vZmYtYnk6IFJvYmVy dG8gQS4gRm9nbGlldHRhIDxyb2JlcnRvLmZvZ2xpZXR0YUBnbWFpbC5jb20+Ci0tLQpWNSAtPiBW NAogIFJhdGlvbmFsZTogc2luZ2xlIHBvaW50IG9mIGNoYW5nZSBoYWNrIGZvciBwcmludGsuIENv ZGUgcmV3cml0dGVuLCBlbnRpcmVseS4KICBJdCBwcm92aWRlcyBhIGZlYXR1cmUgZm9yIGtlcm5l bCBoYWNrZXJzIHdpbGxpbmcgdG8gcHJvZmlsaW5nIHRoZSBlYXJseSBib290CiAgd2l0aCBhIGJh c2ljIHByaW50ayBhcHByb2FjaCAocmF0aGVyIHRoYW4gdXNpbmcgSFcgbW9uaXRvcnMgd2hpY2gg bWlnaHQgbm90CiAgYmUgYXZhaWxhYmxlIG9yIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSkuIFRodXMs IGl0IGlzIGEgZmlyc3QtbG9vayBvciBhIGxhc3QKICByZXNvcnQgaGFjayBwcm9maWxpbmcgZmVh dHVyZS4gU29tZXRoaW5nIHRoYXQgaXNuJ3QgZ29vZCB0byBzcHJlYWQgYXJvdW5kCiAgdGhlIGtl cm5lbCBzb3VyY2VzIHRyZWUgYW5kIGl0IGlzIGZpbmUgdG8gaGF2ZSBpbnRvIGEgc2luZ2xlIGhl YWRlciBmaWxlLgpWMyAtPiBWNAogIFJlcGxhY2UgY29uZmlnIHZhcnMgd2l0aCBzaW5nbGUgb25l OiBDT05GSUdfRUFSTFlfQ1lDTEVTX0tIWgogIFJlcGxhY2UgcnVudGltZSBjYWxpYnJhdGlvbiB3 aXRoIHN0YXRpYyBjb25maWcgdmFyaWFibGUKICBSZW1vdmUgcmVmZXJlbmNlIHRvIGdldF9jeWNs ZXMoKQogIEFkZCBzdXBwb3J0IGZvciBSSVNDViBwbGF0Zm9ybXMKVjIgLT4gVjMKICBEZWZhdWx0 IENPTkZJRyBvcHRpb24gdG8gJ24nCiAgTW92ZSBtb3JlIGNvZGUgaW50byBlYXJseV90aW1lcy5o IChyZWR1Y2UgaWZkZWZzIGluIGluaXQvbWFpbi5jKQogIFVzZSBtYXRjaDY0IGhlbHBlciByb3V0 aW5lcwogIFVzZSBjeWNsZXNfdCBpbnN0ZWFkIG9mIHU2NCB0eXBlCiAgQWRkICNkZWZpbmVzIGZv ciBFQVJMWV9DWUNMRVNfQklUIGFuZCBFQVJMWV9DWUNMRVNfTUFTSwogIEludmVydCBpZiBsb2dp YyBpbiBhZGp1c3RfZWFybHlfdHMoKQpWMSAtPiBWMgogIFJlbW92ZSBjYWxpYnJhdGlvbiBDT05G SUcgdmFycwogIEFkZCAnZGVwZW5kcyBvbicgdG8gcmVzdHJpY3QgYXJjaGVzICh0byBoYW5kbGUg cHBjIGJ1ZykKICBBZGQgZWFybHlfdHNfb2Zmc2V0IHRvIGF2b2lkIGRpc2NvbnRpbnVpdHkKICBT YXZlIGN5Y2xlcyBpbiB0c19uc2VjLCBhbmQgY29udmVydCBvbiBvdXRwdXQKICBNb3ZlIGNvbmRp dGlvbmFsIGNvZGUgdG8gaW5jbHVkZSBmaWxlIGVhcmx5X3RpbWVzLmgKCi0tLSBhL2luaXQvS2Nv bmZpZwkyMDI2LTA0LTE1IDExOjM0OjA1LjgyMzQzMzcxMiArMDIwMAorKysgYi9pbml0L0tjb25m aWcJMjAyNi0wNC0xNSAxMTozNjoxMi43MDMzMzQ2MDQgKzAyMDAKQEAgLTgzMyw2ICs4MzMsMjcg QEAgY29uZmlnIFBSSU5US19JTkRFWAogCiAJICBUaGVyZSBpcyBubyBhZGRpdGlvbmFsIHJ1bnRp bWUgY29zdCB0byBwcmludGsgd2l0aCB0aGlzIGVuYWJsZWQuCiAKK2NvbmZpZyBQUklOVEtfRUFS TFlfQk9PVF9USU1JTkdTCisJYm9vbCAiRWFybHkgYm9vdCBwcmludGsgc2hvd3MgdGltZXMgaW4g cmF3IGN5Y2xlIGNvdW50ZXIgc3R5bGUiCisJZGVmYXVsdCAwCisJZGVwZW5kcyBvbiBQUklOVEsK KwlkZXBlbmRzIG9uIEFSTTY0IHx8IFg4Nl82NCB8fCBSSVNDVl9USU1FUgorCXNlbGVjdCBQUklO VEtfVElNRQorCWhlbHAKKwkgIEJvb2xlYW4gdmFsdWUsIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisK KwkgIFNldCB0aGlzIHRvIHByb3ZpZGUgY3ljbGVzIGluZm9ybWF0aW9uIGZvciBwcmludGtzIGlu IGVhcmx5IGJvb3QKKwkgIChiZWZvcmUgdGhlIHN0YXJ0IG9mIGtlcm5lbCB0aW1la2VlcGluZyks IHRoYXQgd291bGQgb3RoZXJ3aXNlCisJICBzaG93IGFzIDAuIFByb2ZpbGluZyBieSByZWxhdGl2 ZSBtb25vdG9uaWMgdmFsdWVzLCBub3QgdGltZS4KKworCSAgTm90ZSB0aGF0IHRoaXMgY2F1c2Vz IHRoZSBrZXJuZWwgdG8gc2hvdywgZm9yIHNvbWUgZWFybHkgcHJpbnRrcywKKwkgIGN5Y2xlcyB0 aGF0IGFyZSByZWxhdGl2ZSB0byBwcm9jZXNzb3IgcG93ZXIgb24sIGluc3RlYWQgb2YKKwkgIHJl bGF0aXZlIHRvIHRoZSBzdGFydCBvZiBrZXJuZWwgdGltZWtlZXBpbmcuIFdoZW4ga2VybmVsCisJ ICB0aW1la2VlcGluZyBzdGFydHMsIHRoZSB0aW1lc3RhbXBzIHZhbHVlcyByZXNldCwgY2F1c2lu ZworCSAgYSBkaXNjb250aW51aXR5IGluIHRoZSB0aW1lc3RhbXAgdmFsdWVzLgorCisJICBJZiB1 bnN1cmUsIGtlZXAgaXQgZGlzYWJsZWQgYXMgcGVyIGl0cyBkZWZhdWx0LgorCiAjCiAjIEFyY2hp dGVjdHVyZXMgd2l0aCBhbiB1bnJlbGlhYmxlIHNjaGVkX2Nsb2NrKCkgc2hvdWxkIHNlbGVjdCB0 aGlzOgogIwotLS0gL2Rldi9udWxsCTIwMjYtMDQtMTAgMTU6MzU6NDkuNjU5NzQxNjQ0ICswMjAw CisrKyBiL2tlcm5lbC9wcmludGsvZWFybHlfdGltZXMuaAkyMDI2LTA0LTE1IDExOjMyOjQ5Ljc4 NjcyODYwMiArMDIwMApAQCAtMCwwICsxLDI2IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMCAqLworCisjaWZuZGVmIF9FQVJMWV9USU1FU19ICisjZGVmaW5lIF9FQVJMWV9U SU1FU19ICisKKyNpbmNsdWRlIDxsaW51eC90aW1la2VlcGluZy5oPgorCisvKgorICogRmVuY2lu ZyBpc24ndCBvcHRpb25hbCBoZXJlLCBvdGhlcndpc2UgdW5yZWxpYWJsZSB2YWx1ZXMgZGlzcGxh eWluZworICovCisjaWYgZGVmaW5lZChDT05GSUdfQVJNNjQpCisJI2luY2x1ZGUgPGFzbS9zeXNy ZWcuaD4KKwkjZGVmaW5lIF9fZWFybHlfcmF3X2N5Y2xlcyAoeyB1NjQgdmFsOyBcCisJCWFzbSB2 b2xhdGlsZSgiaXNiOyBtcnMgJTAsIGNudHZjdF9lbDAiIDogIj1yIih2YWwpKTsgdmFsOyB9KQor I2VsaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KQorCSNkZWZpbmUgX19lYXJseV9yYXdfY3ljbGVz ICh7IHU2NCB2YWw7IFwKKwkJYXNtIHZvbGF0aWxlKCJsZmVuY2U7IHJkdHNjOyBzaGwgJDMyLCAl JXJkeDsgb3IgJSVyZHgsICUlcmF4IiBcCisJCQk6ICI9YSIodmFsKSA6IDogInJkeCIpOyB2YWw7 IH0pCisjZWxpZiBkZWZpbmVkKENPTkZJR19SSVNDVl9USU1FUikKKwkjZGVmaW5lIF9fZWFybHlf cmF3X2N5Y2xlcyAoeyB1NjQgdmFsOyBcCisJCWFzbSB2b2xhdGlsZSgiZmVuY2U7IHJkdGltZSAl MCIgOiAiPXIiKHZhbCkpOyB2YWw7IH0pCisjZWxzZQorCSNkZWZpbmUgX19lYXJseV9yYXdfY3lj bGVzIDAKKyNlbmRpZgorCisjZW5kaWYgLyogX0VBUkxZX1RJTUVTX0ggKi8KLS0tIGEva2VybmVs L3ByaW50ay9wcmludGsuYwkyMDI2LTA0LTE1IDExOjM5OjU1LjM3MjA2NjgwMiArMDIwMAorKysg Yi9rZXJuZWwvcHJpbnRrL3ByaW50ay5jCTIwMjYtMDQtMTUgMTE6Mzk6MzMuNDU4OTUzNTgyICsw MjAwCkBAIC0yMTUxLDYgKzIxNTEsMTYgQEAgaW50IHZwcmludGtfc3RvcmUoaW50IGZhY2lsaXR5 LCBpbnQgbGV2ZQogCSAqLwogCXRzX25zZWMgPSBsb2NhbF9jbG9jaygpOwogCisjaWYgQ09ORklH X1BSSU5US19FQVJMWV9CT09UX1RJTUlOR1MKKyNpbmNsdWRlICJlYXJseV90aW1lcy5oIgorCS8q CisJICogVmVyeSBmZXcgZGV2ZWxvcGVycyBhcmUgdXNpbmcgdGhpcyBmZWF0dXJlIGFuZCB0aGV5 J3JlIGV4cGVjdGluZyB0byBkZWFsCisJICogd2l0aCBpdCBhcyBhIHNpbmdsZSBwb2ludCBvZiBj aGFuZ2UgaGFjayB0byBiZSBmdXJ0aGVyIGN1c3RvbWlzZWQgYnkgdGhlbS4KKwkgKi8KKwlpZiAo dW5saWtlbHkoIXRzX25zZWMpKQorCQl0c19uc2VjID0gX19lYXJseV9yYXdfY3ljbGVzOworI2Vu ZGlmCisKIAlpZiAoIXByaW50a19lbnRlcl9pcnFzYXZlKHJlY3Vyc2lvbl9wdHIsIGlycWZsYWdz KSkKIAkJcmV0dXJuIDA7CiAK --000000000000fa11f9064f84a890--