linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4] printk: Add monotonic, boottime, and realtime timestamps
@ 2017-08-07 15:52 Prarit Bhargava
  2017-08-07 16:52 ` John Stultz
                   ` (3 more replies)
  0 siblings, 4 replies; 16+ messages in thread
From: Prarit Bhargava @ 2017-08-07 15:52 UTC (permalink / raw)
  To: linux-kernel
  Cc: Prarit Bhargava, Mark Salyzyn, Jonathan Corbet, Petr Mladek,
	Sergey Senozhatsky, Steven Rostedt, John Stultz, Thomas Gleixner,
	Stephen Boyd, Andrew Morton, Greg Kroah-Hartman,
	Paul E. McKenney, Christoffer Dall, Deepa Dinamani, Ingo Molnar,
	Joel Fernandes, Kees Cook, Peter Zijlstra, Geert Uytterhoeven,
	Luis R. Rodriguez, Nicholas Piggin, Jason A. Donenfeld,
	Olof Johansson, Josh Poimboeuf, linux-doc

printk.time=1/CONFIG_PRINTK_TIME=1 adds a unmodified local hardware clock
timestamp to printk messages.  The local hardware clock loses time each
day making it difficult to determine exactly when an issue has occurred in
the kernel log, and making it difficult to determine how kernel and
hardware issues relate to each other in real time.

Make printk output different timestampes by adding options for no
timestamp, the local hardware clock, the monotonic clock, the boottime
clock, and the real clock.  Allow a user to pick one of the clocks by
using the printk.time kernel parameter.  Output the type of clock in
/sys/module/printk/parameters/time so userspace programs can interpret the
timestamp.

Real clock & 32-bit systems:  Selecting the real clock printk timestamp may
lead to unlikely situations where a timestamp is wrong because the real time
offset is read without the protection of a sequence lock in the call to
ktime_get_log_ts() in printk_get_ts().

v2: Use peterz's suggested Kconfig options.  Merge patchset together.
Fix i386 !CONFIG_PRINTK builds.

v3: Fixed x86_64_defconfig. Added printk_time_type enum and
printk_time_str for better output. Added BOOTTIME clock functionality.

v4: Fix messages, add additional printk.time options, and fix configs.

Signed-off-by: Prarit Bhargava <prarit@redhat.com>
Cc: Mark Salyzyn <salyzyn@android.com>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Petr Mladek <pmladek@suse.com>
Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: John Stultz <john.stultz@linaro.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Stephen Boyd <sboyd@codeaurora.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Cc: Christoffer Dall <cdall@linaro.org>
Cc: Deepa Dinamani <deepa.kernel@gmail.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Joel Fernandes <joelaf@google.com>
Cc: Prarit Bhargava <prarit@redhat.com>
Cc: Kees Cook <keescook@chromium.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Geert Uytterhoeven <geert+renesas@glider.be>
Cc: "Luis R. Rodriguez" <mcgrof@kernel.org>
Cc: Nicholas Piggin <npiggin@gmail.com>
Cc: "Jason A. Donenfeld" <Jason@zx2c4.com>
Cc: Olof Johansson <olof@lixom.net>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: linux-doc@vger.kernel.org
---
 Documentation/admin-guide/kernel-parameters.txt    |   6 +-
 arch/arm/configs/aspeed_g4_defconfig               |   2 +-
 arch/arm/configs/aspeed_g5_defconfig               |   2 +-
 arch/arm/configs/axm55xx_defconfig                 |   2 +-
 arch/arm/configs/bcm2835_defconfig                 |   2 +-
 arch/arm/configs/colibri_pxa270_defconfig          |   2 +-
 arch/arm/configs/colibri_pxa300_defconfig          |   2 +-
 arch/arm/configs/dove_defconfig                    |   2 +-
 arch/arm/configs/efm32_defconfig                   |   2 +-
 arch/arm/configs/exynos_defconfig                  |   2 +-
 arch/arm/configs/ezx_defconfig                     |   2 +-
 arch/arm/configs/h5000_defconfig                   |   2 +-
 arch/arm/configs/hisi_defconfig                    |   2 +-
 arch/arm/configs/imote2_defconfig                  |   2 +-
 arch/arm/configs/imx_v6_v7_defconfig               |   2 +-
 arch/arm/configs/keystone_defconfig                |   2 +-
 arch/arm/configs/lpc18xx_defconfig                 |   2 +-
 arch/arm/configs/magician_defconfig                |   2 +-
 arch/arm/configs/mmp2_defconfig                    |   2 +-
 arch/arm/configs/moxart_defconfig                  |   2 +-
 arch/arm/configs/mps2_defconfig                    |   2 +-
 arch/arm/configs/multi_v7_defconfig                |   2 +-
 arch/arm/configs/mvebu_v7_defconfig                |   2 +-
 arch/arm/configs/mxs_defconfig                     |   2 +-
 arch/arm/configs/omap2plus_defconfig               |   2 +-
 arch/arm/configs/pxa168_defconfig                  |   2 +-
 arch/arm/configs/pxa3xx_defconfig                  |   2 +-
 arch/arm/configs/pxa910_defconfig                  |   2 +-
 arch/arm/configs/pxa_defconfig                     |   2 +-
 arch/arm/configs/qcom_defconfig                    |   2 +-
 arch/arm/configs/raumfeld_defconfig                |   2 +-
 arch/arm/configs/shmobile_defconfig                |   2 +-
 arch/arm/configs/socfpga_defconfig                 |   2 +-
 arch/arm/configs/stm32_defconfig                   |   2 +-
 arch/arm/configs/sunxi_defconfig                   |   2 +-
 arch/arm/configs/tango4_defconfig                  |   2 +-
 arch/arm/configs/tegra_defconfig                   |   2 +-
 arch/arm/configs/u300_defconfig                    |   2 +-
 arch/arm/configs/u8500_defconfig                   |   2 +-
 arch/arm/configs/vt8500_v6_v7_defconfig            |   2 +-
 arch/arm/configs/xcep_defconfig                    |   2 +-
 arch/arm/configs/zx_defconfig                      |   2 +-
 arch/arm64/configs/defconfig                       |   2 +-
 arch/m68k/configs/amcore_defconfig                 |   2 +-
 arch/mips/configs/ath25_defconfig                  |   2 +-
 arch/mips/configs/bcm47xx_defconfig                |   2 +-
 arch/mips/configs/bmips_be_defconfig               |   2 +-
 arch/mips/configs/bmips_stb_defconfig              |   2 +-
 arch/mips/configs/ci20_defconfig                   |   2 +-
 arch/mips/configs/generic_defconfig                |   2 +-
 arch/mips/configs/lemote2f_defconfig               |   2 +-
 arch/mips/configs/loongson3_defconfig              |   2 +-
 arch/mips/configs/nlm_xlp_defconfig                |   2 +-
 arch/mips/configs/nlm_xlr_defconfig                |   2 +-
 arch/mips/configs/pistachio_defconfig              |   2 +-
 arch/mips/configs/qi_lb60_defconfig                |   2 +-
 arch/mips/configs/rt305x_defconfig                 |   2 +-
 arch/mips/configs/xway_defconfig                   |   2 +-
 arch/parisc/configs/generic-64bit_defconfig        |   2 +-
 arch/powerpc/configs/40x/virtex_defconfig          |   2 +-
 arch/powerpc/configs/44x/fsp2_defconfig            |   2 +-
 arch/powerpc/configs/44x/virtex5_defconfig         |   2 +-
 arch/powerpc/configs/44x/warp_defconfig            |   2 +-
 arch/powerpc/configs/52xx/cm5200_defconfig         |   2 +-
 arch/powerpc/configs/52xx/lite5200b_defconfig      |   2 +-
 arch/powerpc/configs/52xx/motionpro_defconfig      |   2 +-
 arch/powerpc/configs/52xx/tqm5200_defconfig        |   2 +-
 arch/powerpc/configs/gamecube_defconfig            |   2 +-
 arch/powerpc/configs/mpc5200_defconfig             |   2 +-
 arch/powerpc/configs/pasemi_defconfig              |   2 +-
 arch/powerpc/configs/wii_defconfig                 |   2 +-
 arch/s390/configs/default_defconfig                |   2 +-
 arch/s390/configs/gcov_defconfig                   |   2 +-
 arch/s390/configs/performance_defconfig            |   2 +-
 arch/s390/configs/zfcpdump_defconfig               |   2 +-
 arch/sh/configs/edosk7760_defconfig                |   2 +-
 arch/sh/configs/sdk7786_defconfig                  |   2 +-
 arch/sh/configs/se7722_defconfig                   |   2 +-
 arch/sh/configs/sh7785lcr_32bit_defconfig          |   2 +-
 arch/sh/configs/urquell_defconfig                  |   2 +-
 arch/sparc/configs/sparc64_defconfig               |   2 +-
 arch/x86/configs/i386_defconfig                    |   2 +-
 arch/x86/configs/x86_64_defconfig                  |   2 +-
 arch/xtensa/configs/audio_kc705_defconfig          |   2 +-
 arch/xtensa/configs/cadence_csp_defconfig          |   2 +-
 arch/xtensa/configs/generic_kc705_defconfig        |   2 +-
 arch/xtensa/configs/nommu_kc705_defconfig          |   2 +-
 arch/xtensa/configs/smp_lx200_defconfig            |   2 +-
 include/linux/timekeeping.h                        |   2 +
 kernel/printk/printk.c                             | 121 ++++++++++++++++++++-
 kernel/time/timekeeping.c                          |  22 ++++
 lib/Kconfig.debug                                  |  43 +++++++-
 .../selftests/rcutorture/configs/lock/CFcommon     |   2 +-
 .../selftests/rcutorture/configs/rcu/CFcommon      |   2 +-
 .../selftests/rcutorture/configs/rcuperf/CFcommon  |   2 +-
 95 files changed, 276 insertions(+), 98 deletions(-)

diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
index d9c171ce4190..1ba277ecbf24 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -3188,8 +3188,10 @@
 			ratelimit - ratelimit the logging
 			Default: ratelimit
 
-	printk.time=	Show timing data prefixed to each printk message line
-			Format: <bool>  (1/Y/y=enable, 0/N/n=disable)
+	printk.time=	Show timestamp prefixed to each printk message line
+			Format: <string>
+				(0/N/n/disable, 1/Y/y/local,
+				 b/boot, m/monotonic, r/realtime)
 
 	processor.max_cstate=	[HW,ACPI]
 			Limit processor to maximum C-state
diff --git a/arch/arm/configs/aspeed_g4_defconfig b/arch/arm/configs/aspeed_g4_defconfig
index cfc2465e8b77..5f3c50914e92 100644
--- a/arch/arm/configs/aspeed_g4_defconfig
+++ b/arch/arm/configs/aspeed_g4_defconfig
@@ -162,7 +162,7 @@ CONFIG_JFFS2_FS_XATTR=y
 CONFIG_UBIFS_FS=y
 CONFIG_SQUASHFS=y
 CONFIG_SQUASHFS_XZ=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DYNAMIC_DEBUG=y
 CONFIG_STRIP_ASM_SYMS=y
 CONFIG_DEBUG_FS=y
diff --git a/arch/arm/configs/aspeed_g5_defconfig b/arch/arm/configs/aspeed_g5_defconfig
index 3c20d93de389..a9082d7504de 100644
--- a/arch/arm/configs/aspeed_g5_defconfig
+++ b/arch/arm/configs/aspeed_g5_defconfig
@@ -165,7 +165,7 @@ CONFIG_JFFS2_FS_XATTR=y
 CONFIG_UBIFS_FS=y
 CONFIG_SQUASHFS=y
 CONFIG_SQUASHFS_XZ=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DYNAMIC_DEBUG=y
 CONFIG_STRIP_ASM_SYMS=y
 CONFIG_DEBUG_FS=y
diff --git a/arch/arm/configs/axm55xx_defconfig b/arch/arm/configs/axm55xx_defconfig
index 8e17e7ed1f02..e4d8acd0820c 100644
--- a/arch/arm/configs/axm55xx_defconfig
+++ b/arch/arm/configs/axm55xx_defconfig
@@ -231,7 +231,7 @@ CONFIG_NFS_FSCACHE=y
 CONFIG_SUNRPC_DEBUG=y
 CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_ISO8859_1=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_INFO=y
 CONFIG_DEBUG_FS=y
 CONFIG_MAGIC_SYSRQ=y
diff --git a/arch/arm/configs/bcm2835_defconfig b/arch/arm/configs/bcm2835_defconfig
index 3ee9d78c412a..15da3215a3c4 100644
--- a/arch/arm/configs/bcm2835_defconfig
+++ b/arch/arm/configs/bcm2835_defconfig
@@ -141,7 +141,7 @@ CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_ASCII=y
 CONFIG_NLS_ISO8859_1=y
 CONFIG_NLS_UTF8=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_BOOT_PRINTK_DELAY=y
 CONFIG_DYNAMIC_DEBUG=y
 CONFIG_DEBUG_INFO=y
diff --git a/arch/arm/configs/colibri_pxa270_defconfig b/arch/arm/configs/colibri_pxa270_defconfig
index 8995695fc118..0c11113bddc8 100644
--- a/arch/arm/configs/colibri_pxa270_defconfig
+++ b/arch/arm/configs/colibri_pxa270_defconfig
@@ -144,7 +144,7 @@ CONFIG_NLS_ASCII=y
 CONFIG_NLS_ISO8859_1=m
 CONFIG_NLS_ISO8859_15=m
 CONFIG_NLS_UTF8=m
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_MAGIC_SYSRQ=y
 CONFIG_DEBUG_FS=y
 CONFIG_DEBUG_KERNEL=y
diff --git a/arch/arm/configs/colibri_pxa300_defconfig b/arch/arm/configs/colibri_pxa300_defconfig
index d282e8b0bf33..c43c8777c2df 100644
--- a/arch/arm/configs/colibri_pxa300_defconfig
+++ b/arch/arm/configs/colibri_pxa300_defconfig
@@ -51,7 +51,7 @@ CONFIG_EXT3_FS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
 CONFIG_ROOT_NFS=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_KERNEL=y
 CONFIG_DEBUG_INFO=y
 CONFIG_DEBUG_USER=y
diff --git a/arch/arm/configs/dove_defconfig b/arch/arm/configs/dove_defconfig
index a93cc2fcf791..2ecc71d71c7d 100644
--- a/arch/arm/configs/dove_defconfig
+++ b/arch/arm/configs/dove_defconfig
@@ -118,7 +118,7 @@ CONFIG_NLS_CODEPAGE_850=y
 CONFIG_NLS_ISO8859_1=y
 CONFIG_NLS_ISO8859_2=y
 CONFIG_NLS_UTF8=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_MAGIC_SYSRQ=y
 CONFIG_DEBUG_FS=y
 # CONFIG_SCHED_DEBUG is not set
diff --git a/arch/arm/configs/efm32_defconfig b/arch/arm/configs/efm32_defconfig
index 860d27138e6f..bcc809398198 100644
--- a/arch/arm/configs/efm32_defconfig
+++ b/arch/arm/configs/efm32_defconfig
@@ -92,7 +92,7 @@ CONFIG_EXT2_FS=y
 CONFIG_ROMFS_FS=y
 CONFIG_ROMFS_BACKED_BY_MTD=y
 # CONFIG_NETWORK_FILESYSTEMS is not set
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_INFO=y
 # CONFIG_ENABLE_WARN_DEPRECATED is not set
 # CONFIG_ENABLE_MUST_CHECK is not set
diff --git a/arch/arm/configs/exynos_defconfig b/arch/arm/configs/exynos_defconfig
index 25325ed9319e..ae136425c18b 100644
--- a/arch/arm/configs/exynos_defconfig
+++ b/arch/arm/configs/exynos_defconfig
@@ -253,7 +253,7 @@ CONFIG_ROOT_NFS=y
 CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_ASCII=y
 CONFIG_NLS_ISO8859_1=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DYNAMIC_DEBUG=y
 CONFIG_DEBUG_INFO=y
 CONFIG_DEBUG_FS=y
diff --git a/arch/arm/configs/ezx_defconfig b/arch/arm/configs/ezx_defconfig
index 23660f3d0f7f..1f4e558284b9 100644
--- a/arch/arm/configs/ezx_defconfig
+++ b/arch/arm/configs/ezx_defconfig
@@ -363,7 +363,7 @@ CONFIG_NLS_ISO8859_15=m
 CONFIG_NLS_KOI8_R=m
 CONFIG_NLS_KOI8_U=m
 CONFIG_NLS_UTF8=m
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_FS=y
 CONFIG_DEBUG_KERNEL=y
 # CONFIG_SCHED_DEBUG is not set
diff --git a/arch/arm/configs/h5000_defconfig b/arch/arm/configs/h5000_defconfig
index e90d1dfeb188..702f3c0eed39 100644
--- a/arch/arm/configs/h5000_defconfig
+++ b/arch/arm/configs/h5000_defconfig
@@ -61,7 +61,7 @@ CONFIG_TMPFS=y
 CONFIG_JFFS2_FS=y
 CONFIG_JFFS2_COMPRESSION_OPTIONS=y
 # CONFIG_NETWORK_FILESYSTEMS is not set
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_KERNEL=y
 # CONFIG_SCHED_DEBUG is not set
 # CONFIG_DEBUG_BUGVERBOSE is not set
diff --git a/arch/arm/configs/hisi_defconfig b/arch/arm/configs/hisi_defconfig
index b2e340b272ee..8edb1194c2f3 100644
--- a/arch/arm/configs/hisi_defconfig
+++ b/arch/arm/configs/hisi_defconfig
@@ -82,7 +82,7 @@ CONFIG_NFS_FS=y
 CONFIG_NFS_V3_ACL=y
 CONFIG_NFS_V4=y
 CONFIG_ROOT_NFS=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_FS=y
 CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_ISO8859_1=y
diff --git a/arch/arm/configs/imote2_defconfig b/arch/arm/configs/imote2_defconfig
index f204017c26b9..47f33125979b 100644
--- a/arch/arm/configs/imote2_defconfig
+++ b/arch/arm/configs/imote2_defconfig
@@ -336,7 +336,7 @@ CONFIG_NLS_ISO8859_15=m
 CONFIG_NLS_KOI8_R=m
 CONFIG_NLS_KOI8_U=m
 CONFIG_NLS_UTF8=m
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_FS=y
 CONFIG_DEBUG_KERNEL=y
 # CONFIG_SCHED_DEBUG is not set
diff --git a/arch/arm/configs/imx_v6_v7_defconfig b/arch/arm/configs/imx_v6_v7_defconfig
index e74de69caeab..aeada269d4e6 100644
--- a/arch/arm/configs/imx_v6_v7_defconfig
+++ b/arch/arm/configs/imx_v6_v7_defconfig
@@ -382,7 +382,7 @@ CONFIG_NLS_ASCII=y
 CONFIG_NLS_ISO8859_1=y
 CONFIG_NLS_ISO8859_15=m
 CONFIG_NLS_UTF8=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_FS=y
 CONFIG_MAGIC_SYSRQ=y
 # CONFIG_SCHED_DEBUG is not set
diff --git a/arch/arm/configs/keystone_defconfig b/arch/arm/configs/keystone_defconfig
index 1331f6dc456a..d0f714554c04 100644
--- a/arch/arm/configs/keystone_defconfig
+++ b/arch/arm/configs/keystone_defconfig
@@ -200,7 +200,7 @@ CONFIG_NFSD_V3=y
 CONFIG_NFSD_V3_ACL=y
 CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_ISO8859_1=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_INFO=y
 CONFIG_DEBUG_SHIRQ=y
 CONFIG_DEBUG_USER=y
diff --git a/arch/arm/configs/lpc18xx_defconfig b/arch/arm/configs/lpc18xx_defconfig
index 23df2518203d..88aced7fc3a2 100644
--- a/arch/arm/configs/lpc18xx_defconfig
+++ b/arch/arm/configs/lpc18xx_defconfig
@@ -160,7 +160,7 @@ CONFIG_EXT2_FS=y
 # CONFIG_INOTIFY_USER is not set
 CONFIG_JFFS2_FS=y
 # CONFIG_NETWORK_FILESYSTEMS is not set
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_INFO=y
 # CONFIG_ENABLE_WARN_DEPRECATED is not set
 # CONFIG_ENABLE_MUST_CHECK is not set
diff --git a/arch/arm/configs/magician_defconfig b/arch/arm/configs/magician_defconfig
index ec5674c229a3..d131969de0cb 100644
--- a/arch/arm/configs/magician_defconfig
+++ b/arch/arm/configs/magician_defconfig
@@ -154,7 +154,7 @@ CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_CODEPAGE_1251=m
 CONFIG_NLS_ISO8859_1=y
 CONFIG_NLS_UTF8=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_KERNEL=y
 # CONFIG_SCHED_DEBUG is not set
 CONFIG_TIMER_STATS=y
diff --git a/arch/arm/configs/mmp2_defconfig b/arch/arm/configs/mmp2_defconfig
index 1eeee7f11d91..5b0475cfa215 100644
--- a/arch/arm/configs/mmp2_defconfig
+++ b/arch/arm/configs/mmp2_defconfig
@@ -74,7 +74,7 @@ CONFIG_NFS_V3=y
 CONFIG_NFS_V3_ACL=y
 CONFIG_NFS_V4=y
 CONFIG_ROOT_NFS=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_MAGIC_SYSRQ=y
 CONFIG_DEBUG_FS=y
 CONFIG_DEBUG_KERNEL=y
diff --git a/arch/arm/configs/moxart_defconfig b/arch/arm/configs/moxart_defconfig
index 2da0d9ee2107..bd29a3d9293d 100644
--- a/arch/arm/configs/moxart_defconfig
+++ b/arch/arm/configs/moxart_defconfig
@@ -123,7 +123,7 @@ CONFIG_EXT3_FS=y
 CONFIG_TMPFS=y
 CONFIG_CONFIGFS_FS=y
 CONFIG_JFFS2_FS=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_INFO=y
 # CONFIG_ENABLE_WARN_DEPRECATED is not set
 # CONFIG_ENABLE_MUST_CHECK is not set
diff --git a/arch/arm/configs/mps2_defconfig b/arch/arm/configs/mps2_defconfig
index 0bcdec7cc169..777835c1c21b 100644
--- a/arch/arm/configs/mps2_defconfig
+++ b/arch/arm/configs/mps2_defconfig
@@ -98,7 +98,7 @@ CONFIG_NFS_V4_1=y
 CONFIG_NFS_V4_2=y
 CONFIG_ROOT_NFS=y
 CONFIG_NLS=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_INFO=y
 # CONFIG_ENABLE_WARN_DEPRECATED is not set
 # CONFIG_ENABLE_MUST_CHECK is not set
diff --git a/arch/arm/configs/multi_v7_defconfig b/arch/arm/configs/multi_v7_defconfig
index 4d19c1b4b8e7..a8d046f15632 100644
--- a/arch/arm/configs/multi_v7_defconfig
+++ b/arch/arm/configs/multi_v7_defconfig
@@ -929,7 +929,7 @@ CONFIG_ROOT_NFS=y
 CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_ISO8859_1=y
 CONFIG_NLS_UTF8=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_FS=y
 CONFIG_MAGIC_SYSRQ=y
 CONFIG_LOCKUP_DETECTOR=y
diff --git a/arch/arm/configs/mvebu_v7_defconfig b/arch/arm/configs/mvebu_v7_defconfig
index 69553704f2dc..5c04f1f301a7 100644
--- a/arch/arm/configs/mvebu_v7_defconfig
+++ b/arch/arm/configs/mvebu_v7_defconfig
@@ -152,7 +152,7 @@ CONFIG_NLS_CODEPAGE_850=y
 CONFIG_NLS_ISO8859_1=y
 CONFIG_NLS_ISO8859_2=y
 CONFIG_NLS_UTF8=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_INFO=y
 CONFIG_DEBUG_FS=y
 CONFIG_MAGIC_SYSRQ=y
diff --git a/arch/arm/configs/mxs_defconfig b/arch/arm/configs/mxs_defconfig
index e5822ab01b7d..46cf9c63f226 100644
--- a/arch/arm/configs/mxs_defconfig
+++ b/arch/arm/configs/mxs_defconfig
@@ -167,7 +167,7 @@ CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_CODEPAGE_850=y
 CONFIG_NLS_ISO8859_1=y
 CONFIG_NLS_ISO8859_15=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_INFO=y
 CONFIG_FRAME_WARN=2048
 CONFIG_UNUSED_SYMBOLS=y
diff --git a/arch/arm/configs/omap2plus_defconfig b/arch/arm/configs/omap2plus_defconfig
index a120ae816260..0ee5782face7 100644
--- a/arch/arm/configs/omap2plus_defconfig
+++ b/arch/arm/configs/omap2plus_defconfig
@@ -493,7 +493,7 @@ CONFIG_NFS_V4=y
 CONFIG_ROOT_NFS=y
 CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_ISO8859_1=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_INFO=y
 CONFIG_DEBUG_INFO_SPLIT=y
 CONFIG_DEBUG_INFO_DWARF4=y
diff --git a/arch/arm/configs/pxa168_defconfig b/arch/arm/configs/pxa168_defconfig
index e7c7b91b6de2..b51e29401cbd 100644
--- a/arch/arm/configs/pxa168_defconfig
+++ b/arch/arm/configs/pxa168_defconfig
@@ -50,7 +50,7 @@ CONFIG_NFS_V3=y
 CONFIG_NFS_V3_ACL=y
 CONFIG_NFS_V4=y
 CONFIG_ROOT_NFS=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_MAGIC_SYSRQ=y
 CONFIG_DEBUG_KERNEL=y
 # CONFIG_DEBUG_PREEMPT is not set
diff --git a/arch/arm/configs/pxa3xx_defconfig b/arch/arm/configs/pxa3xx_defconfig
index bfea6874b0a1..4b651e11b59d 100644
--- a/arch/arm/configs/pxa3xx_defconfig
+++ b/arch/arm/configs/pxa3xx_defconfig
@@ -109,7 +109,7 @@ CONFIG_NFS_V3_ACL=y
 CONFIG_NFS_V4=y
 CONFIG_ROOT_NFS=y
 CONFIG_NLS=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_MAGIC_SYSRQ=y
 CONFIG_DEBUG_KERNEL=y
 CONFIG_DEBUG_SHIRQ=y
diff --git a/arch/arm/configs/pxa910_defconfig b/arch/arm/configs/pxa910_defconfig
index 3aff71e6dae5..47bcde44f5ed 100644
--- a/arch/arm/configs/pxa910_defconfig
+++ b/arch/arm/configs/pxa910_defconfig
@@ -58,7 +58,7 @@ CONFIG_NFS_V3=y
 CONFIG_NFS_V3_ACL=y
 CONFIG_NFS_V4=y
 CONFIG_ROOT_NFS=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_MAGIC_SYSRQ=y
 CONFIG_DEBUG_KERNEL=y
 # CONFIG_DEBUG_PREEMPT is not set
diff --git a/arch/arm/configs/pxa_defconfig b/arch/arm/configs/pxa_defconfig
index 64e3a2a8cede..e8e73782b99e 100644
--- a/arch/arm/configs/pxa_defconfig
+++ b/arch/arm/configs/pxa_defconfig
@@ -727,7 +727,7 @@ CONFIG_NLS_ASCII=m
 CONFIG_NLS_ISO8859_1=m
 CONFIG_NLS_ISO8859_15=m
 CONFIG_NLS_UTF8=m
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DYNAMIC_DEBUG=y
 CONFIG_DEBUG_INFO=y
 CONFIG_FRAME_WARN=0
diff --git a/arch/arm/configs/qcom_defconfig b/arch/arm/configs/qcom_defconfig
index b02039c712c3..4e3cd37cdbf3 100644
--- a/arch/arm/configs/qcom_defconfig
+++ b/arch/arm/configs/qcom_defconfig
@@ -231,7 +231,7 @@ CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_ASCII=y
 CONFIG_NLS_ISO8859_1=y
 CONFIG_NLS_UTF8=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DYNAMIC_DEBUG=y
 CONFIG_DEBUG_INFO=y
 CONFIG_MAGIC_SYSRQ=y
diff --git a/arch/arm/configs/raumfeld_defconfig b/arch/arm/configs/raumfeld_defconfig
index e3dc80ead465..1f95b508f519 100644
--- a/arch/arm/configs/raumfeld_defconfig
+++ b/arch/arm/configs/raumfeld_defconfig
@@ -187,7 +187,7 @@ CONFIG_NLS_ISO8859_15=y
 CONFIG_NLS_KOI8_R=y
 CONFIG_NLS_KOI8_U=y
 CONFIG_NLS_UTF8=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_KERNEL=y
 CONFIG_DEBUG_INFO=y
 CONFIG_DEBUG_USER=y
diff --git a/arch/arm/configs/shmobile_defconfig b/arch/arm/configs/shmobile_defconfig
index 3c66a422fb4d..6c63fe1ff985 100644
--- a/arch/arm/configs/shmobile_defconfig
+++ b/arch/arm/configs/shmobile_defconfig
@@ -218,7 +218,7 @@ CONFIG_NFS_V4_1=y
 CONFIG_ROOT_NFS=y
 CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_ISO8859_1=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 # CONFIG_ENABLE_WARN_DEPRECATED is not set
 # CONFIG_ENABLE_MUST_CHECK is not set
 # CONFIG_ARM_UNWIND is not set
diff --git a/arch/arm/configs/socfpga_defconfig b/arch/arm/configs/socfpga_defconfig
index 2620ce790db0..df29e7f39753 100644
--- a/arch/arm/configs/socfpga_defconfig
+++ b/arch/arm/configs/socfpga_defconfig
@@ -155,7 +155,7 @@ CONFIG_NFSD_V3_ACL=y
 CONFIG_NFSD_V4=y
 CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_ISO8859_1=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_INFO=y
 CONFIG_MAGIC_SYSRQ=y
 CONFIG_DETECT_HUNG_TASK=y
diff --git a/arch/arm/configs/stm32_defconfig b/arch/arm/configs/stm32_defconfig
index 90e5c46913a5..ab16e8a60675 100644
--- a/arch/arm/configs/stm32_defconfig
+++ b/arch/arm/configs/stm32_defconfig
@@ -74,7 +74,7 @@ CONFIG_STM32_ADC=y
 # CONFIG_DNOTIFY is not set
 # CONFIG_INOTIFY_USER is not set
 CONFIG_NLS=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_INFO=y
 # CONFIG_ENABLE_WARN_DEPRECATED is not set
 # CONFIG_ENABLE_MUST_CHECK is not set
diff --git a/arch/arm/configs/sunxi_defconfig b/arch/arm/configs/sunxi_defconfig
index 0ec1d1ec130f..875aca7b9790 100644
--- a/arch/arm/configs/sunxi_defconfig
+++ b/arch/arm/configs/sunxi_defconfig
@@ -151,6 +151,6 @@ CONFIG_NFS_V4=y
 CONFIG_ROOT_NFS=y
 CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_ISO8859_1=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_FS=y
 CONFIG_CRYPTO_DEV_SUN4I_SS=y
diff --git a/arch/arm/configs/tango4_defconfig b/arch/arm/configs/tango4_defconfig
index 68725d4eae45..fd7567905749 100644
--- a/arch/arm/configs/tango4_defconfig
+++ b/arch/arm/configs/tango4_defconfig
@@ -90,5 +90,5 @@ CONFIG_ROOT_NFS=y
 CONFIG_NLS_CODEPAGE_437=m
 CONFIG_NLS_ISO8859_1=m
 CONFIG_NLS_UTF8=m
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 # CONFIG_CRYPTO_ECHAINIV is not set
diff --git a/arch/arm/configs/tegra_defconfig b/arch/arm/configs/tegra_defconfig
index f0efc854b5a2..10899ebd9a9c 100644
--- a/arch/arm/configs/tegra_defconfig
+++ b/arch/arm/configs/tegra_defconfig
@@ -286,7 +286,7 @@ CONFIG_NFS_V4=y
 CONFIG_ROOT_NFS=y
 CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_ISO8859_1=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_INFO=y
 CONFIG_DEBUG_FS=y
 CONFIG_MAGIC_SYSRQ=y
diff --git a/arch/arm/configs/u300_defconfig b/arch/arm/configs/u300_defconfig
index 36d77406e31b..3bb82939ca11 100644
--- a/arch/arm/configs/u300_defconfig
+++ b/arch/arm/configs/u300_defconfig
@@ -62,7 +62,7 @@ CONFIG_VFAT_FS=y
 CONFIG_TMPFS=y
 CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_ISO8859_1=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_INFO=y
 CONFIG_DEBUG_FS=y
 # CONFIG_SCHED_DEBUG is not set
diff --git a/arch/arm/configs/u8500_defconfig b/arch/arm/configs/u8500_defconfig
index e2151a7aaf49..f815d0370226 100644
--- a/arch/arm/configs/u8500_defconfig
+++ b/arch/arm/configs/u8500_defconfig
@@ -127,7 +127,7 @@ CONFIG_NFS_FS=y
 CONFIG_ROOT_NFS=y
 CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_ISO8859_1=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_INFO=y
 CONFIG_DEBUG_FS=y
 CONFIG_MAGIC_SYSRQ=y
diff --git a/arch/arm/configs/vt8500_v6_v7_defconfig b/arch/arm/configs/vt8500_v6_v7_defconfig
index 1bfaa7bfc392..8cdbe4416009 100644
--- a/arch/arm/configs/vt8500_v6_v7_defconfig
+++ b/arch/arm/configs/vt8500_v6_v7_defconfig
@@ -84,6 +84,6 @@ CONFIG_NFS_FS=y
 CONFIG_NFS_V3_ACL=y
 CONFIG_NFS_V4=y
 CONFIG_ROOT_NFS=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_KERNEL=y
 CONFIG_LOCKUP_DETECTOR=y
diff --git a/arch/arm/configs/xcep_defconfig b/arch/arm/configs/xcep_defconfig
index 2eda24635e65..bac1996361a3 100644
--- a/arch/arm/configs/xcep_defconfig
+++ b/arch/arm/configs/xcep_defconfig
@@ -79,7 +79,7 @@ CONFIG_NFS_V3=y
 CONFIG_NLS=m
 CONFIG_NLS_DEFAULT="utf8"
 CONFIG_NLS_UTF8=m
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_STRIP_ASM_SYMS=y
 CONFIG_DEBUG_KERNEL=y
 # CONFIG_SCHED_DEBUG is not set
diff --git a/arch/arm/configs/zx_defconfig b/arch/arm/configs/zx_defconfig
index dfc061d87d2f..d3fbc60e34b2 100644
--- a/arch/arm/configs/zx_defconfig
+++ b/arch/arm/configs/zx_defconfig
@@ -95,7 +95,7 @@ CONFIG_TMPFS_POSIX_ACL=y
 CONFIG_NLS_CODEPAGE_936=y
 CONFIG_NLS_ISO8859_1=y
 CONFIG_NLS_UTF8=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_MAGIC_SYSRQ=y
 CONFIG_DEBUG_KERNEL=y
 CONFIG_DEBUG_INFO=y
diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig
index b4ca115b3be1..9284bc83f439 100644
--- a/arch/arm64/configs/defconfig
+++ b/arch/arm64/configs/defconfig
@@ -549,7 +549,7 @@ CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_ISO8859_1=y
 CONFIG_VIRTUALIZATION=y
 CONFIG_KVM=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_INFO=y
 CONFIG_DEBUG_FS=y
 CONFIG_MAGIC_SYSRQ=y
diff --git a/arch/m68k/configs/amcore_defconfig b/arch/m68k/configs/amcore_defconfig
index 131b4101ae5d..4159926ed8b6 100644
--- a/arch/m68k/configs/amcore_defconfig
+++ b/arch/m68k/configs/amcore_defconfig
@@ -107,7 +107,7 @@ CONFIG_JFFS2_FS=y
 CONFIG_ROMFS_FS=y
 CONFIG_ROMFS_BACKED_BY_BOTH=y
 # CONFIG_NETWORK_FILESYSTEMS is not set
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 # CONFIG_ENABLE_WARN_DEPRECATED is not set
 # CONFIG_ENABLE_MUST_CHECK is not set
 # CONFIG_SECTION_MISMATCH_WARN_ONLY is not set
diff --git a/arch/mips/configs/ath25_defconfig b/arch/mips/configs/ath25_defconfig
index 2c829950be17..d76cddf62e88 100644
--- a/arch/mips/configs/ath25_defconfig
+++ b/arch/mips/configs/ath25_defconfig
@@ -105,7 +105,7 @@ CONFIG_SQUASHFS_FILE_DIRECT=y
 CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU=y
 # CONFIG_SQUASHFS_ZLIB is not set
 CONFIG_SQUASHFS_XZ=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 # CONFIG_ENABLE_MUST_CHECK is not set
 CONFIG_STRIP_ASM_SYMS=y
 CONFIG_DEBUG_FS=y
diff --git a/arch/mips/configs/bcm47xx_defconfig b/arch/mips/configs/bcm47xx_defconfig
index fad8e964f14c..c5b1b6f3cf84 100644
--- a/arch/mips/configs/bcm47xx_defconfig
+++ b/arch/mips/configs/bcm47xx_defconfig
@@ -74,7 +74,7 @@ CONFIG_USB_HCD_BCMA=y
 CONFIG_USB_HCD_SSB=y
 CONFIG_LEDS_TRIGGER_TIMER=y
 CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_INFO=y
 CONFIG_DEBUG_INFO_REDUCED=y
 CONFIG_STRIP_ASM_SYMS=y
diff --git a/arch/mips/configs/bmips_be_defconfig b/arch/mips/configs/bmips_be_defconfig
index a7072a14d396..fd75f5c176cc 100644
--- a/arch/mips/configs/bmips_be_defconfig
+++ b/arch/mips/configs/bmips_be_defconfig
@@ -32,7 +32,7 @@ CONFIG_DEVTMPFS=y
 CONFIG_DEVTMPFS_MOUNT=y
 # CONFIG_STANDALONE is not set
 # CONFIG_PREVENT_FIRMWARE_BUILD is not set
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_BRCMSTB_GISB_ARB=y
 CONFIG_MTD=y
 CONFIG_MTD_BCM63XX_PARTS=y
diff --git a/arch/mips/configs/bmips_stb_defconfig b/arch/mips/configs/bmips_stb_defconfig
index 3cefa6bc01dd..732720fce553 100644
--- a/arch/mips/configs/bmips_stb_defconfig
+++ b/arch/mips/configs/bmips_stb_defconfig
@@ -85,7 +85,7 @@ CONFIG_CIFS=y
 CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_ASCII=y
 CONFIG_NLS_ISO8859_1=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_FS=y
 CONFIG_MAGIC_SYSRQ=y
 CONFIG_CMDLINE_BOOL=y
diff --git a/arch/mips/configs/ci20_defconfig b/arch/mips/configs/ci20_defconfig
index b42cfa7865f9..6b5b24e65412 100644
--- a/arch/mips/configs/ci20_defconfig
+++ b/arch/mips/configs/ci20_defconfig
@@ -147,7 +147,7 @@ CONFIG_NLS_ISO8859_15=y
 CONFIG_NLS_KOI8_R=y
 CONFIG_NLS_KOI8_U=y
 CONFIG_NLS_UTF8=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_INFO=y
 CONFIG_STRIP_ASM_SYMS=y
 CONFIG_DEBUG_FS=y
diff --git a/arch/mips/configs/generic_defconfig b/arch/mips/configs/generic_defconfig
index 91aacf2ef26d..fdebcb55c956 100644
--- a/arch/mips/configs/generic_defconfig
+++ b/arch/mips/configs/generic_defconfig
@@ -83,7 +83,7 @@ CONFIG_NFS_V4=y
 CONFIG_NFS_V4_1=y
 CONFIG_NFS_V4_2=y
 CONFIG_ROOT_NFS=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_INFO=y
 CONFIG_DEBUG_INFO_REDUCED=y
 CONFIG_DEBUG_FS=y
diff --git a/arch/mips/configs/lemote2f_defconfig b/arch/mips/configs/lemote2f_defconfig
index 1ec8ed8d05d1..c87c7739a75d 100644
--- a/arch/mips/configs/lemote2f_defconfig
+++ b/arch/mips/configs/lemote2f_defconfig
@@ -394,7 +394,7 @@ CONFIG_NLS_ISO8859_15=m
 CONFIG_NLS_KOI8_R=m
 CONFIG_NLS_KOI8_U=m
 CONFIG_NLS_UTF8=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_FRAME_WARN=1024
 CONFIG_STRIP_ASM_SYMS=y
 CONFIG_DEBUG_FS=y
diff --git a/arch/mips/configs/loongson3_defconfig b/arch/mips/configs/loongson3_defconfig
index 324dfee23dfb..03a8062bcf50 100644
--- a/arch/mips/configs/loongson3_defconfig
+++ b/arch/mips/configs/loongson3_defconfig
@@ -327,7 +327,7 @@ CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_CODEPAGE_936=y
 CONFIG_NLS_ASCII=y
 CONFIG_NLS_UTF8=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_FRAME_WARN=1024
 CONFIG_STRIP_ASM_SYMS=y
 CONFIG_MAGIC_SYSRQ=y
diff --git a/arch/mips/configs/nlm_xlp_defconfig b/arch/mips/configs/nlm_xlp_defconfig
index 5720ce23e9aa..aa8b2b7ab34b 100644
--- a/arch/mips/configs/nlm_xlp_defconfig
+++ b/arch/mips/configs/nlm_xlp_defconfig
@@ -549,7 +549,7 @@ CONFIG_NLS_ISO8859_14=m
 CONFIG_NLS_ISO8859_15=m
 CONFIG_NLS_KOI8_R=m
 CONFIG_NLS_KOI8_U=m
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 # CONFIG_ENABLE_WARN_DEPRECATED is not set
 # CONFIG_ENABLE_MUST_CHECK is not set
 CONFIG_FRAME_WARN=1024
diff --git a/arch/mips/configs/nlm_xlr_defconfig b/arch/mips/configs/nlm_xlr_defconfig
index fea56c535d92..1e4dad09e863 100644
--- a/arch/mips/configs/nlm_xlr_defconfig
+++ b/arch/mips/configs/nlm_xlr_defconfig
@@ -506,7 +506,7 @@ CONFIG_NLS_ISO8859_14=m
 CONFIG_NLS_ISO8859_15=m
 CONFIG_NLS_KOI8_R=m
 CONFIG_NLS_KOI8_U=m
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 # CONFIG_ENABLE_WARN_DEPRECATED is not set
 # CONFIG_ENABLE_MUST_CHECK is not set
 CONFIG_UNUSED_SYMBOLS=y
diff --git a/arch/mips/configs/pistachio_defconfig b/arch/mips/configs/pistachio_defconfig
index 7d32fbbca962..1af6fe3cac9b 100644
--- a/arch/mips/configs/pistachio_defconfig
+++ b/arch/mips/configs/pistachio_defconfig
@@ -297,7 +297,7 @@ CONFIG_NLS_DEFAULT="utf8"
 CONFIG_NLS_CODEPAGE_437=m
 CONFIG_NLS_ASCII=m
 CONFIG_NLS_ISO8859_1=m
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_INFO=y
 CONFIG_MAGIC_SYSRQ=y
 CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0
diff --git a/arch/mips/configs/qi_lb60_defconfig b/arch/mips/configs/qi_lb60_defconfig
index 3f1333517405..08a0a201ca51 100644
--- a/arch/mips/configs/qi_lb60_defconfig
+++ b/arch/mips/configs/qi_lb60_defconfig
@@ -170,7 +170,7 @@ CONFIG_NLS_ISO8859_15=y
 CONFIG_NLS_KOI8_R=y
 CONFIG_NLS_KOI8_U=y
 CONFIG_NLS_UTF8=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_INFO=y
 CONFIG_STRIP_ASM_SYMS=y
 CONFIG_READABLE_ASM=y
diff --git a/arch/mips/configs/rt305x_defconfig b/arch/mips/configs/rt305x_defconfig
index c695b7b1c4ae..23292a112756 100644
--- a/arch/mips/configs/rt305x_defconfig
+++ b/arch/mips/configs/rt305x_defconfig
@@ -143,7 +143,7 @@ CONFIG_JFFS2_COMPRESSION_OPTIONS=y
 CONFIG_SQUASHFS=y
 # CONFIG_SQUASHFS_ZLIB is not set
 CONFIG_SQUASHFS_XZ=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 # CONFIG_ENABLE_MUST_CHECK is not set
 CONFIG_MAGIC_SYSRQ=y
 CONFIG_STRIP_ASM_SYMS=y
diff --git a/arch/mips/configs/xway_defconfig b/arch/mips/configs/xway_defconfig
index 4365108bef77..b6c38ef02e77 100644
--- a/arch/mips/configs/xway_defconfig
+++ b/arch/mips/configs/xway_defconfig
@@ -151,7 +151,7 @@ CONFIG_JFFS2_COMPRESSION_OPTIONS=y
 CONFIG_SQUASHFS=y
 # CONFIG_SQUASHFS_ZLIB is not set
 CONFIG_SQUASHFS_XZ=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 # CONFIG_ENABLE_MUST_CHECK is not set
 CONFIG_STRIP_ASM_SYMS=y
 CONFIG_DEBUG_FS=y
diff --git a/arch/parisc/configs/generic-64bit_defconfig b/arch/parisc/configs/generic-64bit_defconfig
index d39e7f821aba..cdd53e723412 100644
--- a/arch/parisc/configs/generic-64bit_defconfig
+++ b/arch/parisc/configs/generic-64bit_defconfig
@@ -272,7 +272,7 @@ CONFIG_NLS_ASCII=m
 CONFIG_NLS_ISO8859_1=m
 CONFIG_NLS_ISO8859_2=m
 CONFIG_NLS_UTF8=m
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_STRIP_ASM_SYMS=y
 CONFIG_UNUSED_SYMBOLS=y
 CONFIG_DEBUG_FS=y
diff --git a/arch/powerpc/configs/40x/virtex_defconfig b/arch/powerpc/configs/40x/virtex_defconfig
index 65dc084a154c..39c8bed85ade 100644
--- a/arch/powerpc/configs/40x/virtex_defconfig
+++ b/arch/powerpc/configs/40x/virtex_defconfig
@@ -71,7 +71,7 @@ CONFIG_CRC_CCITT=y
 CONFIG_FONTS=y
 CONFIG_FONT_8x8=y
 CONFIG_FONT_8x16=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_INFO=y
 CONFIG_DEBUG_KERNEL=y
 # CONFIG_CRYPTO_ANSI_CPRNG is not set
diff --git a/arch/powerpc/configs/44x/fsp2_defconfig b/arch/powerpc/configs/44x/fsp2_defconfig
index e8e6a6999852..62b469cd8988 100644
--- a/arch/powerpc/configs/44x/fsp2_defconfig
+++ b/arch/powerpc/configs/44x/fsp2_defconfig
@@ -111,7 +111,7 @@ CONFIG_NFS_V4=y
 CONFIG_ROOT_NFS=y
 CONFIG_NLS_DEFAULT="n"
 CONFIG_XZ_DEC=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_MESSAGE_LOGLEVEL_DEFAULT=3
 CONFIG_DYNAMIC_DEBUG=y
 CONFIG_DEBUG_INFO=y
diff --git a/arch/powerpc/configs/44x/virtex5_defconfig b/arch/powerpc/configs/44x/virtex5_defconfig
index ce052064bcbb..1b09850c15a9 100644
--- a/arch/powerpc/configs/44x/virtex5_defconfig
+++ b/arch/powerpc/configs/44x/virtex5_defconfig
@@ -70,7 +70,7 @@ CONFIG_CRC_CCITT=y
 CONFIG_FONTS=y
 CONFIG_FONT_8x8=y
 CONFIG_FONT_8x16=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_INFO=y
 CONFIG_DEBUG_KERNEL=y
 # CONFIG_CRYPTO_ANSI_CPRNG is not set
diff --git a/arch/powerpc/configs/44x/warp_defconfig b/arch/powerpc/configs/44x/warp_defconfig
index ab932488e68b..f9b7a4f8513e 100644
--- a/arch/powerpc/configs/44x/warp_defconfig
+++ b/arch/powerpc/configs/44x/warp_defconfig
@@ -90,7 +90,7 @@ CONFIG_NLS_ISO8859_15=y
 CONFIG_NLS_UTF8=y
 CONFIG_CRC_CCITT=y
 CONFIG_CRC_T10DIF=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_INFO=y
 CONFIG_DEBUG_FS=y
 CONFIG_MAGIC_SYSRQ=y
diff --git a/arch/powerpc/configs/52xx/cm5200_defconfig b/arch/powerpc/configs/52xx/cm5200_defconfig
index c1faac800806..74219e75eb11 100644
--- a/arch/powerpc/configs/52xx/cm5200_defconfig
+++ b/arch/powerpc/configs/52xx/cm5200_defconfig
@@ -72,7 +72,7 @@ CONFIG_NFS_V4=y
 CONFIG_ROOT_NFS=y
 CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_ISO8859_1=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DETECT_HUNG_TASK=y
 # CONFIG_DEBUG_BUGVERBOSE is not set
 CONFIG_CRYPTO_ECB=y
diff --git a/arch/powerpc/configs/52xx/lite5200b_defconfig b/arch/powerpc/configs/52xx/lite5200b_defconfig
index 9493b02ac660..cf5934721730 100644
--- a/arch/powerpc/configs/52xx/lite5200b_defconfig
+++ b/arch/powerpc/configs/52xx/lite5200b_defconfig
@@ -58,7 +58,7 @@ CONFIG_TMPFS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V4=y
 CONFIG_ROOT_NFS=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_INFO=y
 CONFIG_DETECT_HUNG_TASK=y
 # CONFIG_DEBUG_BUGVERBOSE is not set
diff --git a/arch/powerpc/configs/52xx/motionpro_defconfig b/arch/powerpc/configs/52xx/motionpro_defconfig
index fe8126bc1655..97705da7e508 100644
--- a/arch/powerpc/configs/52xx/motionpro_defconfig
+++ b/arch/powerpc/configs/52xx/motionpro_defconfig
@@ -84,7 +84,7 @@ CONFIG_NFS_V4=y
 CONFIG_ROOT_NFS=y
 CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_ISO8859_1=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_INFO=y
 CONFIG_DETECT_HUNG_TASK=y
 # CONFIG_DEBUG_BUGVERBOSE is not set
diff --git a/arch/powerpc/configs/52xx/tqm5200_defconfig b/arch/powerpc/configs/52xx/tqm5200_defconfig
index b8b316b884aa..6c963b1067c0 100644
--- a/arch/powerpc/configs/52xx/tqm5200_defconfig
+++ b/arch/powerpc/configs/52xx/tqm5200_defconfig
@@ -86,7 +86,7 @@ CONFIG_NFS_V4=y
 CONFIG_ROOT_NFS=y
 CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_ISO8859_1=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_INFO=y
 CONFIG_DETECT_HUNG_TASK=y
 # CONFIG_DEBUG_BUGVERBOSE is not set
diff --git a/arch/powerpc/configs/gamecube_defconfig b/arch/powerpc/configs/gamecube_defconfig
index c0eec4a5df4e..ac60af8537c8 100644
--- a/arch/powerpc/configs/gamecube_defconfig
+++ b/arch/powerpc/configs/gamecube_defconfig
@@ -89,7 +89,7 @@ CONFIG_CIFS=y
 CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_ISO8859_1=y
 CONFIG_CRC_CCITT=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_SPINLOCK=y
 CONFIG_DEBUG_MUTEXES=y
 CONFIG_LATENCYTOP=y
diff --git a/arch/powerpc/configs/mpc5200_defconfig b/arch/powerpc/configs/mpc5200_defconfig
index 88336d0df0d6..fef3c9549558 100644
--- a/arch/powerpc/configs/mpc5200_defconfig
+++ b/arch/powerpc/configs/mpc5200_defconfig
@@ -126,7 +126,7 @@ CONFIG_NFS_V4=y
 CONFIG_ROOT_NFS=y
 CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_ISO8859_1=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_INFO=y
 CONFIG_DEBUG_KERNEL=y
 CONFIG_DETECT_HUNG_TASK=y
diff --git a/arch/powerpc/configs/pasemi_defconfig b/arch/powerpc/configs/pasemi_defconfig
index fe43ff47bd2f..d0bcd472f761 100644
--- a/arch/powerpc/configs/pasemi_defconfig
+++ b/arch/powerpc/configs/pasemi_defconfig
@@ -166,7 +166,7 @@ CONFIG_NFSD_V4=y
 CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_ISO8859_1=y
 CONFIG_CRC_CCITT=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_FS=y
 CONFIG_MAGIC_SYSRQ=y
 CONFIG_DEBUG_KERNEL=y
diff --git a/arch/powerpc/configs/wii_defconfig b/arch/powerpc/configs/wii_defconfig
index dcdd51b57783..b0c60a7de5d1 100644
--- a/arch/powerpc/configs/wii_defconfig
+++ b/arch/powerpc/configs/wii_defconfig
@@ -110,7 +110,7 @@ CONFIG_CIFS=m
 CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_ISO8859_1=y
 CONFIG_CRC_CCITT=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_MAGIC_SYSRQ=y
 CONFIG_DEBUG_SPINLOCK=y
 CONFIG_DEBUG_MUTEXES=y
diff --git a/arch/s390/configs/default_defconfig b/arch/s390/configs/default_defconfig
index 282072206df7..afd70fad4c9c 100644
--- a/arch/s390/configs/default_defconfig
+++ b/arch/s390/configs/default_defconfig
@@ -564,7 +564,7 @@ CONFIG_NLS_ISO8859_1=m
 CONFIG_NLS_ISO8859_15=m
 CONFIG_NLS_UTF8=m
 CONFIG_DLM=m
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DYNAMIC_DEBUG=y
 CONFIG_DEBUG_INFO=y
 CONFIG_DEBUG_INFO_DWARF4=y
diff --git a/arch/s390/configs/gcov_defconfig b/arch/s390/configs/gcov_defconfig
index 3c6b78189fbc..952e1edc9a15 100644
--- a/arch/s390/configs/gcov_defconfig
+++ b/arch/s390/configs/gcov_defconfig
@@ -558,7 +558,7 @@ CONFIG_NLS_ISO8859_1=m
 CONFIG_NLS_ISO8859_15=m
 CONFIG_NLS_UTF8=m
 CONFIG_DLM=m
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_INFO=y
 CONFIG_DEBUG_INFO_DWARF4=y
 CONFIG_GDB_SCRIPTS=y
diff --git a/arch/s390/configs/performance_defconfig b/arch/s390/configs/performance_defconfig
index 653d72bcc007..c40b77458693 100644
--- a/arch/s390/configs/performance_defconfig
+++ b/arch/s390/configs/performance_defconfig
@@ -556,7 +556,7 @@ CONFIG_NLS_ISO8859_1=m
 CONFIG_NLS_ISO8859_15=m
 CONFIG_NLS_UTF8=m
 CONFIG_DLM=m
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_INFO=y
 CONFIG_DEBUG_INFO_DWARF4=y
 CONFIG_GDB_SCRIPTS=y
diff --git a/arch/s390/configs/zfcpdump_defconfig b/arch/s390/configs/zfcpdump_defconfig
index afa46a7406ea..f7a27cdb6ae1 100644
--- a/arch/s390/configs/zfcpdump_defconfig
+++ b/arch/s390/configs/zfcpdump_defconfig
@@ -57,7 +57,7 @@ CONFIG_RAW_DRIVER=y
 CONFIG_CONFIGFS_FS=y
 # CONFIG_MISC_FILESYSTEMS is not set
 # CONFIG_NETWORK_FILESYSTEMS is not set
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DEBUG_INFO=y
 CONFIG_DEBUG_KERNEL=y
 CONFIG_PANIC_ON_OOPS=y
diff --git a/arch/sh/configs/edosk7760_defconfig b/arch/sh/configs/edosk7760_defconfig
index e1077a041ac3..5426621c31e5 100644
--- a/arch/sh/configs/edosk7760_defconfig
+++ b/arch/sh/configs/edosk7760_defconfig
@@ -109,7 +109,7 @@ CONFIG_NLS_ASCII=y
 CONFIG_NLS_ISO8859_1=y
 CONFIG_NLS_ISO8859_15=y
 CONFIG_NLS_UTF8=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 # CONFIG_ENABLE_MUST_CHECK is not set
 CONFIG_MAGIC_SYSRQ=y
 CONFIG_UNUSED_SYMBOLS=y
diff --git a/arch/sh/configs/sdk7786_defconfig b/arch/sh/configs/sdk7786_defconfig
index 36642ec2cb97..58f6ca4cd95d 100644
--- a/arch/sh/configs/sdk7786_defconfig
+++ b/arch/sh/configs/sdk7786_defconfig
@@ -215,7 +215,7 @@ CONFIG_NLS_ASCII=m
 CONFIG_NLS_ISO8859_1=y
 CONFIG_NLS_ISO8859_15=m
 CONFIG_NLS_UTF8=m
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 # CONFIG_ENABLE_WARN_DEPRECATED is not set
 # CONFIG_ENABLE_MUST_CHECK is not set
 CONFIG_MAGIC_SYSRQ=y
diff --git a/arch/sh/configs/se7722_defconfig b/arch/sh/configs/se7722_defconfig
index ae998c7e2ee0..90c80700ce42 100644
--- a/arch/sh/configs/se7722_defconfig
+++ b/arch/sh/configs/se7722_defconfig
@@ -53,7 +53,7 @@ CONFIG_EXT3_FS=y
 CONFIG_PROC_KCORE=y
 CONFIG_TMPFS=y
 CONFIG_HUGETLBFS=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 # CONFIG_ENABLE_MUST_CHECK is not set
 CONFIG_MAGIC_SYSRQ=y
 CONFIG_DEBUG_FS=y
diff --git a/arch/sh/configs/sh7785lcr_32bit_defconfig b/arch/sh/configs/sh7785lcr_32bit_defconfig
index 2fce54d9c388..b42ebc0cb68c 100644
--- a/arch/sh/configs/sh7785lcr_32bit_defconfig
+++ b/arch/sh/configs/sh7785lcr_32bit_defconfig
@@ -144,7 +144,7 @@ CONFIG_NFSD_V3=y
 CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_CODEPAGE_932=y
 CONFIG_NLS_ISO8859_1=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 # CONFIG_ENABLE_MUST_CHECK is not set
 CONFIG_MAGIC_SYSRQ=y
 CONFIG_DEBUG_KERNEL=y
diff --git a/arch/sh/configs/urquell_defconfig b/arch/sh/configs/urquell_defconfig
index 01c9a91ee896..b662c27ae110 100644
--- a/arch/sh/configs/urquell_defconfig
+++ b/arch/sh/configs/urquell_defconfig
@@ -142,7 +142,7 @@ CONFIG_ROOT_NFS=y
 CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_CODEPAGE_932=y
 CONFIG_NLS_ISO8859_1=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 # CONFIG_ENABLE_WARN_DEPRECATED is not set
 # CONFIG_ENABLE_MUST_CHECK is not set
 CONFIG_DEBUG_FS=y
diff --git a/arch/sparc/configs/sparc64_defconfig b/arch/sparc/configs/sparc64_defconfig
index ca8609d7292f..45325ef8aaa9 100644
--- a/arch/sparc/configs/sparc64_defconfig
+++ b/arch/sparc/configs/sparc64_defconfig
@@ -200,7 +200,7 @@ CONFIG_EXT3_FS_SECURITY=y
 CONFIG_PROC_KCORE=y
 CONFIG_TMPFS=y
 CONFIG_HUGETLBFS=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 # CONFIG_ENABLE_WARN_DEPRECATED is not set
 CONFIG_MAGIC_SYSRQ=y
 CONFIG_DEBUG_KERNEL=y
diff --git a/arch/x86/configs/i386_defconfig b/arch/x86/configs/i386_defconfig
index 0eb9f92f3717..f7d0ae1aa8f0 100644
--- a/arch/x86/configs/i386_defconfig
+++ b/arch/x86/configs/i386_defconfig
@@ -284,7 +284,7 @@ CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_ASCII=y
 CONFIG_NLS_ISO8859_1=y
 CONFIG_NLS_UTF8=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 # CONFIG_ENABLE_WARN_DEPRECATED is not set
 CONFIG_FRAME_WARN=1024
 CONFIG_MAGIC_SYSRQ=y
diff --git a/arch/x86/configs/x86_64_defconfig b/arch/x86/configs/x86_64_defconfig
index 4a4b16e56d35..ad3c15b7efa7 100644
--- a/arch/x86/configs/x86_64_defconfig
+++ b/arch/x86/configs/x86_64_defconfig
@@ -283,7 +283,7 @@ CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_ASCII=y
 CONFIG_NLS_ISO8859_1=y
 CONFIG_NLS_UTF8=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 # CONFIG_ENABLE_WARN_DEPRECATED is not set
 CONFIG_MAGIC_SYSRQ=y
 # CONFIG_UNUSED_SYMBOLS is not set
diff --git a/arch/xtensa/configs/audio_kc705_defconfig b/arch/xtensa/configs/audio_kc705_defconfig
index 8d16925765cb..673ce814fd94 100644
--- a/arch/xtensa/configs/audio_kc705_defconfig
+++ b/arch/xtensa/configs/audio_kc705_defconfig
@@ -123,7 +123,7 @@ CONFIG_ROOT_NFS=y
 CONFIG_SUNRPC_DEBUG=y
 CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_ISO8859_1=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DYNAMIC_DEBUG=y
 CONFIG_DEBUG_INFO=y
 CONFIG_MAGIC_SYSRQ=y
diff --git a/arch/xtensa/configs/cadence_csp_defconfig b/arch/xtensa/configs/cadence_csp_defconfig
index f2d3094aa1d1..251ca322bf41 100644
--- a/arch/xtensa/configs/cadence_csp_defconfig
+++ b/arch/xtensa/configs/cadence_csp_defconfig
@@ -102,7 +102,7 @@ CONFIG_ROOT_NFS=y
 CONFIG_SUNRPC_DEBUG=y
 CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_ISO8859_1=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DYNAMIC_DEBUG=y
 CONFIG_DEBUG_INFO=y
 CONFIG_MAGIC_SYSRQ=y
diff --git a/arch/xtensa/configs/generic_kc705_defconfig b/arch/xtensa/configs/generic_kc705_defconfig
index 744adeaf2945..a0c84cad8ef5 100644
--- a/arch/xtensa/configs/generic_kc705_defconfig
+++ b/arch/xtensa/configs/generic_kc705_defconfig
@@ -110,7 +110,7 @@ CONFIG_ROOT_NFS=y
 CONFIG_SUNRPC_DEBUG=y
 CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_ISO8859_1=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DYNAMIC_DEBUG=y
 CONFIG_DEBUG_INFO=y
 CONFIG_MAGIC_SYSRQ=y
diff --git a/arch/xtensa/configs/nommu_kc705_defconfig b/arch/xtensa/configs/nommu_kc705_defconfig
index 78c2529d0459..7522b3953fb1 100644
--- a/arch/xtensa/configs/nommu_kc705_defconfig
+++ b/arch/xtensa/configs/nommu_kc705_defconfig
@@ -107,7 +107,7 @@ CONFIG_ROOT_NFS=y
 CONFIG_SUNRPC_DEBUG=y
 CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_ISO8859_1=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DYNAMIC_DEBUG=y
 CONFIG_DEBUG_INFO=y
 # CONFIG_FRAME_POINTER is not set
diff --git a/arch/xtensa/configs/smp_lx200_defconfig b/arch/xtensa/configs/smp_lx200_defconfig
index 14e3ca353ac8..6af72da56a81 100644
--- a/arch/xtensa/configs/smp_lx200_defconfig
+++ b/arch/xtensa/configs/smp_lx200_defconfig
@@ -114,7 +114,7 @@ CONFIG_ROOT_NFS=y
 CONFIG_SUNRPC_DEBUG=y
 CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_ISO8859_1=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
 CONFIG_DYNAMIC_DEBUG=y
 CONFIG_DEBUG_INFO=y
 CONFIG_MAGIC_SYSRQ=y
diff --git a/include/linux/timekeeping.h b/include/linux/timekeeping.h
index ddc229ff6d1e..e9c0ed52f690 100644
--- a/include/linux/timekeeping.h
+++ b/include/linux/timekeeping.h
@@ -239,6 +239,8 @@ static inline u64 ktime_get_raw_ns(void)
 extern u64 ktime_get_mono_fast_ns(void);
 extern u64 ktime_get_raw_fast_ns(void);
 extern u64 ktime_get_boot_fast_ns(void);
+extern u64 ktime_get_real_log_ts(u64 *offset_real);
+extern u64 ktime_get_boot_log_ts(void);
 
 /*
  * Timespec interfaces utilizing the ktime based ones
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
index fc47863f629c..bd7e3997f874 100644
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
@@ -576,6 +576,8 @@ static u32 truncate_msg(u16 *text_len, u16 *trunc_msg_len,
 	return msg_used_size(*text_len + *trunc_msg_len, 0, pad_len);
 }
 
+static u64 printk_get_ts(void);
+
 /* insert record into the buffer, discard old ones, update heads */
 static int log_store(int facility, int level,
 		     enum log_flags flags, u64 ts_nsec,
@@ -624,7 +626,7 @@ static int log_store(int facility, int level,
 	if (ts_nsec > 0)
 		msg->ts_nsec = ts_nsec;
 	else
-		msg->ts_nsec = local_clock();
+		msg->ts_nsec = printk_get_ts();
 	memset(log_dict(msg) + dict_len, 0, pad_len);
 	msg->len = size;
 
@@ -1202,8 +1204,113 @@ static inline void boot_delay_msec(int level)
 }
 #endif
 
-static bool printk_time = IS_ENABLED(CONFIG_PRINTK_TIME);
-module_param_named(time, printk_time, bool, S_IRUGO | S_IWUSR);
+static int printk_time = CONFIG_PRINTK_TIME;
+static int printk_time_setting;
+
+/**
+ * enum printk_time_type - Timestamp types for printk() messages.
+ * @PRINTK_TIME_DISABLE: No time stamp.
+ * @PRINTK_TIME_LOCAL: Local hardware clock timestamp.
+ * @PRINTK_TIME_BOOT: Boottime clock timestamp.
+ * @PRINTK_TIME_MONO: Monotonic clock timestamp.
+ * @PRINTK_TIME_REAL: Realtime clock timestamp.  On 32-bit
+ * systems selecting the real clock printk timestamp may lead to unlikely
+ * situations where a timestamp is wrong because the real time offset is read
+ * without the protection of a sequence lock in the call to ktime_get_log_ts()
+ * in printk_get_ts() below.
+ */
+enum printk_time_type {
+	PRINTK_TIME_DISABLE = 0,
+	PRINTK_TIME_LOCAL = 1,
+	PRINTK_TIME_BOOT = 2,
+	PRINTK_TIME_MONO = 3,
+	PRINTK_TIME_REAL = 4,
+};
+
+static const char * const printk_time_str[5] = {
+	"disabled",
+	"local",
+	"boottime",
+	"monotonic",
+	"realtime",
+};
+
+static int printk_time_set(const char *val, const struct kernel_param *kp)
+{
+	char *param = strstrip((char *)val);
+	int _printk_time = -1;
+	int stamp;
+
+	if (strlen(param) == 1) {
+		/* Preserve legacy boolean settings */
+		if (!strcmp("0", param) || !strcmp("n", param) ||
+		    !strcmp("N", param))
+			_printk_time = PRINTK_TIME_DISABLE;
+		if (!strcmp("1", param) || !strcmp("y", param) ||
+		    !strcmp("Y", param))
+			_printk_time = PRINTK_TIME_LOCAL;
+	}
+	if (_printk_time == -1) {
+		for (stamp = 0; stamp <= 4; stamp++) {
+			if (!strncmp(printk_time_str[stamp], param,
+				     strlen(param))) {
+				_printk_time = stamp;
+				break;
+			}
+		}
+	}
+	if (_printk_time == -1) {
+		pr_warn("printk: invalid timestamp value %s\n", param);
+		return -EINVAL;
+	}
+
+	/*
+	 * Only allow enabling and disabling of the current printk_time
+	 * setting.  Changing it from one setting to another confuses
+	 * userspace.
+	 */
+	if (printk_time_setting == PRINTK_TIME_DISABLE) {
+		printk_time_setting = _printk_time;
+	} else if ((printk_time_setting != _printk_time) &&
+		   (_printk_time != 0)) {
+		pr_warn("printk: timestamp can only be set to 0(disabled) or %s\n",
+			printk_time_str[printk_time_setting]);
+		return -EINVAL;
+	}
+
+	printk_time = _printk_time;
+	pr_info("printk: timestamp set to %s\n", printk_time_str[printk_time]);
+	return 0;
+}
+
+static int printk_time_get(char *buffer, const struct kernel_param *kp)
+{
+	return scnprintf(buffer, PAGE_SIZE, "%s", printk_time_str[printk_time]);
+}
+
+static struct kernel_param_ops printk_time_ops = {
+	.set = printk_time_set,
+	.get = printk_time_get,
+};
+module_param_cb(time, &printk_time_ops, NULL, 0644);
+
+static u64 printk_get_ts(void)
+{
+	u64 mono, offset_real;
+
+	if (printk_time <= PRINTK_TIME_LOCAL)
+		return local_clock();
+
+	if (printk_time == PRINTK_TIME_BOOT)
+		return ktime_get_boot_log_ts();
+
+	mono = ktime_get_real_log_ts(&offset_real);
+
+	if (printk_time == PRINTK_TIME_MONO)
+		return mono;
+
+	return mono + offset_real;
+}
 
 static size_t print_time(u64 ts, char *buf)
 {
@@ -1643,7 +1750,7 @@ static bool cont_add(int facility, int level, enum log_flags flags, const char *
 		cont.facility = facility;
 		cont.level = level;
 		cont.owner = current;
-		cont.ts_nsec = local_clock();
+		cont.ts_nsec = printk_get_ts();
 		cont.flags = flags;
 	}
 
@@ -1873,6 +1980,8 @@ static size_t msg_print_text(const struct printk_log *msg,
 			     bool syslog, char *buf, size_t size) { return 0; }
 static bool suppress_message_printing(int level) { return false; }
 
+static int printk_time;
+static int printk_time_setting;
 #endif /* CONFIG_PRINTK */
 
 #ifdef CONFIG_EARLY_PRINTK
@@ -2659,6 +2768,10 @@ static int __init printk_late_init(void)
 	struct console *con;
 	int ret;
 
+	/* initialize printk_time settings */
+	if (printk_time_setting == 0)
+		printk_time_setting = printk_time;
+
 	for_each_console(con) {
 		if (!keep_bootcon && con->flags & CON_BOOT) {
 			/*
diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
index cedafa008de5..e5d41448f208 100644
--- a/kernel/time/timekeeping.c
+++ b/kernel/time/timekeeping.c
@@ -25,6 +25,7 @@
 #include <linux/stop_machine.h>
 #include <linux/pvclock_gtod.h>
 #include <linux/compiler.h>
+#include <linux/sched/clock.h>
 
 #include "tick-internal.h"
 #include "ntp_internal.h"
@@ -45,6 +46,7 @@
 
 static DEFINE_RAW_SPINLOCK(timekeeper_lock);
 static struct timekeeper shadow_timekeeper;
+static int timekeeping_active;
 
 /**
  * struct tk_fast - NMI safe timekeeper
@@ -477,6 +479,24 @@ u64 notrace ktime_get_boot_fast_ns(void)
 }
 EXPORT_SYMBOL_GPL(ktime_get_boot_fast_ns);
 
+u64 ktime_get_real_log_ts(u64 *offset_real)
+{
+	*offset_real = ktime_to_ns(tk_core.timekeeper.offs_real);
+
+	if (timekeeping_active)
+		return ktime_get_mono_fast_ns();
+	else
+		return local_clock();
+}
+
+u64 ktime_get_boot_log_ts(void)
+{
+	if (timekeeping_active)
+		return ktime_get_boot_fast_ns();
+	else
+		return local_clock();
+}
+
 /* Suspend-time cycles value for halted fast timekeeper. */
 static u64 cycles_at_suspend;
 
@@ -1530,6 +1550,8 @@ void __init timekeeping_init(void)
 
 	write_seqcount_end(&tk_core.seq);
 	raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
+
+	timekeeping_active = 1;
 }
 
 /* time in seconds when suspend began for persistent clock */
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index 98fe715522e8..befbc573d82e 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -1,8 +1,46 @@
 menu "printk and dmesg options"
 
+choice
+	prompt "printk default clock"
+	config PRINTK_TIME_DISABLE
+	bool "Disabled"
+	help
+	 Selecting this option disables the time stamps of printk().
+
+	config PRINTK_TIME_LOCAL
+	bool "Local Clock"
+	help
+	  Selecting this option causes the time stamps of printk() to be
+	  stamped with the unadjusted hardware clock.
+
+	config PRINTK_TIME_BOOT
+	bool "CLOCK_BOOTTIME"
+	help
+	  Selecting this option causes the time stamps of printk() to be
+	  stamped with the adjusted boottime clock.
+
+	config PRINTK_TIME_MONO
+	bool "CLOCK_MONOTONIC"
+	help
+	  Selecting this option causes the time stamps of printk() to be
+	  stamped with the adjusted monotonic clock.
+
+	config PRINTK_TIME_REAL
+	bool "CLOCK_REALTIME"
+	help
+	  Selecting this option causes the time stamps of printk() to be
+	  stamped with the adjusted realtime clock.
+
+endchoice
+
 config PRINTK_TIME
-	bool "Show timing information on printks"
+	int "Show time stamp information on printks"
 	depends on PRINTK
+	default 0 if PRINTK_TIME_DISABLE
+	default 1 if PRINTK_TIME_LOCAL
+	default 2 if PRINTK_TIME_BOOT
+	default 3 if PRINTK_TIME_MONO
+	default 4 if PRINTK_TIME_REAL
 	help
 	  Selecting this option causes time stamps of the printk()
 	  messages to be added to the output of the syslog() system
@@ -13,7 +51,8 @@ config PRINTK_TIME
 	  be included, not that the timestamp is recorded.
 
 	  The behavior is also controlled by the kernel command line
-	  parameter printk.time=1. See Documentation/admin-guide/kernel-parameters.rst
+	  parameter printk.time. See
+	  Documentation/admin-guide/kernel-parameters.rst
 
 config CONSOLE_LOGLEVEL_DEFAULT
 	int "Default console loglevel (1-15)"
diff --git a/tools/testing/selftests/rcutorture/configs/lock/CFcommon b/tools/testing/selftests/rcutorture/configs/lock/CFcommon
index e372dc269254..e6ed3d26cca2 100644
--- a/tools/testing/selftests/rcutorture/configs/lock/CFcommon
+++ b/tools/testing/selftests/rcutorture/configs/lock/CFcommon
@@ -1,2 +1,2 @@
 CONFIG_LOCK_TORTURE_TEST=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
diff --git a/tools/testing/selftests/rcutorture/configs/rcu/CFcommon b/tools/testing/selftests/rcutorture/configs/rcu/CFcommon
index d2d2a86139db..9f3b8045da8f 100644
--- a/tools/testing/selftests/rcutorture/configs/rcu/CFcommon
+++ b/tools/testing/selftests/rcutorture/configs/rcu/CFcommon
@@ -1,2 +1,2 @@
 CONFIG_RCU_TORTURE_TEST=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
diff --git a/tools/testing/selftests/rcutorture/configs/rcuperf/CFcommon b/tools/testing/selftests/rcutorture/configs/rcuperf/CFcommon
index a09816b8c0f3..0ef54bd1bdcd 100644
--- a/tools/testing/selftests/rcutorture/configs/rcuperf/CFcommon
+++ b/tools/testing/selftests/rcutorture/configs/rcuperf/CFcommon
@@ -1,2 +1,2 @@
 CONFIG_RCU_PERF_TEST=y
-CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_TIME_LOCAL=y
-- 
1.8.5.5

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [PATCH v4] printk: Add monotonic, boottime, and realtime timestamps
  2017-08-07 15:52 [PATCH v4] printk: Add monotonic, boottime, and realtime timestamps Prarit Bhargava
@ 2017-08-07 16:52 ` John Stultz
  2017-08-07 17:15   ` Peter Zijlstra
  2017-08-07 18:04   ` Prarit Bhargava
  2017-08-07 16:58 ` Mark Salyzyn
                   ` (2 subsequent siblings)
  3 siblings, 2 replies; 16+ messages in thread
From: John Stultz @ 2017-08-07 16:52 UTC (permalink / raw)
  To: Prarit Bhargava
  Cc: lkml, Mark Salyzyn, Jonathan Corbet, Petr Mladek,
	Sergey Senozhatsky, Steven Rostedt, Thomas Gleixner,
	Stephen Boyd, Andrew Morton, Greg Kroah-Hartman,
	Paul E. McKenney, Christoffer Dall, Deepa Dinamani, Ingo Molnar,
	Joel Fernandes, Kees Cook, Peter Zijlstra, Geert Uytterhoeven,
	Luis R. Rodriguez, Nicholas Piggin, Jason A. Donenfeld,
	Olof Johansson, Josh Poimboeuf, linux-doc

On Mon, Aug 7, 2017 at 8:52 AM, Prarit Bhargava <prarit@redhat.com> wrote:
> printk.time=1/CONFIG_PRINTK_TIME=1 adds a unmodified local hardware clock
> timestamp to printk messages.  The local hardware clock loses time each
> day making it difficult to determine exactly when an issue has occurred in
> the kernel log, and making it difficult to determine how kernel and
> hardware issues relate to each other in real time.
>
> Make printk output different timestampes by adding options for no
> timestamp, the local hardware clock, the monotonic clock, the boottime
> clock, and the real clock.  Allow a user to pick one of the clocks by
> using the printk.time kernel parameter.  Output the type of clock in
> /sys/module/printk/parameters/time so userspace programs can interpret the
> timestamp.
>
> Real clock & 32-bit systems:  Selecting the real clock printk timestamp may
> lead to unlikely situations where a timestamp is wrong because the real time
> offset is read without the protection of a sequence lock in the call to
> ktime_get_log_ts() in printk_get_ts().
>
> v2: Use peterz's suggested Kconfig options.  Merge patchset together.
> Fix i386 !CONFIG_PRINTK builds.
>
> v3: Fixed x86_64_defconfig. Added printk_time_type enum and
> printk_time_str for better output. Added BOOTTIME clock functionality.
>
> v4: Fix messages, add additional printk.time options, and fix configs.
>
> Signed-off-by: Prarit Bhargava <prarit@redhat.com>
> Cc: Mark Salyzyn <salyzyn@android.com>
> Cc: Jonathan Corbet <corbet@lwn.net>
> Cc: Petr Mladek <pmladek@suse.com>
> Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
> Cc: Steven Rostedt <rostedt@goodmis.org>
> Cc: John Stultz <john.stultz@linaro.org>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: Stephen Boyd <sboyd@codeaurora.org>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
> Cc: Christoffer Dall <cdall@linaro.org>
> Cc: Deepa Dinamani <deepa.kernel@gmail.com>
> Cc: Ingo Molnar <mingo@kernel.org>
> Cc: Joel Fernandes <joelaf@google.com>
> Cc: Prarit Bhargava <prarit@redhat.com>
> Cc: Kees Cook <keescook@chromium.org>
> Cc: Peter Zijlstra <peterz@infradead.org>
> Cc: Geert Uytterhoeven <geert+renesas@glider.be>
> Cc: "Luis R. Rodriguez" <mcgrof@kernel.org>
> Cc: Nicholas Piggin <npiggin@gmail.com>
> Cc: "Jason A. Donenfeld" <Jason@zx2c4.com>
> Cc: Olof Johansson <olof@lixom.net>
> Cc: Josh Poimboeuf <jpoimboe@redhat.com>
> Cc: linux-doc@vger.kernel.org
> ---
>  Documentation/admin-guide/kernel-parameters.txt    |   6 +-
>  arch/arm/configs/aspeed_g4_defconfig               |   2 +-
>  arch/arm/configs/aspeed_g5_defconfig               |   2 +-
>  arch/arm/configs/axm55xx_defconfig                 |   2 +-
>  arch/arm/configs/bcm2835_defconfig                 |   2 +-
>  arch/arm/configs/colibri_pxa270_defconfig          |   2 +-
>  arch/arm/configs/colibri_pxa300_defconfig          |   2 +-
>  arch/arm/configs/dove_defconfig                    |   2 +-
>  arch/arm/configs/efm32_defconfig                   |   2 +-
>  arch/arm/configs/exynos_defconfig                  |   2 +-
>  arch/arm/configs/ezx_defconfig                     |   2 +-
>  arch/arm/configs/h5000_defconfig                   |   2 +-
>  arch/arm/configs/hisi_defconfig                    |   2 +-
>  arch/arm/configs/imote2_defconfig                  |   2 +-
>  arch/arm/configs/imx_v6_v7_defconfig               |   2 +-
>  arch/arm/configs/keystone_defconfig                |   2 +-
>  arch/arm/configs/lpc18xx_defconfig                 |   2 +-
>  arch/arm/configs/magician_defconfig                |   2 +-
>  arch/arm/configs/mmp2_defconfig                    |   2 +-
>  arch/arm/configs/moxart_defconfig                  |   2 +-
>  arch/arm/configs/mps2_defconfig                    |   2 +-
>  arch/arm/configs/multi_v7_defconfig                |   2 +-
>  arch/arm/configs/mvebu_v7_defconfig                |   2 +-
>  arch/arm/configs/mxs_defconfig                     |   2 +-
>  arch/arm/configs/omap2plus_defconfig               |   2 +-
>  arch/arm/configs/pxa168_defconfig                  |   2 +-
>  arch/arm/configs/pxa3xx_defconfig                  |   2 +-
>  arch/arm/configs/pxa910_defconfig                  |   2 +-
>  arch/arm/configs/pxa_defconfig                     |   2 +-
>  arch/arm/configs/qcom_defconfig                    |   2 +-
>  arch/arm/configs/raumfeld_defconfig                |   2 +-
>  arch/arm/configs/shmobile_defconfig                |   2 +-
>  arch/arm/configs/socfpga_defconfig                 |   2 +-
>  arch/arm/configs/stm32_defconfig                   |   2 +-
>  arch/arm/configs/sunxi_defconfig                   |   2 +-
>  arch/arm/configs/tango4_defconfig                  |   2 +-
>  arch/arm/configs/tegra_defconfig                   |   2 +-
>  arch/arm/configs/u300_defconfig                    |   2 +-
>  arch/arm/configs/u8500_defconfig                   |   2 +-
>  arch/arm/configs/vt8500_v6_v7_defconfig            |   2 +-
>  arch/arm/configs/xcep_defconfig                    |   2 +-
>  arch/arm/configs/zx_defconfig                      |   2 +-
>  arch/arm64/configs/defconfig                       |   2 +-
>  arch/m68k/configs/amcore_defconfig                 |   2 +-
>  arch/mips/configs/ath25_defconfig                  |   2 +-
>  arch/mips/configs/bcm47xx_defconfig                |   2 +-
>  arch/mips/configs/bmips_be_defconfig               |   2 +-
>  arch/mips/configs/bmips_stb_defconfig              |   2 +-
>  arch/mips/configs/ci20_defconfig                   |   2 +-
>  arch/mips/configs/generic_defconfig                |   2 +-
>  arch/mips/configs/lemote2f_defconfig               |   2 +-
>  arch/mips/configs/loongson3_defconfig              |   2 +-
>  arch/mips/configs/nlm_xlp_defconfig                |   2 +-
>  arch/mips/configs/nlm_xlr_defconfig                |   2 +-
>  arch/mips/configs/pistachio_defconfig              |   2 +-
>  arch/mips/configs/qi_lb60_defconfig                |   2 +-
>  arch/mips/configs/rt305x_defconfig                 |   2 +-
>  arch/mips/configs/xway_defconfig                   |   2 +-
>  arch/parisc/configs/generic-64bit_defconfig        |   2 +-
>  arch/powerpc/configs/40x/virtex_defconfig          |   2 +-
>  arch/powerpc/configs/44x/fsp2_defconfig            |   2 +-
>  arch/powerpc/configs/44x/virtex5_defconfig         |   2 +-
>  arch/powerpc/configs/44x/warp_defconfig            |   2 +-
>  arch/powerpc/configs/52xx/cm5200_defconfig         |   2 +-
>  arch/powerpc/configs/52xx/lite5200b_defconfig      |   2 +-
>  arch/powerpc/configs/52xx/motionpro_defconfig      |   2 +-
>  arch/powerpc/configs/52xx/tqm5200_defconfig        |   2 +-
>  arch/powerpc/configs/gamecube_defconfig            |   2 +-
>  arch/powerpc/configs/mpc5200_defconfig             |   2 +-
>  arch/powerpc/configs/pasemi_defconfig              |   2 +-
>  arch/powerpc/configs/wii_defconfig                 |   2 +-
>  arch/s390/configs/default_defconfig                |   2 +-
>  arch/s390/configs/gcov_defconfig                   |   2 +-
>  arch/s390/configs/performance_defconfig            |   2 +-
>  arch/s390/configs/zfcpdump_defconfig               |   2 +-
>  arch/sh/configs/edosk7760_defconfig                |   2 +-
>  arch/sh/configs/sdk7786_defconfig                  |   2 +-
>  arch/sh/configs/se7722_defconfig                   |   2 +-
>  arch/sh/configs/sh7785lcr_32bit_defconfig          |   2 +-
>  arch/sh/configs/urquell_defconfig                  |   2 +-
>  arch/sparc/configs/sparc64_defconfig               |   2 +-
>  arch/x86/configs/i386_defconfig                    |   2 +-
>  arch/x86/configs/x86_64_defconfig                  |   2 +-
>  arch/xtensa/configs/audio_kc705_defconfig          |   2 +-
>  arch/xtensa/configs/cadence_csp_defconfig          |   2 +-
>  arch/xtensa/configs/generic_kc705_defconfig        |   2 +-
>  arch/xtensa/configs/nommu_kc705_defconfig          |   2 +-
>  arch/xtensa/configs/smp_lx200_defconfig            |   2 +-

Still not quite following why you're updating all the defconfigs. I'd
make sure the Kconfig default settings are right, and leave updating
the defconfig to arch/device maintainers. It adds a lot of noise to
the patch.


> +u64 ktime_get_real_log_ts(u64 *offset_real)
> +{
> +       *offset_real = ktime_to_ns(tk_core.timekeeper.offs_real);
> +
> +       if (timekeeping_active)
> +               return ktime_get_mono_fast_ns();
> +       else
> +               return local_clock();
> +}
> +
> +u64 ktime_get_boot_log_ts(void)
> +{
> +       if (timekeeping_active)
> +               return ktime_get_boot_fast_ns();
> +       else
> +               return local_clock();
> +}

This feels a little tacked on and duplicative.  I'd suggest having one
function that returns the offset_real and offset_boot or have a
separate get_mono_log_ts() so its at least consistent.   Additionally,
in the commit message, you call out the lack of locking between
grabing the offs_real and calling get_mono_fast_ns(), but I worry it
may be particularly problematic on 32bit systems, and you don't have
any notes in the actual code about it (it looks like an oversight).

Also, when timekeeping_active flips over, and we change from local
clock to the specified clock, do we see a discontinuity in the log? I
know folks use to gripe about that back in the day.

thanks
-john

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v4] printk: Add monotonic, boottime, and realtime timestamps
  2017-08-07 15:52 [PATCH v4] printk: Add monotonic, boottime, and realtime timestamps Prarit Bhargava
  2017-08-07 16:52 ` John Stultz
@ 2017-08-07 16:58 ` Mark Salyzyn
  2017-08-07 18:07   ` Prarit Bhargava
  2017-08-07 17:18 ` Peter Zijlstra
  2017-08-08  0:19 ` Sergey Senozhatsky
  3 siblings, 1 reply; 16+ messages in thread
From: Mark Salyzyn @ 2017-08-07 16:58 UTC (permalink / raw)
  To: Prarit Bhargava, linux-kernel
  Cc: Jonathan Corbet, Petr Mladek, Sergey Senozhatsky, Steven Rostedt,
	John Stultz, Thomas Gleixner, Stephen Boyd, Andrew Morton,
	Greg Kroah-Hartman, Paul E. McKenney, Christoffer Dall,
	Deepa Dinamani, Ingo Molnar, Joel Fernandes, Kees Cook,
	Peter Zijlstra, Geert Uytterhoeven, Luis R. Rodriguez,
	Nicholas Piggin, Jason A. Donenfeld, Olof Johansson,
	Josh Poimboeuf, linux-doc

On 08/07/2017 08:52 AM, Prarit Bhargava wrote:
> diff --git a/arch/arm/configs/aspeed_g4_defconfig b/arch/arm/configs/aspeed_g4_defconfig
> index cfc2465e8b77..5f3c50914e92 100644
> --- a/arch/arm/configs/aspeed_g4_defconfig
> +++ b/arch/arm/configs/aspeed_g4_defconfig
> @@ -162,7 +162,7 @@ CONFIG_JFFS2_FS_XATTR=y
>   CONFIG_UBIFS_FS=y
>   CONFIG_SQUASHFS=y
>   CONFIG_SQUASHFS_XZ=y
> -CONFIG_PRINTK_TIME=y
> +CONFIG_PRINTK_TIME_LOCAL=y
>   CONFIG_DYNAMIC_DEBUG=y
>   CONFIG_STRIP_ASM_SYMS=y
>   CONFIG_DEBUG_FS=y
Many have had misgivings, let me try another pass at this.

We (royal we) should really look into adjusting configuration parsing to 
allow an easy transition from boolean to selection ... I am sure this is 
not the first time bistate/tristate was moved to a number.

An idea? Maybe look into a way to deal with this to use something 
_other_ than CONFIG_PRINTK_TIME to hold the selection, and keep a 
(hidden/legacy?) CONFIG_PRINTK_TIME that when selected sets 
CONFIG_PRINTK_TIME_LOCAL, and switch to _not_ CONFIG_PRINTK_TIME_DISABLE 
as the internal mechanical replacement for it. I do not know how 
disruptive this will be, but is worth it if the codebase supports it, 
and legacy config retained?
> +
> +static int printk_time_set(const char *val, const struct kernel_param *kp)
> +{
> +	char *param = strstrip((char *)val);
> +	int _printk_time = -1;
> +	int stamp;
> +
> +	if (strlen(param) == 1) {
> +		/* Preserve legacy boolean settings */
> +		if (!strcmp("0", param) || !strcmp("n", param) ||
if strlen(param) == 1, then param[0] == '0' etc works fine and is KISS.
> +	/*
> +	 * Only allow enabling and disabling of the current printk_time
> +	 * setting.  Changing it from one setting to another confuses
> +	 * userspace.
> +	 */
> +	if (printk_time_setting == PRINTK_TIME_DISABLE) {
> +		printk_time_setting = _printk_time;
> +	} else if ((printk_time_setting != _printk_time) &&
> +		   (_printk_time != 0)) {
> +		pr_warn("printk: timestamp can only be set to 0(disabled) or %s\n",
> +			printk_time_str[printk_time_setting]);
> +		return -EINVAL;
> +	}
I agree with the restriction in the general case.  However (as hinted at 
before() #ifdef CONFIG_PRINTK_TIME_RESTRICT (default y, or #ifndef 
CONFIG_PRINTK_TIME_DEBUG default n) around this will allow us users to 
choose if we are confused or not. I can see being able to change it on 
the fly as an option. Especially since we have 
/sys/module/printk/parameters/time.

-- Mark

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v4] printk: Add monotonic, boottime, and realtime timestamps
  2017-08-07 16:52 ` John Stultz
@ 2017-08-07 17:15   ` Peter Zijlstra
  2017-08-07 18:04   ` Prarit Bhargava
  1 sibling, 0 replies; 16+ messages in thread
From: Peter Zijlstra @ 2017-08-07 17:15 UTC (permalink / raw)
  To: John Stultz
  Cc: Prarit Bhargava, lkml, Mark Salyzyn, Jonathan Corbet,
	Petr Mladek, Sergey Senozhatsky, Steven Rostedt, Thomas Gleixner,
	Stephen Boyd, Andrew Morton, Greg Kroah-Hartman,
	Paul E. McKenney, Christoffer Dall, Deepa Dinamani, Ingo Molnar,
	Joel Fernandes, Kees Cook, Geert Uytterhoeven, Luis R. Rodriguez,
	Nicholas Piggin, Jason A. Donenfeld, Olof Johansson,
	Josh Poimboeuf, linux-doc

On Mon, Aug 07, 2017 at 09:52:10AM -0700, John Stultz wrote:
> On Mon, Aug 7, 2017 at 8:52 AM, Prarit Bhargava <prarit@redhat.com> wrote:
> > +u64 ktime_get_real_log_ts(u64 *offset_real)
> > +{
> > +       *offset_real = ktime_to_ns(tk_core.timekeeper.offs_real);
> > +
> > +       if (timekeeping_active)
> > +               return ktime_get_mono_fast_ns();
> > +       else
> > +               return local_clock();
> > +}
> > +
> > +u64 ktime_get_boot_log_ts(void)
> > +{
> > +       if (timekeeping_active)
> > +               return ktime_get_boot_fast_ns();
> > +       else
> > +               return local_clock();
> > +}
> 
> This feels a little tacked on and duplicative.  I'd suggest having one
> function that returns the offset_real and offset_boot or have a
> separate get_mono_log_ts() so its at least consistent.   Additionally,
> in the commit message, you call out the lack of locking between
> grabing the offs_real and calling get_mono_fast_ns(), but I worry it
> may be particularly problematic on 32bit systems, and you don't have
> any notes in the actual code about it (it looks like an oversight).
> 
> Also, when timekeeping_active flips over, and we change from local
> clock to the specified clock, do we see a discontinuity in the log? I
> know folks use to gripe about that back in the day.

Yeah, yuck, this smells. Please don't mix clocks like this.

I expect all you want is to avoid the explosion you get from calling the
fast things too early, right? Please use the below, which should result
in it returning 0.

---
 kernel/time/timekeeping.c | 47 +++++++++++++++++++++++++++++++++--------------
 1 file changed, 33 insertions(+), 14 deletions(-)

diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
index cedafa008de5..d111039e0245 100644
--- a/kernel/time/timekeeping.c
+++ b/kernel/time/timekeeping.c
@@ -60,8 +60,39 @@ struct tk_fast {
 	struct tk_read_base	base[2];
 };
 
-static struct tk_fast tk_fast_mono ____cacheline_aligned;
-static struct tk_fast tk_fast_raw  ____cacheline_aligned;
+/* Suspend-time cycles value for halted fast timekeeper. */
+static u64 cycles_at_suspend;
+
+static u64 dummy_clock_read(struct clocksource *cs)
+{
+	return cycles_at_suspend;
+}
+
+static struct clocksource dummy_clock = {
+	.read = dummy_clock_read,
+};
+
+static struct tk_fast tk_fast_mono ____cacheline_aligned = {
+	.base = {
+		(struct tk_read_base){
+			.clock = &dummy_clock,
+		},
+		(struct tk_read_base){
+			.clock = &dummy_clock,
+		},
+	},
+};
+
+static struct tk_fast tk_fast_raw  ____cacheline_aligned = {
+	.base = {
+		(struct tk_read_base){
+			.clock = &dummy_clock,
+		},
+		(struct tk_read_base){
+			.clock = &dummy_clock,
+		},
+	},
+};
 
 /* flag for if timekeeping is suspended */
 int __read_mostly timekeeping_suspended;
@@ -477,18 +508,6 @@ u64 notrace ktime_get_boot_fast_ns(void)
 }
 EXPORT_SYMBOL_GPL(ktime_get_boot_fast_ns);
 
-/* Suspend-time cycles value for halted fast timekeeper. */
-static u64 cycles_at_suspend;
-
-static u64 dummy_clock_read(struct clocksource *cs)
-{
-	return cycles_at_suspend;
-}
-
-static struct clocksource dummy_clock = {
-	.read = dummy_clock_read,
-};
-
 /**
  * halt_fast_timekeeper - Prevent fast timekeeper from accessing clocksource.
  * @tk: Timekeeper to snapshot.

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [PATCH v4] printk: Add monotonic, boottime, and realtime timestamps
  2017-08-07 15:52 [PATCH v4] printk: Add monotonic, boottime, and realtime timestamps Prarit Bhargava
  2017-08-07 16:52 ` John Stultz
  2017-08-07 16:58 ` Mark Salyzyn
@ 2017-08-07 17:18 ` Peter Zijlstra
  2017-08-08  0:19 ` Sergey Senozhatsky
  3 siblings, 0 replies; 16+ messages in thread
From: Peter Zijlstra @ 2017-08-07 17:18 UTC (permalink / raw)
  To: Prarit Bhargava
  Cc: linux-kernel, Mark Salyzyn, Jonathan Corbet, Petr Mladek,
	Sergey Senozhatsky, Steven Rostedt, John Stultz, Thomas Gleixner,
	Stephen Boyd, Andrew Morton, Greg Kroah-Hartman,
	Paul E. McKenney, Christoffer Dall, Deepa Dinamani, Ingo Molnar,
	Joel Fernandes, Kees Cook, Geert Uytterhoeven, Luis R. Rodriguez,
	Nicholas Piggin, Jason A. Donenfeld, Olof Johansson,
	Josh Poimboeuf, linux-doc

On Mon, Aug 07, 2017 at 11:52:42AM -0400, Prarit Bhargava wrote:
> +static u64 printk_get_ts(void)
> +{
> +	u64 mono, offset_real;
> +
> +	if (printk_time <= PRINTK_TIME_LOCAL)
> +		return local_clock();
> +
> +	if (printk_time == PRINTK_TIME_BOOT)
> +		return ktime_get_boot_log_ts();
> +
> +	mono = ktime_get_real_log_ts(&offset_real);
> +
> +	if (printk_time == PRINTK_TIME_MONO)
> +		return mono;
> +
> +	return mono + offset_real;
> +}
>  
>  static size_t print_time(u64 ts, char *buf)
>  {
> @@ -1643,7 +1750,7 @@ static bool cont_add(int facility, int level, enum log_flags flags, const char *
>  		cont.facility = facility;
>  		cont.level = level;
>  		cont.owner = current;
> -		cont.ts_nsec = local_clock();
> +		cont.ts_nsec = printk_get_ts();
>  		cont.flags = flags;
>  	}
>  

So you really want to do all those branches every single time you
printk() ? I know printk() is somewhat of a slow path, but shees that's
ugly.

Why not have that setup function of yours set a function pointer?

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v4] printk: Add monotonic, boottime, and realtime timestamps
  2017-08-07 16:52 ` John Stultz
  2017-08-07 17:15   ` Peter Zijlstra
@ 2017-08-07 18:04   ` Prarit Bhargava
  2017-08-07 18:47     ` John Stultz
  1 sibling, 1 reply; 16+ messages in thread
From: Prarit Bhargava @ 2017-08-07 18:04 UTC (permalink / raw)
  To: John Stultz
  Cc: lkml, Mark Salyzyn, Jonathan Corbet, Petr Mladek,
	Sergey Senozhatsky, Steven Rostedt, Thomas Gleixner,
	Stephen Boyd, Andrew Morton, Greg Kroah-Hartman,
	Paul E. McKenney, Christoffer Dall, Deepa Dinamani, Ingo Molnar,
	Joel Fernandes, Kees Cook, Peter Zijlstra, Geert Uytterhoeven,
	Luis R. Rodriguez, Nicholas Piggin, Jason A. Donenfeld,
	Olof Johansson, Josh Poimboeuf, linux-doc



On 08/07/2017 12:52 PM, John Stultz wrote:
> On Mon, Aug 7, 2017 at 8:52 AM, Prarit Bhargava <prarit@redhat.com> wrote:
>> printk.time=1/CONFIG_PRINTK_TIME=1 adds a unmodified local hardware clock
>> timestamp to printk messages.  The local hardware clock loses time each
>> day making it difficult to determine exactly when an issue has occurred in
>> the kernel log, and making it difficult to determine how kernel and
>> hardware issues relate to each other in real time.
>>
>> Make printk output different timestampes by adding options for no
>> timestamp, the local hardware clock, the monotonic clock, the boottime
>> clock, and the real clock.  Allow a user to pick one of the clocks by
>> using the printk.time kernel parameter.  Output the type of clock in
>> /sys/module/printk/parameters/time so userspace programs can interpret the
>> timestamp.
>>
>> Real clock & 32-bit systems:  Selecting the real clock printk timestamp may
>> lead to unlikely situations where a timestamp is wrong because the real time
>> offset is read without the protection of a sequence lock in the call to
>> ktime_get_log_ts() in printk_get_ts().
>>
>> v2: Use peterz's suggested Kconfig options.  Merge patchset together.
>> Fix i386 !CONFIG_PRINTK builds.
>>
>> v3: Fixed x86_64_defconfig. Added printk_time_type enum and
>> printk_time_str for better output. Added BOOTTIME clock functionality.
>>
>> v4: Fix messages, add additional printk.time options, and fix configs.
>>
>> Signed-off-by: Prarit Bhargava <prarit@redhat.com>
>> Cc: Mark Salyzyn <salyzyn@android.com>
>> Cc: Jonathan Corbet <corbet@lwn.net>
>> Cc: Petr Mladek <pmladek@suse.com>
>> Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
>> Cc: Steven Rostedt <rostedt@goodmis.org>
>> Cc: John Stultz <john.stultz@linaro.org>
>> Cc: Thomas Gleixner <tglx@linutronix.de>
>> Cc: Stephen Boyd <sboyd@codeaurora.org>
>> Cc: Andrew Morton <akpm@linux-foundation.org>
>> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
>> Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
>> Cc: Christoffer Dall <cdall@linaro.org>
>> Cc: Deepa Dinamani <deepa.kernel@gmail.com>
>> Cc: Ingo Molnar <mingo@kernel.org>
>> Cc: Joel Fernandes <joelaf@google.com>
>> Cc: Prarit Bhargava <prarit@redhat.com>
>> Cc: Kees Cook <keescook@chromium.org>
>> Cc: Peter Zijlstra <peterz@infradead.org>
>> Cc: Geert Uytterhoeven <geert+renesas@glider.be>
>> Cc: "Luis R. Rodriguez" <mcgrof@kernel.org>
>> Cc: Nicholas Piggin <npiggin@gmail.com>
>> Cc: "Jason A. Donenfeld" <Jason@zx2c4.com>
>> Cc: Olof Johansson <olof@lixom.net>
>> Cc: Josh Poimboeuf <jpoimboe@redhat.com>
>> Cc: linux-doc@vger.kernel.org
>> ---
>>  Documentation/admin-guide/kernel-parameters.txt    |   6 +-
>>  arch/arm/configs/aspeed_g4_defconfig               |   2 +-
>>  arch/arm/configs/aspeed_g5_defconfig               |   2 +-
>>  arch/arm/configs/axm55xx_defconfig                 |   2 +-
>>  arch/arm/configs/bcm2835_defconfig                 |   2 +-
>>  arch/arm/configs/colibri_pxa270_defconfig          |   2 +-
>>  arch/arm/configs/colibri_pxa300_defconfig          |   2 +-
>>  arch/arm/configs/dove_defconfig                    |   2 +-
>>  arch/arm/configs/efm32_defconfig                   |   2 +-
>>  arch/arm/configs/exynos_defconfig                  |   2 +-
>>  arch/arm/configs/ezx_defconfig                     |   2 +-
>>  arch/arm/configs/h5000_defconfig                   |   2 +-
>>  arch/arm/configs/hisi_defconfig                    |   2 +-
>>  arch/arm/configs/imote2_defconfig                  |   2 +-
>>  arch/arm/configs/imx_v6_v7_defconfig               |   2 +-
>>  arch/arm/configs/keystone_defconfig                |   2 +-
>>  arch/arm/configs/lpc18xx_defconfig                 |   2 +-
>>  arch/arm/configs/magician_defconfig                |   2 +-
>>  arch/arm/configs/mmp2_defconfig                    |   2 +-
>>  arch/arm/configs/moxart_defconfig                  |   2 +-
>>  arch/arm/configs/mps2_defconfig                    |   2 +-
>>  arch/arm/configs/multi_v7_defconfig                |   2 +-
>>  arch/arm/configs/mvebu_v7_defconfig                |   2 +-
>>  arch/arm/configs/mxs_defconfig                     |   2 +-
>>  arch/arm/configs/omap2plus_defconfig               |   2 +-
>>  arch/arm/configs/pxa168_defconfig                  |   2 +-
>>  arch/arm/configs/pxa3xx_defconfig                  |   2 +-
>>  arch/arm/configs/pxa910_defconfig                  |   2 +-
>>  arch/arm/configs/pxa_defconfig                     |   2 +-
>>  arch/arm/configs/qcom_defconfig                    |   2 +-
>>  arch/arm/configs/raumfeld_defconfig                |   2 +-
>>  arch/arm/configs/shmobile_defconfig                |   2 +-
>>  arch/arm/configs/socfpga_defconfig                 |   2 +-
>>  arch/arm/configs/stm32_defconfig                   |   2 +-
>>  arch/arm/configs/sunxi_defconfig                   |   2 +-
>>  arch/arm/configs/tango4_defconfig                  |   2 +-
>>  arch/arm/configs/tegra_defconfig                   |   2 +-
>>  arch/arm/configs/u300_defconfig                    |   2 +-
>>  arch/arm/configs/u8500_defconfig                   |   2 +-
>>  arch/arm/configs/vt8500_v6_v7_defconfig            |   2 +-
>>  arch/arm/configs/xcep_defconfig                    |   2 +-
>>  arch/arm/configs/zx_defconfig                      |   2 +-
>>  arch/arm64/configs/defconfig                       |   2 +-
>>  arch/m68k/configs/amcore_defconfig                 |   2 +-
>>  arch/mips/configs/ath25_defconfig                  |   2 +-
>>  arch/mips/configs/bcm47xx_defconfig                |   2 +-
>>  arch/mips/configs/bmips_be_defconfig               |   2 +-
>>  arch/mips/configs/bmips_stb_defconfig              |   2 +-
>>  arch/mips/configs/ci20_defconfig                   |   2 +-
>>  arch/mips/configs/generic_defconfig                |   2 +-
>>  arch/mips/configs/lemote2f_defconfig               |   2 +-
>>  arch/mips/configs/loongson3_defconfig              |   2 +-
>>  arch/mips/configs/nlm_xlp_defconfig                |   2 +-
>>  arch/mips/configs/nlm_xlr_defconfig                |   2 +-
>>  arch/mips/configs/pistachio_defconfig              |   2 +-
>>  arch/mips/configs/qi_lb60_defconfig                |   2 +-
>>  arch/mips/configs/rt305x_defconfig                 |   2 +-
>>  arch/mips/configs/xway_defconfig                   |   2 +-
>>  arch/parisc/configs/generic-64bit_defconfig        |   2 +-
>>  arch/powerpc/configs/40x/virtex_defconfig          |   2 +-
>>  arch/powerpc/configs/44x/fsp2_defconfig            |   2 +-
>>  arch/powerpc/configs/44x/virtex5_defconfig         |   2 +-
>>  arch/powerpc/configs/44x/warp_defconfig            |   2 +-
>>  arch/powerpc/configs/52xx/cm5200_defconfig         |   2 +-
>>  arch/powerpc/configs/52xx/lite5200b_defconfig      |   2 +-
>>  arch/powerpc/configs/52xx/motionpro_defconfig      |   2 +-
>>  arch/powerpc/configs/52xx/tqm5200_defconfig        |   2 +-
>>  arch/powerpc/configs/gamecube_defconfig            |   2 +-
>>  arch/powerpc/configs/mpc5200_defconfig             |   2 +-
>>  arch/powerpc/configs/pasemi_defconfig              |   2 +-
>>  arch/powerpc/configs/wii_defconfig                 |   2 +-
>>  arch/s390/configs/default_defconfig                |   2 +-
>>  arch/s390/configs/gcov_defconfig                   |   2 +-
>>  arch/s390/configs/performance_defconfig            |   2 +-
>>  arch/s390/configs/zfcpdump_defconfig               |   2 +-
>>  arch/sh/configs/edosk7760_defconfig                |   2 +-
>>  arch/sh/configs/sdk7786_defconfig                  |   2 +-
>>  arch/sh/configs/se7722_defconfig                   |   2 +-
>>  arch/sh/configs/sh7785lcr_32bit_defconfig          |   2 +-
>>  arch/sh/configs/urquell_defconfig                  |   2 +-
>>  arch/sparc/configs/sparc64_defconfig               |   2 +-
>>  arch/x86/configs/i386_defconfig                    |   2 +-
>>  arch/x86/configs/x86_64_defconfig                  |   2 +-
>>  arch/xtensa/configs/audio_kc705_defconfig          |   2 +-
>>  arch/xtensa/configs/cadence_csp_defconfig          |   2 +-
>>  arch/xtensa/configs/generic_kc705_defconfig        |   2 +-
>>  arch/xtensa/configs/nommu_kc705_defconfig          |   2 +-
>>  arch/xtensa/configs/smp_lx200_defconfig            |   2 +-
> 
> Still not quite following why you're updating all the defconfigs. I'd
> make sure the Kconfig default settings are right, and leave updating
> the defconfig to arch/device maintainers. It adds a lot of noise to
> the patch.

Hmm ... I thought it was up to the patch submitter to make sure that
'make defconfig' still worked?  Are you sure I can leave that broken?

/me *really* doesn't want to get yelled at by every arch maintainer.

> 
> 
>> +u64 ktime_get_real_log_ts(u64 *offset_real)
>> +{
>> +       *offset_real = ktime_to_ns(tk_core.timekeeper.offs_real);
>> +
>> +       if (timekeeping_active)
>> +               return ktime_get_mono_fast_ns();
>> +       else
>> +               return local_clock();
>> +}
>> +
>> +u64 ktime_get_boot_log_ts(void)
>> +{
>> +       if (timekeeping_active)
>> +               return ktime_get_boot_fast_ns();
>> +       else
>> +               return local_clock();
>> +}
> 
> This feels a little tacked on and duplicative.  I'd suggest having one
> function that returns the offset_real and offset_boot or have a
> separate get_mono_log_ts() so its at least consistent.   

I have a better suggestion that I was toying with -- exporting
timekeeping_active and using the existing ktime_get_mono|boot|real|_fast_ns()
functions with a function pointer would simplify this code.

> Additionally,
> in the commit message, you call out the lack of locking between
> grabing the offs_real and calling get_mono_fast_ns(), but I worry it
> may be particularly problematic on 32bit systems, and you don't have
> any notes in the actual code about it (it looks like an oversight).
> 

I was told to move that comment to the kdoc description by Luis R. Rodriguez.

> Also, when timekeeping_active flips over, and we change from local
> clock to the specified clock, do we see a discontinuity in the log? I
> know folks use to gripe about that back in the day.
> 

I have tested this across many systems and haven't seen a discontinunity
yet.  I've done both large and small cpu footprint systems and haven't seen
anything like that.

P.


> thanks
> -john
> 

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v4] printk: Add monotonic, boottime, and realtime timestamps
  2017-08-07 16:58 ` Mark Salyzyn
@ 2017-08-07 18:07   ` Prarit Bhargava
  0 siblings, 0 replies; 16+ messages in thread
From: Prarit Bhargava @ 2017-08-07 18:07 UTC (permalink / raw)
  To: Mark Salyzyn, linux-kernel
  Cc: Jonathan Corbet, Petr Mladek, Sergey Senozhatsky, Steven Rostedt,
	John Stultz, Thomas Gleixner, Stephen Boyd, Andrew Morton,
	Greg Kroah-Hartman, Paul E. McKenney, Christoffer Dall,
	Deepa Dinamani, Ingo Molnar, Joel Fernandes, Kees Cook,
	Peter Zijlstra, Geert Uytterhoeven, Luis R. Rodriguez,
	Nicholas Piggin, Jason A. Donenfeld, Olof Johansson,
	Josh Poimboeuf, linux-doc



On 08/07/2017 12:58 PM, Mark Salyzyn wrote:
> On 08/07/2017 08:52 AM, Prarit Bhargava wrote:
>> diff --git a/arch/arm/configs/aspeed_g4_defconfig
>> b/arch/arm/configs/aspeed_g4_defconfig
>> index cfc2465e8b77..5f3c50914e92 100644
>> --- a/arch/arm/configs/aspeed_g4_defconfig
>> +++ b/arch/arm/configs/aspeed_g4_defconfig
>> @@ -162,7 +162,7 @@ CONFIG_JFFS2_FS_XATTR=y
>>   CONFIG_UBIFS_FS=y
>>   CONFIG_SQUASHFS=y
>>   CONFIG_SQUASHFS_XZ=y
>> -CONFIG_PRINTK_TIME=y
>> +CONFIG_PRINTK_TIME_LOCAL=y
>>   CONFIG_DYNAMIC_DEBUG=y
>>   CONFIG_STRIP_ASM_SYMS=y
>>   CONFIG_DEBUG_FS=y
> Many have had misgivings, let me try another pass at this.
> 
> We (royal we) should really look into adjusting configuration parsing to allow
> an easy transition from boolean to selection ... I am sure this is not the first
> time bistate/tristate was moved to a number.
> 
> An idea? Maybe look into a way to deal with this to use something _other_ than
> CONFIG_PRINTK_TIME to hold the selection, and keep a (hidden/legacy?)
> CONFIG_PRINTK_TIME that when selected sets CONFIG_PRINTK_TIME_LOCAL, and switch
> to _not_ CONFIG_PRINTK_TIME_DISABLE as the internal mechanical replacement for
> it. I do not know how disruptive this will be, but is worth it if the codebase
> supports it, and legacy config retained?

I looked for one but couldn't find one.  The kernel is a big place, though, and
perhaps it already exists :/.

>> +
>> +static int printk_time_set(const char *val, const struct kernel_param *kp)
>> +{
>> +    char *param = strstrip((char *)val);
>> +    int _printk_time = -1;
>> +    int stamp;
>> +
>> +    if (strlen(param) == 1) {
>> +        /* Preserve legacy boolean settings */
>> +        if (!strcmp("0", param) || !strcmp("n", param) ||
> if strlen(param) == 1, then param[0] == '0' etc works fine and is KISS.
>> +    /*
>> +     * Only allow enabling and disabling of the current printk_time
>> +     * setting.  Changing it from one setting to another confuses
>> +     * userspace.
>> +     */
>> +    if (printk_time_setting == PRINTK_TIME_DISABLE) {
>> +        printk_time_setting = _printk_time;
>> +    } else if ((printk_time_setting != _printk_time) &&
>> +           (_printk_time != 0)) {
>> +        pr_warn("printk: timestamp can only be set to 0(disabled) or %s\n",
>> +            printk_time_str[printk_time_setting]);
>> +        return -EINVAL;
>> +    }
> I agree with the restriction in the general case.  However (as hinted at
> before() #ifdef CONFIG_PRINTK_TIME_RESTRICT (default y, or #ifndef
> CONFIG_PRINTK_TIME_DEBUG default n) around this will allow us users to choose if
> we are confused or not. I can see being able to change it on the fly as an
> option. Especially since we have /sys/module/printk/parameters/time.

Yeah, but I think that should be a later enhancement.

P.

> 
> -- Mark

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v4] printk: Add monotonic, boottime, and realtime timestamps
  2017-08-07 18:04   ` Prarit Bhargava
@ 2017-08-07 18:47     ` John Stultz
  2017-08-07 20:06       ` Prarit Bhargava
  0 siblings, 1 reply; 16+ messages in thread
From: John Stultz @ 2017-08-07 18:47 UTC (permalink / raw)
  To: Prarit Bhargava
  Cc: lkml, Mark Salyzyn, Jonathan Corbet, Petr Mladek,
	Sergey Senozhatsky, Steven Rostedt, Thomas Gleixner,
	Stephen Boyd, Andrew Morton, Greg Kroah-Hartman,
	Paul E. McKenney, Christoffer Dall, Deepa Dinamani, Ingo Molnar,
	Joel Fernandes, Kees Cook, Peter Zijlstra, Geert Uytterhoeven,
	Luis R. Rodriguez, Nicholas Piggin, Jason A. Donenfeld,
	Olof Johansson, Josh Poimboeuf, linux-doc

On Mon, Aug 7, 2017 at 11:04 AM, Prarit Bhargava <prarit@redhat.com> wrote:
> On 08/07/2017 12:52 PM, John Stultz wrote:
>> Still not quite following why you're updating all the defconfigs. I'd
>> make sure the Kconfig default settings are right, and leave updating
>> the defconfig to arch/device maintainers. It adds a lot of noise to
>> the patch.
>
> Hmm ... I thought it was up to the patch submitter to make sure that
> 'make defconfig' still worked?  Are you sure I can leave that broken?
>
> /me *really* doesn't want to get yelled at by every arch maintainer.

No. Don't break systems, but at the same time, can't you use the
default value in Kconfig to set it properly so the old defconfig
settings don't really matter?

Apologies if I've not followed the issue properly, but it is odd, as
I'm not sure I can think of a patch I've seen before that had so much
defconfig noise in it.  Again, I've not looked into it closely, so it
may just be my own ignorance, but it makes me suspect there is a
better way.


>>> +u64 ktime_get_real_log_ts(u64 *offset_real)
>>> +{
>>> +       *offset_real = ktime_to_ns(tk_core.timekeeper.offs_real);
>>> +
>>> +       if (timekeeping_active)
>>> +               return ktime_get_mono_fast_ns();
>>> +       else
>>> +               return local_clock();
>>> +}
>>> +
>>> +u64 ktime_get_boot_log_ts(void)
>>> +{
>>> +       if (timekeeping_active)
>>> +               return ktime_get_boot_fast_ns();
>>> +       else
>>> +               return local_clock();
>>> +}
>>
>> This feels a little tacked on and duplicative.  I'd suggest having one
>> function that returns the offset_real and offset_boot or have a
>> separate get_mono_log_ts() so its at least consistent.
>
> I have a better suggestion that I was toying with -- exporting
> timekeeping_active and using the existing ktime_get_mono|boot|real|_fast_ns()
> functions with a function pointer would simplify this code.

Yea. That sounds cleaner.


>> Additionally,
>> in the commit message, you call out the lack of locking between
>> grabing the offs_real and calling get_mono_fast_ns(), but I worry it
>> may be particularly problematic on 32bit systems, and you don't have
>> any notes in the actual code about it (it looks like an oversight).
>>
>
> I was told to move that comment to the kdoc description by Luis R. Rodriguez.

You can have it both ways. :)  Its just without any mention near the
function, it just looks buggy (well, because it technically is), so
either we should fix it properly or at least document that its
intentionally buggy (which again, doesn't feel great here - we already
have lots of caveats around the _fast_ns() accessors, so this is
layering subtle breakage on top of other subtle behavior).


>> Also, when timekeeping_active flips over, and we change from local
>> clock to the specified clock, do we see a discontinuity in the log? I
>> know folks use to gripe about that back in the day.
>>
>
> I have tested this across many systems and haven't seen a discontinunity
> yet.  I've done both large and small cpu footprint systems and haven't seen
> anything like that.

Ok.

thanks
-john

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v4] printk: Add monotonic, boottime, and realtime timestamps
  2017-08-07 18:47     ` John Stultz
@ 2017-08-07 20:06       ` Prarit Bhargava
  2017-08-07 20:36         ` Paul E. McKenney
  0 siblings, 1 reply; 16+ messages in thread
From: Prarit Bhargava @ 2017-08-07 20:06 UTC (permalink / raw)
  To: John Stultz
  Cc: lkml, Mark Salyzyn, Jonathan Corbet, Petr Mladek,
	Sergey Senozhatsky, Steven Rostedt, Thomas Gleixner,
	Stephen Boyd, Andrew Morton, Greg Kroah-Hartman,
	Paul E. McKenney, Christoffer Dall, Deepa Dinamani, Ingo Molnar,
	Joel Fernandes, Kees Cook, Peter Zijlstra, Geert Uytterhoeven,
	Luis R. Rodriguez, Nicholas Piggin, Jason A. Donenfeld,
	Olof Johansson, Josh Poimboeuf, linux-doc



On 08/07/2017 02:47 PM, John Stultz wrote:
> On Mon, Aug 7, 2017 at 11:04 AM, Prarit Bhargava <prarit@redhat.com> wrote:
>> On 08/07/2017 12:52 PM, John Stultz wrote:
>>> Still not quite following why you're updating all the defconfigs. I'd
>>> make sure the Kconfig default settings are right, and leave updating
>>> the defconfig to arch/device maintainers. It adds a lot of noise to
>>> the patch.
>>
>> Hmm ... I thought it was up to the patch submitter to make sure that
>> 'make defconfig' still worked?  Are you sure I can leave that broken?
>>
>> /me *really* doesn't want to get yelled at by every arch maintainer.
> 
> No. Don't break systems, but at the same time, can't you use the
> default value in Kconfig to set it properly so the old defconfig
> settings don't really matter?
> 
> Apologies if I've not followed the issue properly, but it is odd, as
> I'm not sure I can think of a patch I've seen before that had so much
> defconfig noise in it.  Again, I've not looked into it closely, so it
> may just be my own ignorance, but it makes me suspect there is a
> better way.
> 

peterz?  Want to offer a suggestion?  The issue is that I'm changing a bool
config option to an int and that impacts all the arch's defconfigs.  John points
out that this is a lot of churn and we're both wondering if there's a better way
to do the configs.

P.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v4] printk: Add monotonic, boottime, and realtime timestamps
  2017-08-07 20:06       ` Prarit Bhargava
@ 2017-08-07 20:36         ` Paul E. McKenney
  2017-08-08  8:28           ` Peter Zijlstra
  0 siblings, 1 reply; 16+ messages in thread
From: Paul E. McKenney @ 2017-08-07 20:36 UTC (permalink / raw)
  To: Prarit Bhargava
  Cc: John Stultz, lkml, Mark Salyzyn, Jonathan Corbet, Petr Mladek,
	Sergey Senozhatsky, Steven Rostedt, Thomas Gleixner,
	Stephen Boyd, Andrew Morton, Greg Kroah-Hartman,
	Christoffer Dall, Deepa Dinamani, Ingo Molnar, Joel Fernandes,
	Kees Cook, Peter Zijlstra, Geert Uytterhoeven, Luis R. Rodriguez,
	Nicholas Piggin, Jason A. Donenfeld, Olof Johansson,
	Josh Poimboeuf, linux-doc

On Mon, Aug 07, 2017 at 04:06:09PM -0400, Prarit Bhargava wrote:
> 
> 
> On 08/07/2017 02:47 PM, John Stultz wrote:
> > On Mon, Aug 7, 2017 at 11:04 AM, Prarit Bhargava <prarit@redhat.com> wrote:
> >> On 08/07/2017 12:52 PM, John Stultz wrote:
> >>> Still not quite following why you're updating all the defconfigs. I'd
> >>> make sure the Kconfig default settings are right, and leave updating
> >>> the defconfig to arch/device maintainers. It adds a lot of noise to
> >>> the patch.
> >>
> >> Hmm ... I thought it was up to the patch submitter to make sure that
> >> 'make defconfig' still worked?  Are you sure I can leave that broken?
> >>
> >> /me *really* doesn't want to get yelled at by every arch maintainer.
> > 
> > No. Don't break systems, but at the same time, can't you use the
> > default value in Kconfig to set it properly so the old defconfig
> > settings don't really matter?
> > 
> > Apologies if I've not followed the issue properly, but it is odd, as
> > I'm not sure I can think of a patch I've seen before that had so much
> > defconfig noise in it.  Again, I've not looked into it closely, so it
> > may just be my own ignorance, but it makes me suspect there is a
> > better way.
> > 
> 
> peterz?  Want to offer a suggestion?  The issue is that I'm changing a bool
> config option to an int and that impacts all the arch's defconfigs.  John points
> out that this is a lot of churn and we're both wondering if there's a better way
> to do the configs.

The usual approach is to keep the old bool Kconfig option, and add another
int Kconfig option that depends on the original one.  The tests for
the int value get a bit more complex, but one way to handle this is to
define a cpp macro something like the following:

#ifdef CONFIG_OLD_OPTION
#define CPP_NEW_OPTION 0
#else
#define CPP_NEW_OPTION CONFIG_NEW_OPTION
#endif

Then use CPP_NEW_OPTION, where zero means disabled and other numbers
select the available options.

Adjust to suit depending on what values mean what.

Another approach is to make the range of the new Kconfig option
depend on the old option:

config NEW_OPTION
	int "your description here"
	range 1 5 if OLD_OPTION
	range 0 0 if !OLD_OPTION
	default 0
	help
	  your help here

Again, adjust to suit depending on what values mean what.

							Thanx, Paul

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v4] printk: Add monotonic, boottime, and realtime timestamps
  2017-08-07 15:52 [PATCH v4] printk: Add monotonic, boottime, and realtime timestamps Prarit Bhargava
                   ` (2 preceding siblings ...)
  2017-08-07 17:18 ` Peter Zijlstra
@ 2017-08-08  0:19 ` Sergey Senozhatsky
  2017-08-08 12:32   ` Prarit Bhargava
  2017-08-08 13:46   ` Prarit Bhargava
  3 siblings, 2 replies; 16+ messages in thread
From: Sergey Senozhatsky @ 2017-08-08  0:19 UTC (permalink / raw)
  To: Prarit Bhargava
  Cc: linux-kernel, Mark Salyzyn, Jonathan Corbet, Petr Mladek,
	Sergey Senozhatsky, Steven Rostedt, John Stultz, Thomas Gleixner,
	Stephen Boyd, Andrew Morton, Greg Kroah-Hartman,
	Paul E. McKenney, Christoffer Dall, Deepa Dinamani, Ingo Molnar,
	Joel Fernandes, Kees Cook, Peter Zijlstra, Geert Uytterhoeven,
	Luis R. Rodriguez, Nicholas Piggin, Jason A. Donenfeld,
	Olof Johansson, Josh Poimboeuf, linux-doc

On (08/07/17 11:52), Prarit Bhargava wrote:
[..]
> +/**
> + * enum printk_time_type - Timestamp types for printk() messages.
> + * @PRINTK_TIME_DISABLE: No time stamp.
> + * @PRINTK_TIME_LOCAL: Local hardware clock timestamp.
> + * @PRINTK_TIME_BOOT: Boottime clock timestamp.
> + * @PRINTK_TIME_MONO: Monotonic clock timestamp.
> + * @PRINTK_TIME_REAL: Realtime clock timestamp.  On 32-bit
> + * systems selecting the real clock printk timestamp may lead to unlikely
> + * situations where a timestamp is wrong because the real time offset is read
> + * without the protection of a sequence lock in the call to ktime_get_log_ts()
> + * in printk_get_ts() below.
> + */
> +enum printk_time_type {
> +	PRINTK_TIME_DISABLE = 0,
> +	PRINTK_TIME_LOCAL = 1,
> +	PRINTK_TIME_BOOT = 2,
> +	PRINTK_TIME_MONO = 3,
> +	PRINTK_TIME_REAL = 4,
> +};

may be call the entire thing 'timestamp surces' or something?

[..]
> +	if (strlen(param) == 1) {
> +		/* Preserve legacy boolean settings */
> +		if (!strcmp("0", param) || !strcmp("n", param) ||
> +		    !strcmp("N", param))
> +			_printk_time = PRINTK_TIME_DISABLE;
> +		if (!strcmp("1", param) || !strcmp("y", param) ||
> +		    !strcmp("Y", param))
> +			_printk_time = PRINTK_TIME_LOCAL;
> +	}
> +	if (_printk_time == -1) {
> +		for (stamp = 0; stamp <= 4; stamp++) {
> +			if (!strncmp(printk_time_str[stamp], param,
> +				     strlen(param))) {
> +				_printk_time = stamp;
> +				break;
> +			}
> +		}
> +	}

	you can use match_string() here.

> +	if (_printk_time == -1) {
> +		pr_warn("printk: invalid timestamp value %s\n", param);
> +		return -EINVAL;
> +	}

`invalid timestamp value' is confusing.


> +	} else if ((printk_time_setting != _printk_time) &&
> +		   (_printk_time != 0)) {
> +		pr_warn("printk: timestamp can only be set to 0(disabled) or %s\n",
> +			printk_time_str[printk_time_setting]);

ditto.


> +		return -EINVAL;
> +	}
> +
> +	printk_time = _printk_time;
> +	pr_info("printk: timestamp set to %s\n", printk_time_str[printk_time]);

ditto.


[..]

> +static u64 printk_get_ts(void)
> +{
> +	u64 mono, offset_real;
> +
> +	if (printk_time <= PRINTK_TIME_LOCAL)
> +		return local_clock();
> +
> +	if (printk_time == PRINTK_TIME_BOOT)
> +		return ktime_get_boot_log_ts();
> +
> +	mono = ktime_get_real_log_ts(&offset_real);
> +
> +	if (printk_time == PRINTK_TIME_MONO)
> +		return mono;
> +
> +	return mono + offset_real;
> +}

this looks hard...

> +static int printk_time;
> +static int printk_time_setting;

how about s/printk_time_setting/printk_time_source/? or something similar?

	-ss

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v4] printk: Add monotonic, boottime, and realtime timestamps
  2017-08-07 20:36         ` Paul E. McKenney
@ 2017-08-08  8:28           ` Peter Zijlstra
  2017-08-08 23:08             ` Prarit Bhargava
  0 siblings, 1 reply; 16+ messages in thread
From: Peter Zijlstra @ 2017-08-08  8:28 UTC (permalink / raw)
  To: Paul E. McKenney
  Cc: Prarit Bhargava, John Stultz, lkml, Mark Salyzyn,
	Jonathan Corbet, Petr Mladek, Sergey Senozhatsky, Steven Rostedt,
	Thomas Gleixner, Stephen Boyd, Andrew Morton, Greg Kroah-Hartman,
	Christoffer Dall, Deepa Dinamani, Ingo Molnar, Joel Fernandes,
	Kees Cook, Geert Uytterhoeven, Luis R. Rodriguez,
	Nicholas Piggin, Jason A. Donenfeld, Olof Johansson,
	Josh Poimboeuf, linux-doc

On Mon, Aug 07, 2017 at 01:36:39PM -0700, Paul E. McKenney wrote:
> On Mon, Aug 07, 2017 at 04:06:09PM -0400, Prarit Bhargava wrote:

> > peterz?  Want to offer a suggestion?  The issue is that I'm changing a bool
> > config option to an int and that impacts all the arch's defconfigs.  John points
> > out that this is a lot of churn and we're both wondering if there's a better way
> > to do the configs.
> 
> The usual approach is to keep the old bool Kconfig option, and add another
> int Kconfig option that depends on the original one.  The tests for
> the int value get a bit more complex, but one way to handle this is to
> define a cpp macro something like the following:
> 
> #ifdef CONFIG_OLD_OPTION
> #define CPP_NEW_OPTION 0
> #else
> #define CPP_NEW_OPTION CONFIG_NEW_OPTION
> #endif
> 
> Then use CPP_NEW_OPTION, where zero means disabled and other numbers
> select the available options.
> 
> Adjust to suit depending on what values mean what.
> 
> Another approach is to make the range of the new Kconfig option
> depend on the old option:
> 
> config NEW_OPTION
> 	int "your description here"
> 	range 1 5 if OLD_OPTION
> 	range 0 0 if !OLD_OPTION
> 	default 0
> 	help
> 	  your help here
> 
> Again, adjust to suit depending on what values mean what.

Right this. Except I don't see the !OLD_OPTION working as expected.
A 'new' config will not include the old one, so the !OLD_OPTION thing
will 'always' be true.

So your:

> @@ -1,8 +1,46 @@
>  menu "printk and dmesg options"
>
> +choice
> +       prompt "printk default clock"
> +       config PRINTK_TIME_DISABLE
> +       bool "Disabled"
> +       help
> +        Selecting this option disables the time stamps of printk().
> +
> +       config PRINTK_TIME_LOCAL
> +       bool "Local Clock"
> +       help
> +         Selecting this option causes the time stamps of printk() to be
> +         stamped with the unadjusted hardware clock.
> +
> +       config PRINTK_TIME_BOOT
> +       bool "CLOCK_BOOTTIME"
> +       help
> +         Selecting this option causes the time stamps of printk() to be
> +         stamped with the adjusted boottime clock.
> +
> +       config PRINTK_TIME_MONO
> +       bool "CLOCK_MONOTONIC"
> +       help
> +         Selecting this option causes the time stamps of printk() to be
> +         stamped with the adjusted monotonic clock.
> +
> +       config PRINTK_TIME_REAL
> +       bool "CLOCK_REALTIME"
> +       help
> +         Selecting this option causes the time stamps of printk() to be
> +         stamped with the adjusted realtime clock.
> +
> +endchoice
> +
>  config PRINTK_TIME

Change that into something like:

config PRINTK_CLOCK


> -       bool "Show timing information on printks"
> +       int "Show time stamp information on printks"
>         depends on PRINTK
> +       default 0 if PRINTK_TIME_DISABLE
> +       default 1 if PRINTK_TIME_LOCAL

And that into:

	default 1 if PRINTK_TIME_LOCAL || PRINTK_TIME

> +       default 2 if PRINTK_TIME_BOOT
> +       default 3 if PRINTK_TIME_MONO
> +       default 4 if PRINTK_TIME_REAL
>	  help
>	    Selecting this option causes time stamps of the printk()

Then the old PRINTK_TIME symbol will auto-convert into the new
equivalent.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v4] printk: Add monotonic, boottime, and realtime timestamps
  2017-08-08  0:19 ` Sergey Senozhatsky
@ 2017-08-08 12:32   ` Prarit Bhargava
  2017-08-08 13:46   ` Prarit Bhargava
  1 sibling, 0 replies; 16+ messages in thread
From: Prarit Bhargava @ 2017-08-08 12:32 UTC (permalink / raw)
  To: Sergey Senozhatsky
  Cc: linux-kernel, Mark Salyzyn, Jonathan Corbet, Petr Mladek,
	Sergey Senozhatsky, Steven Rostedt, John Stultz, Thomas Gleixner,
	Stephen Boyd, Andrew Morton, Greg Kroah-Hartman,
	Paul E. McKenney, Christoffer Dall, Deepa Dinamani, Ingo Molnar,
	Joel Fernandes, Kees Cook, Peter Zijlstra, Geert Uytterhoeven,
	Luis R. Rodriguez, Nicholas Piggin, Jason A. Donenfeld,
	Olof Johansson, Josh Poimboeuf, linux-doc



On 08/07/2017 08:19 PM, Sergey Senozhatsky wrote:
> On (08/07/17 11:52), Prarit Bhargava wrote:
> [..]
>> +/**
>> + * enum printk_time_type - Timestamp types for printk() messages.
>> + * @PRINTK_TIME_DISABLE: No time stamp.
>> + * @PRINTK_TIME_LOCAL: Local hardware clock timestamp.
>> + * @PRINTK_TIME_BOOT: Boottime clock timestamp.
>> + * @PRINTK_TIME_MONO: Monotonic clock timestamp.
>> + * @PRINTK_TIME_REAL: Realtime clock timestamp.  On 32-bit
>> + * systems selecting the real clock printk timestamp may lead to unlikely
>> + * situations where a timestamp is wrong because the real time offset is read
>> + * without the protection of a sequence lock in the call to ktime_get_log_ts()
>> + * in printk_get_ts() below.
>> + */
>> +enum printk_time_type {
>> +	PRINTK_TIME_DISABLE = 0,
>> +	PRINTK_TIME_LOCAL = 1,
>> +	PRINTK_TIME_BOOT = 2,
>> +	PRINTK_TIME_MONO = 3,
>> +	PRINTK_TIME_REAL = 4,
>> +};
> 
> may be call the entire thing 'timestamp surces' or something?

Done.

> 
> [..]
>> +	if (strlen(param) == 1) {
>> +		/* Preserve legacy boolean settings */
>> +		if (!strcmp("0", param) || !strcmp("n", param) ||
>> +		    !strcmp("N", param))
>> +			_printk_time = PRINTK_TIME_DISABLE;
>> +		if (!strcmp("1", param) || !strcmp("y", param) ||
>> +		    !strcmp("Y", param))
>> +			_printk_time = PRINTK_TIME_LOCAL;
>> +	}
>> +	if (_printk_time == -1) {
>> +		for (stamp = 0; stamp <= 4; stamp++) {
>> +			if (!strncmp(printk_time_str[stamp], param,
>> +				     strlen(param))) {
>> +				_printk_time = stamp;
>> +				break;
>> +			}
>> +		}
>> +	}
> 
> 	you can use match_string() here.
> 
>> +	if (_printk_time == -1) {
>> +		pr_warn("printk: invalid timestamp value %s\n", param);
>> +		return -EINVAL;
>> +	}
> 
> `invalid timestamp value' is confusing.

I can't think of anything better than 'invalid timestamp option'.  If you find
that confusing, please explain why.

> 
> 
>> +	} else if ((printk_time_setting != _printk_time) &&
>> +		   (_printk_time != 0)) {
>> +		pr_warn("printk: timestamp can only be set to 0(disabled) or %s\n",
>> +			printk_time_str[printk_time_setting]);
> 
> ditto.

Changed to 'timestamp can only e set to 0, disabled, or <string>'.

> 
> 
>> +		return -EINVAL;
>> +	}
>> +
>> +	printk_time = _printk_time;
>> +	pr_info("printk: timestamp set to %s\n", printk_time_str[printk_time]);
> 
> ditto.

I don't find this confusing _at all_.  Please offer an explanation of why you
think that message is confusing.

> 
> 
> [..]
> 
>> +static u64 printk_get_ts(void)
>> +{
>> +	u64 mono, offset_real;
>> +
>> +	if (printk_time <= PRINTK_TIME_LOCAL)
>> +		return local_clock();
>> +
>> +	if (printk_time == PRINTK_TIME_BOOT)
>> +		return ktime_get_boot_log_ts();
>> +
>> +	mono = ktime_get_real_log_ts(&offset_real);
>> +
>> +	if (printk_time == PRINTK_TIME_MONO)
>> +		return mono;
>> +
>> +	return mono + offset_real;
>> +}
> 
> this looks hard...

See previous suggestion from peterz to switch to a fn ptr.

> 
>> +static int printk_time;
>> +static int printk_time_setting;
> 
> how about s/printk_time_setting/printk_time_source/? or something similar?

Sure.

P.

> 
> 	-ss
> 

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v4] printk: Add monotonic, boottime, and realtime timestamps
  2017-08-08  0:19 ` Sergey Senozhatsky
  2017-08-08 12:32   ` Prarit Bhargava
@ 2017-08-08 13:46   ` Prarit Bhargava
  1 sibling, 0 replies; 16+ messages in thread
From: Prarit Bhargava @ 2017-08-08 13:46 UTC (permalink / raw)
  To: Sergey Senozhatsky
  Cc: linux-kernel, Mark Salyzyn, Jonathan Corbet, Petr Mladek,
	Sergey Senozhatsky, Steven Rostedt, John Stultz, Thomas Gleixner,
	Stephen Boyd, Andrew Morton, Greg Kroah-Hartman,
	Paul E. McKenney, Christoffer Dall, Deepa Dinamani, Ingo Molnar,
	Joel Fernandes, Kees Cook, Peter Zijlstra, Geert Uytterhoeven,
	Luis R. Rodriguez, Nicholas Piggin, Jason A. Donenfeld,
	Olof Johansson, Josh Poimboeuf, linux-doc



On 08/07/2017 08:19 PM, Sergey Senozhatsky wrote:
> On (08/07/17 11:52), Prarit Bhargava wrote:

<snip>

> [..]
>> +	if (strlen(param) == 1) {
>> +		/* Preserve legacy boolean settings */
>> +		if (!strcmp("0", param) || !strcmp("n", param) ||
>> +		    !strcmp("N", param))
>> +			_printk_time = PRINTK_TIME_DISABLE;
>> +		if (!strcmp("1", param) || !strcmp("y", param) ||
>> +		    !strcmp("Y", param))
>> +			_printk_time = PRINTK_TIME_LOCAL;
>> +	}
>> +	if (_printk_time == -1) {
>> +		for (stamp = 0; stamp <= 4; stamp++) {
>> +			if (!strncmp(printk_time_str[stamp], param,
>> +				     strlen(param))) {
>> +				_printk_time = stamp;
>> +				break;
>> +			}
>> +		}
>> +	}
> 
> 	you can use match_string() here.

match_string doesn't match correctly.  Others have made requests for, for
example, printk.time=r printk.time=real, etc.  Instead of butchering the code
for a bunch of strings I chose to allow partial matching and simplify the code.

P.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v4] printk: Add monotonic, boottime, and realtime timestamps
  2017-08-08  8:28           ` Peter Zijlstra
@ 2017-08-08 23:08             ` Prarit Bhargava
  2017-08-09 17:28               ` Paul E. McKenney
  0 siblings, 1 reply; 16+ messages in thread
From: Prarit Bhargava @ 2017-08-08 23:08 UTC (permalink / raw)
  To: Peter Zijlstra, Paul E. McKenney
  Cc: John Stultz, lkml, Mark Salyzyn, Jonathan Corbet, Petr Mladek,
	Sergey Senozhatsky, Steven Rostedt, Thomas Gleixner,
	Stephen Boyd, Andrew Morton, Greg Kroah-Hartman,
	Christoffer Dall, Deepa Dinamani, Ingo Molnar, Joel Fernandes,
	Kees Cook, Geert Uytterhoeven, Luis R. Rodriguez,
	Nicholas Piggin, Jason A. Donenfeld, Olof Johansson,
	Josh Poimboeuf, linux-doc



On 08/08/2017 04:28 AM, Peter Zijlstra wrote:
> On Mon, Aug 07, 2017 at 01:36:39PM -0700, Paul E. McKenney wrote:
>> On Mon, Aug 07, 2017 at 04:06:09PM -0400, Prarit Bhargava wrote:
> 
>>> peterz?  Want to offer a suggestion?  The issue is that I'm changing a bool
>>> config option to an int and that impacts all the arch's defconfigs.  John points
>>> out that this is a lot of churn and we're both wondering if there's a better way
>>> to do the configs.
>>
>> The usual approach is to keep the old bool Kconfig option, and add another
>> int Kconfig option that depends on the original one.  The tests for
>> the int value get a bit more complex, but one way to handle this is to
>> define a cpp macro something like the following:
>>
>> #ifdef CONFIG_OLD_OPTION
>> #define CPP_NEW_OPTION 0
>> #else
>> #define CPP_NEW_OPTION CONFIG_NEW_OPTION
>> #endif
>>
>> Then use CPP_NEW_OPTION, where zero means disabled and other numbers
>> select the available options.
>>
>> Adjust to suit depending on what values mean what.
>>
>> Another approach is to make the range of the new Kconfig option
>> depend on the old option:
>>
>> config NEW_OPTION
>> 	int "your description here"
>> 	range 1 5 if OLD_OPTION
>> 	range 0 0 if !OLD_OPTION
>> 	default 0
>> 	help
>> 	  your help here
>>
>> Again, adjust to suit depending on what values mean what.
> 
> Right this. Except I don't see the !OLD_OPTION working as expected.
> A 'new' config will not include the old one, so the !OLD_OPTION thing
> will 'always' be true.
> 
> So your:
> 
>> @@ -1,8 +1,46 @@
>>  menu "printk and dmesg options"
>>
>> +choice
>> +       prompt "printk default clock"
>> +       config PRINTK_TIME_DISABLE
>> +       bool "Disabled"
>> +       help
>> +        Selecting this option disables the time stamps of printk().
>> +
>> +       config PRINTK_TIME_LOCAL
>> +       bool "Local Clock"
>> +       help
>> +         Selecting this option causes the time stamps of printk() to be
>> +         stamped with the unadjusted hardware clock.
>> +
>> +       config PRINTK_TIME_BOOT
>> +       bool "CLOCK_BOOTTIME"
>> +       help
>> +         Selecting this option causes the time stamps of printk() to be
>> +         stamped with the adjusted boottime clock.
>> +
>> +       config PRINTK_TIME_MONO
>> +       bool "CLOCK_MONOTONIC"
>> +       help
>> +         Selecting this option causes the time stamps of printk() to be
>> +         stamped with the adjusted monotonic clock.
>> +
>> +       config PRINTK_TIME_REAL
>> +       bool "CLOCK_REALTIME"
>> +       help
>> +         Selecting this option causes the time stamps of printk() to be
>> +         stamped with the adjusted realtime clock.
>> +
>> +endchoice
>> +
>>  config PRINTK_TIME
> 
> Change that into something like:
> 
> config PRINTK_CLOCK
> 
> 
>> -       bool "Show timing information on printks"
>> +       int "Show time stamp information on printks"
>>         depends on PRINTK
>> +       default 0 if PRINTK_TIME_DISABLE
>> +       default 1 if PRINTK_TIME_LOCAL
> 
> And that into:
> 
> 	default 1 if PRINTK_TIME_LOCAL || PRINTK_TIME
> 
>> +       default 2 if PRINTK_TIME_BOOT
>> +       default 3 if PRINTK_TIME_MONO
>> +       default 4 if PRINTK_TIME_REAL
>> 	  help
>> 	    Selecting this option causes time stamps of the printk()
> 
> Then the old PRINTK_TIME symbol will auto-convert into the new
> equivalent.
> 

I don't think there's an easy code way around this.  Essentially this Kconfig
code boils down to properly evaluating

config PRINTK_CLOCK
	default 1 if PRINTK_TIME
	default 0

where there is no Kconfig entry for PRINTK_TIME.

If undefined CONFIG_PRINTK_TIME is used in a config, it is immediately
scrubbed by the kconfig script so it doesn't "exist" when CONFIG_PRINTK_CLOCK
is evaluated.  The result of that is CONFIG_PRINT_CLOCK=0.

I tried

config PRINTK_TIME
	bool "old config option"

then I end up with both a CONFIG_PRINTK_CLOCK=1 and a CONFIG_PRINTK_TIME=y in
the resulting config which is confusing.

I've debated using the other suggestion that Paul made but TBH (sorry
Paul) it seems like I'm avoiding the real but noisy solution of

	s/PRINTK_TIME=y/PRINTK_TIME=1/g

I'm obviously open to other suggestions...

P.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v4] printk: Add monotonic, boottime, and realtime timestamps
  2017-08-08 23:08             ` Prarit Bhargava
@ 2017-08-09 17:28               ` Paul E. McKenney
  0 siblings, 0 replies; 16+ messages in thread
From: Paul E. McKenney @ 2017-08-09 17:28 UTC (permalink / raw)
  To: Prarit Bhargava
  Cc: Peter Zijlstra, John Stultz, lkml, Mark Salyzyn, Jonathan Corbet,
	Petr Mladek, Sergey Senozhatsky, Steven Rostedt, Thomas Gleixner,
	Stephen Boyd, Andrew Morton, Greg Kroah-Hartman,
	Christoffer Dall, Deepa Dinamani, Ingo Molnar, Joel Fernandes,
	Kees Cook, Geert Uytterhoeven, Luis R. Rodriguez,
	Nicholas Piggin, Jason A. Donenfeld, Olof Johansson,
	Josh Poimboeuf, linux-doc

On Tue, Aug 08, 2017 at 07:08:00PM -0400, Prarit Bhargava wrote:
> 
> 
> On 08/08/2017 04:28 AM, Peter Zijlstra wrote:
> > On Mon, Aug 07, 2017 at 01:36:39PM -0700, Paul E. McKenney wrote:
> >> On Mon, Aug 07, 2017 at 04:06:09PM -0400, Prarit Bhargava wrote:
> > 
> >>> peterz?  Want to offer a suggestion?  The issue is that I'm changing a bool
> >>> config option to an int and that impacts all the arch's defconfigs.  John points
> >>> out that this is a lot of churn and we're both wondering if there's a better way
> >>> to do the configs.
> >>
> >> The usual approach is to keep the old bool Kconfig option, and add another
> >> int Kconfig option that depends on the original one.  The tests for
> >> the int value get a bit more complex, but one way to handle this is to
> >> define a cpp macro something like the following:
> >>
> >> #ifdef CONFIG_OLD_OPTION
> >> #define CPP_NEW_OPTION 0
> >> #else
> >> #define CPP_NEW_OPTION CONFIG_NEW_OPTION
> >> #endif
> >>
> >> Then use CPP_NEW_OPTION, where zero means disabled and other numbers
> >> select the available options.
> >>
> >> Adjust to suit depending on what values mean what.
> >>
> >> Another approach is to make the range of the new Kconfig option
> >> depend on the old option:
> >>
> >> config NEW_OPTION
> >> 	int "your description here"
> >> 	range 1 5 if OLD_OPTION
> >> 	range 0 0 if !OLD_OPTION
> >> 	default 0
> >> 	help
> >> 	  your help here
> >>
> >> Again, adjust to suit depending on what values mean what.
> > 
> > Right this. Except I don't see the !OLD_OPTION working as expected.
> > A 'new' config will not include the old one, so the !OLD_OPTION thing
> > will 'always' be true.
> > 
> > So your:
> > 
> >> @@ -1,8 +1,46 @@
> >>  menu "printk and dmesg options"
> >>
> >> +choice
> >> +       prompt "printk default clock"
> >> +       config PRINTK_TIME_DISABLE
> >> +       bool "Disabled"
> >> +       help
> >> +        Selecting this option disables the time stamps of printk().
> >> +
> >> +       config PRINTK_TIME_LOCAL
> >> +       bool "Local Clock"
> >> +       help
> >> +         Selecting this option causes the time stamps of printk() to be
> >> +         stamped with the unadjusted hardware clock.
> >> +
> >> +       config PRINTK_TIME_BOOT
> >> +       bool "CLOCK_BOOTTIME"
> >> +       help
> >> +         Selecting this option causes the time stamps of printk() to be
> >> +         stamped with the adjusted boottime clock.
> >> +
> >> +       config PRINTK_TIME_MONO
> >> +       bool "CLOCK_MONOTONIC"
> >> +       help
> >> +         Selecting this option causes the time stamps of printk() to be
> >> +         stamped with the adjusted monotonic clock.
> >> +
> >> +       config PRINTK_TIME_REAL
> >> +       bool "CLOCK_REALTIME"
> >> +       help
> >> +         Selecting this option causes the time stamps of printk() to be
> >> +         stamped with the adjusted realtime clock.
> >> +
> >> +endchoice
> >> +
> >>  config PRINTK_TIME
> > 
> > Change that into something like:
> > 
> > config PRINTK_CLOCK
> > 
> > 
> >> -       bool "Show timing information on printks"
> >> +       int "Show time stamp information on printks"
> >>         depends on PRINTK
> >> +       default 0 if PRINTK_TIME_DISABLE
> >> +       default 1 if PRINTK_TIME_LOCAL
> > 
> > And that into:
> > 
> > 	default 1 if PRINTK_TIME_LOCAL || PRINTK_TIME
> > 
> >> +       default 2 if PRINTK_TIME_BOOT
> >> +       default 3 if PRINTK_TIME_MONO
> >> +       default 4 if PRINTK_TIME_REAL
> >> 	  help
> >> 	    Selecting this option causes time stamps of the printk()
> > 
> > Then the old PRINTK_TIME symbol will auto-convert into the new
> > equivalent.
> > 
> 
> I don't think there's an easy code way around this.  Essentially this Kconfig
> code boils down to properly evaluating
> 
> config PRINTK_CLOCK
> 	default 1 if PRINTK_TIME
> 	default 0
> 
> where there is no Kconfig entry for PRINTK_TIME.
> 
> If undefined CONFIG_PRINTK_TIME is used in a config, it is immediately
> scrubbed by the kconfig script so it doesn't "exist" when CONFIG_PRINTK_CLOCK
> is evaluated.  The result of that is CONFIG_PRINT_CLOCK=0.
> 
> I tried
> 
> config PRINTK_TIME
> 	bool "old config option"
> 
> then I end up with both a CONFIG_PRINTK_CLOCK=1 and a CONFIG_PRINTK_TIME=y in
> the resulting config which is confusing.
> 
> I've debated using the other suggestion that Paul made but TBH (sorry
> Paul) it seems like I'm avoiding the real but noisy solution of
> 
> 	s/PRINTK_TIME=y/PRINTK_TIME=1/g
> 
> I'm obviously open to other suggestions...

It is someone else's turn to provide a suggestion.  ;-)

							Thanx, Paul

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2017-08-09 17:28 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-08-07 15:52 [PATCH v4] printk: Add monotonic, boottime, and realtime timestamps Prarit Bhargava
2017-08-07 16:52 ` John Stultz
2017-08-07 17:15   ` Peter Zijlstra
2017-08-07 18:04   ` Prarit Bhargava
2017-08-07 18:47     ` John Stultz
2017-08-07 20:06       ` Prarit Bhargava
2017-08-07 20:36         ` Paul E. McKenney
2017-08-08  8:28           ` Peter Zijlstra
2017-08-08 23:08             ` Prarit Bhargava
2017-08-09 17:28               ` Paul E. McKenney
2017-08-07 16:58 ` Mark Salyzyn
2017-08-07 18:07   ` Prarit Bhargava
2017-08-07 17:18 ` Peter Zijlstra
2017-08-08  0:19 ` Sergey Senozhatsky
2017-08-08 12:32   ` Prarit Bhargava
2017-08-08 13:46   ` Prarit Bhargava

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).