lib, rtc: Print rtc_time via %ptR[dt][rv]
Subsystems (17)
Andy Shevchenko
reviewerv2 cover lib, rtc: Print rtc_time via %ptR[dt][rv]
At some point I have noticed too many users of struct rtc_time that printing its content field by field.
In this series I introduce %ptR[dt][rv] specifier to make life a bit easier.
There are still users of detailed output of the struct rtc_time, but we can introduce an additional extension for them in the future if needed, otherwise they might be converted to the proposed output format.
Some of the changes slightly modify the output. In those cases we are on the safe side since they are pure debug. Nevertheless I tried to leave numbers to be the same or quite close: in some cases year is printed + 1900, though month is left in the range [0,11] instead of [1,12].
I didn't compile everything there, though I did a basic smoke test on some x86 hardware. So, I rely on kbuild test robot as well :-)
Most of the users currently are RTC drivers, thus the patch series is assumed to go via RTC tree.
The patch series depends on earlier send clean up of lib/vsprintf [1].
[1]: https://www.mail-archive.com/[email protected]/msg1612716.html
Changelog v2:
- split out lib/vsprintf changes to separate series
- build it optionally depending on introduced PRINTK_PEXT_TIMEDATE
- for now support only struct rtc_time
- make an additional letter for different time representations
- make above letter capital to reduce confusion on %ptr vs. %ptR
- drop kdb patch since it's a candidate for time64_t support
Andy Shevchenko (21):
lib/vsprintf: Print time and date in human readable format via %pt
rtc: Switch to use %ptR
rtc: at91rm9200: Switch to use %ptR
rtc: at91sam9: Switch to use %ptR
rtc: m41t80: Switch to use %ptR
rtc: m48t59: Switch to use %ptR
rtc: mcp795: Switch to use %ptR
rtc: pcf50633: Switch to use %ptR
rtc: pic32: Switch to use %ptR
rtc: pm8xxx: Switch to use %ptR
rtc: puv3: Switch to use %ptR
rtc: rk808: Switch to use %ptR
rtc: rx6110: Switch to use %ptR
rtc: rx8025: Switch to use %ptR
rtc: s3c: Switch to use %ptR
rtc: s5m: Switch to use %ptR
rtc: tegra: Switch to use %ptR
ds1302: Switch to use %ptR
Input: hp_sdc_rtc - Switch to use %ptR
mk68/mac: Switch to use %ptR
PM: Switch to use %ptR
Documentation/core-api/printk-formats.rst | 31 +++++++ arch/m68k/Kconfig.machine | 1 + arch/m68k/mac/misc.c | 8 +- drivers/base/power/trace.c | 4 +- drivers/char/Kconfig | 2 + drivers/char/ds1302.c | 39 +++----- drivers/char/rtc.c | 7 +- drivers/input/misc/Kconfig | 1 + drivers/input/misc/hp_sdc_rtc.c | 8 +- drivers/rtc/Kconfig | 1 + drivers/rtc/hctosys.c | 8 +- drivers/rtc/interface.c | 8 +- drivers/rtc/rtc-at91rm9200.c | 15 +--- drivers/rtc/rtc-at91sam9.c | 16 +--- drivers/rtc/rtc-m41t80.c | 6 +- drivers/rtc/rtc-m48t59.c | 8 +- drivers/rtc/rtc-mcp795.c | 18 ++-- drivers/rtc/rtc-pcf50633.c | 8 +- drivers/rtc/rtc-pic32.c | 18 +--- drivers/rtc/rtc-pm8xxx.c | 16 ++-- drivers/rtc/rtc-proc.c | 36 ++------ drivers/rtc/rtc-puv3.c | 18 +--- drivers/rtc/rtc-rk808.c | 20 ++--- drivers/rtc/rtc-rx6110.c | 12 +-- drivers/rtc/rtc-rx8025.c | 19 +--- drivers/rtc/rtc-s3c.c | 21 ++--- drivers/rtc/rtc-s5m.c | 27 ++---- drivers/rtc/rtc-sysfs.c | 12 +-- drivers/rtc/rtc-tegra.c | 30 +------ kernel/power/Kconfig | 1 + lib/Kconfig | 8 ++ lib/test_printf.c | 6 ++ lib/vsprintf.c | 145 ++++++++++++++++++++++++++++++ 33 files changed, 287 insertions(+), 291 deletions(-)
Signature · 1 line
2.15.1
Andy Shevchenko
reviewerPATCH v2 1/21 lib/vsprintf: Print time and date in human readable format via %pt
There are users which print time and date represented by content of struct rtc_time in human readable format.
Instead of open coding that each time introduce %ptR[dt][rv] specifier.
Note, users have to select PRINTK_PEXT_TIMEDATE option in a Kconfig.
--- Documentation/core-api/printk-formats.rst | 31 +++++++ lib/Kconfig | 8 ++ lib/test_printf.c | 6 ++ lib/vsprintf.c | 145 ++++++++++++++++++++++++++++++ 4 files changed, 190 insertions(+)
Documentation/core-api/printk-formats.rst +31 -0
@@ -412,6 +412,37 @@ Examples:: Passed by reference. +Time and date +------------- + +:: + + %pt[R] YYYY-mm-dd HH:MM:SS + %pt[R]d YYYY-mm-dd + %pt[R]t HH:MM:SS + %pt[R][dt] + + R for struct rtc_time + +Note, users have to select PRINTK_PEXT_TIMEDATE option in a Kconfig. + +struct rtc_time +~~~~~~~~~~~~~~~ + +:: + + %ptR[dt][rv] + +For printing date and time as represented by struct rtc_time structure in +human readable format. + +By default year will be incremented by 1900 and month by 1. Use %ptRr (raw) +to suppress this behaviour. On the other hand when %ptRv is applied +validation mechanism will be in use, i.e. numbers out of range will be +replaced by ** or ****. + +Passed by reference. + struct clk ----------
lib/Kconfig +8 -0
@@ -605,3 +605,11 @@ config GENERIC_CMPDI2 config GENERIC_UCMPDI2 bool + +# +# %p optional extensions for vsnprintf(). +# Should be selected by users. +# + +config PRINTK_PEXT_TIMEDATE + bool
lib/test_printf.c +6 -0
@@ -398,6 +398,11 @@ struct_va_format(void) { } +static void __init +struct_rtc_time (void ) +{ +} +static void __init struct_clk (void ) {
@@ -509,6 +514,7 @@ test_pointer(void)uuid ();dentry ();struct_va_format (); +struct_rtc_time ();struct_clk ();bitmap ();netdev_features ();
lib/vsprintf.c +145 -0
175 lines not on this page · raw message
Signature · 1 line
2.15.1
Re: [PATCH v2 01/21] lib/vsprintf: Print time and date in human readable format via %pt
Quoted 6 lines · Andy Shevchenko
There are users which print time and date represented by content of struct
rtc_timein human readable format.Instead of open coding that each time introduce %ptR[dt][rv] specifier.
Note, users have to select
PRINTK_PEXT_TIMEDATEoption in aKconfig.
Not sure this is a great option.
Not just the name, the need to select it.
lib/vsprintf.c
Quoted 1 line
lib/vsprintf.c +0
-0
[]
lib/vsprintf.c char *address_val(char *buf, char *end, const void *addr, const char *fmt) · line 1465
Quoted 5 lines
lib/vsprintf.c +5
-0+static noinline_for_stack +char *date_str(char *buf, char *end, const struct rtc_time *tm, bool v, bool r) +{ +int year = tm->tm_year + (r ?0 :1900 ); +int mon = tm->tm_mon + (r ?0 :1 );
What happens with negative values?
Perhaps these temporaries should be unsigned int.
Quoted 20 lines
lib/vsprintf.c +20
-0+ +if (unlikely (v && (unsigned int )tm->tm_year >200 )) + buf =string (buf, end,"****" , default_str_spec); +else + buf =number (buf, end, year, default_dec04_spec); + +if (buf < end) + *buf ='-' ; + buf++; + +if (unlikely (v && (unsigned int )tm->tm_mon >11 )) + buf =string (buf, end,"**" , default_str_spec); +else + buf =number (buf, end, mon, default_dec02_spec); + +if (buf < end) + *buf ='-' ; + buf++; + +if (unlikely (v && (unsigned int )tm->tm_mday >31 ))
lib/vsprintf.c char *address_val(char *buf, char *end, const void *addr, const char *fmt) · line 1495
Quoted 10 lines
lib/vsprintf.c +10
-0+ buf =string (buf, end,"**" , default_str_spec); + else + buf =number (buf, end, tm->tm_mday, default_dec02_spec); + +return buf; +} + +static noinline_for_stack +char *time_str(char *buf, char *end, const struct rtc_time *tm, bool v, bool r) +{
Maybe use unsigned int temporaries here too for hour, min, sec
lib/vsprintf.c char *address_val(char *buf, char *end, const void *addr, const char *fmt) · line 1505
Quoted 10 lines
lib/vsprintf.c +10
-0+if (unlikely (v && (unsigned int )tm->tm_hour >24 )) + buf =string (buf, end,"**" , default_str_spec); +else + buf =number (buf, end, tm->tm_hour, default_dec02_spec); + +if (buf < end) + *buf =':' ; + buf++; + +if (unlikely (v && (unsigned int )tm->tm_min >59 ))
leap seconds are allowed in the struct
Quoted 16 lines
lib/vsprintf.c +15
-0+ buf =string (buf, end,"**" , default_str_spec); + else + buf =number (buf, end, tm->tm_min, default_dec02_spec); + +if (buf < end) + *buf =':' ; + buf++; + +if (unlikely (v && (unsigned int )tm->tm_sec >59 )) + buf =string (buf, end,"**" , default_str_spec); +else + buf =number (buf, end, tm->tm_sec, default_dec02_spec); + +return buf; +}
Re: [PATCH v2 01/21] lib/vsprintf: Print time and date in human readable format via %pt
Quoted 10 lines · Joe Perches
Quoted 6 lines · Andy Shevchenko
There are users which print time and date represented by content of struct
rtc_timein human readable format.Instead of open coding that each time introduce %ptR[dt][rv] specifier.
Note, users have to select
PRINTK_PEXT_TIMEDATEoption in aKconfig.Not sure this is a great option.
Not just the name, the need to select it.
Bikeshedding first: If you do keep the config option, please use PRINTF, not PRINTK - vsprintf can be and is used by lots of code other than printk.
Well, on the one hand, I like to reduce the size of the kernel when possible and ideally make all new functionality guarded by config options, but OTOH, how much does compiling out the datetime formatters really save? Also, I agree with Joe's concern about the need to select it. Maybe if we had a gcc plugin that did %pFOO validation it could also warn about %pBAR being used without a corresponding config option being set. But we don't have that currently...
Rasmus
Andy Shevchenko
reviewerRe: [PATCH v2 01/21] lib/vsprintf: Print time and date in human readable format via %pt
Quoted 12 lines · Rasmus Villemoes
Quoted 11 lines · Joe Perches
Quoted 9 lines · Andy Shevchenko
There are users which print time and date represented by content of
structrtc_timein human readable format.Instead of open coding that each time introduce %ptR[dt][rv] specifier.
Note, users have to select
PRINTK_PEXT_TIMEDATEoption in aKconfig.
Quoted 7 lines
Quoted 2 lines
Not sure this is a great option.
Not just the name, the need to select it.Bikeshedding first: If you do keep the config option, please use PRINTF,
not PRINTK - vsprintf can be and is used by lots of code other than printk.
OK.
Quoted 4 lines
Well, on the one hand, I like to reduce the size of the kernel when possible and ideally make all new functionality guarded by config options, but OTOH, how much does compiling out the datetime formatters really save?
https://lists.01.org/pipermail/kbuild-all/2017-June/034950.html
I understand that half a year time allows us to increase kernel text size by 750+ bytes unconditionally.
I would really like to not use any option.
Quoted 2 lines
Also, I agree with Joe's concern about the need to select
it.
So, what exactly you are proposing?
Quoted 4 lines
Maybe if we had a gcc plugin that did %pFOO validation it could also
warn about %pBAR being used without a corresponding config option being
set. But we don't have that currently...
We have not, so, it's out of scope. If it's a big impediment, then I'm not the guy who will do the job.
Signature · 2 lines
Andy Shevchenko <[email protected]> Intel Finland Oy
Geert Uytterhoeven
maintainerRe: [PATCH v2 01/21] lib/vsprintf: Print time and date in human readable format via %pt
Quoted 28 lines · Andy Shevchenko
Quoted 12 lines · Rasmus Villemoes
Quoted 11 lines · Joe Perches
Quoted 9 lines · Andy Shevchenko
There are users which print time and date represented by content of
structrtc_timein human readable format.Instead of open coding that each time introduce %ptR[dt][rv] specifier.
Note, users have to select
PRINTK_PEXT_TIMEDATEoption in aKconfig.Quoted 7 lines
Quoted 2 lines
Not sure this is a great option.
Not just the name, the need to select it.Bikeshedding first: If you do keep the config option, please use PRINTF,
not PRINTK - vsprintf can be and is used by lots of code other than printk.OK.
Quoted 4 lines
Well, on the one hand, I like to reduce the size of the kernel when possible and ideally make all new functionality guarded by config options, but OTOH, how much does compiling out the datetime formatters really save?
Quoted 6 lines
https://lists.01.org/pipermail/kbuild-all/2017-June/034950.html
I understand that half a year time allows us to increase kernel text size by 750+ bytes unconditionally.
I would really like to not use any option.
Agreed.
FTR, growth of my atari_defconfig kernel between v4.7 and v4.15:
add/remove: 351/155 grow/shrink: 691/429 up/down: 63095/-38665 (24430) add/remove: 394/156 grow/shrink: 595/709 up/down: 61173/-31092 (30081) add/remove: 1315/711 grow/shrink: 1269/442 up/down: 172871/-92075 (80796) add/remove: 525/266 grow/shrink: 914/510 up/down: 116115/-46240 (69875) add/remove: 443/222 grow/shrink: 906/456 up/down: 77807/-40657 (37150) add/remove: 536/296 grow/shrink: 1043/652 up/down: 97366/-65459 (31907) add/remove: 413/176 grow/shrink: 711/479 up/down: 75678/-41356 (34322) add/remove: 311/145 grow/shrink: 898/438 up/down: 51655/-26851 (24804)
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]
In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
Andy Shevchenko
reviewerRe: [PATCH v2 01/21] lib/vsprintf: Print time and date in human readable format via %pt
Quoted 23 lines · Geert Uytterhoeven
Quoted 10 lines · Andy Shevchenko
Quoted 8 lines · Rasmus Villemoes
On 2018-02-21 00:55, Joe Perches wrote:
Well, on the one hand, I like to reduce the size of the kernel when
possible and ideally make all new functionality guarded by config options, but OTOH, how much does compiling out the datetime formatters
really save?Quoted 6 lines
https://lists.01.org/pipermail/kbuild-all/2017-June/034950.html
I understand that half a year time allows us to increase kernel text size by 750+ bytes unconditionally.
I would really like to not use any option.
Agreed.
FTR, growth of my
atari_defconfigkernel between v4.7 and v4.15:
Quoted 11 lines
add/remove: 351/155 grow/shrink: 691/429 up/down: 63095/-38665 (24430) add/remove: 394/156 grow/shrink: 595/709 up/down: 61173/-31092 (30081) add/remove: 1315/711 grow/shrink: 1269/442 up/down: 172871/-92075 (80796)
add/remove: 525/266 grow/shrink: 914/510 up/down: 116115/-46240 (69875)
add/remove: 443/222 grow/shrink: 906/456 up/down: 77807/-40657 (37150) add/remove: 536/296 grow/shrink: 1043/652 up/down: 97366/-65459 (31907)
add/remove: 413/176 grow/shrink: 711/479 up/down: 75678/-41356 (34322) add/remove: 311/145 grow/shrink: 898/438 up/down: 51655/-26851 (24804)
The concern was emitted from one who cares about tiny config, i.e. i386_tiny_defconfig.
Signature · 2 lines
Andy Shevchenko <[email protected]> Intel Finland Oy
Re: [PATCH v2 01/21] lib/vsprintf: Print time and date in human readable format via %pt
In reply to Joe PerchesQuoted 7 lines · Joe Perches
lib/vsprintf.c char *address_val(char *buf, char *end, const void *addr, const char *fmt) · line 1495
Quoted 3 lines · Andy Shevchenko
lib/vsprintf.c +3
-0+static noinline_for_stack +char *time_str(char *buf, char *end, const struct rtc_time *tm, bool v, bool r) +{Maybe use unsigned int temporaries here too for hour, min, sec
Quoted 13 lines
lib/vsprintf.c char *address_val(char *buf, char *end, const void *addr, const char *fmt) · line 1505
Quoted 10 lines
lib/vsprintf.c +10
-0+if (unlikely (v && (unsigned int )tm->tm_hour >24 )) + buf =string (buf, end,"**" , default_str_spec); +else + buf =number (buf, end, tm->tm_hour, default_dec02_spec); + +if (buf < end) + *buf =':' ; + buf++; + +if (unlikely (v && (unsigned int )tm->tm_min >59 ))leap seconds are allowed in the struct
No, they are not:
https://elixir.bootlin.com/linux/v4.15.4/source/drivers/rtc/rtc-lib.c#L108
Signature · 3 lines
Alexandre Belloni, Bootlin (formerly Free Electrons) Embedded Linux and Kernel engineering https://bootlin.com
Andy Shevchenko
reviewerRe: [PATCH v2 01/21] lib/vsprintf: Print time and date in human readable format via %pt
In reply to Joe PerchesQuoted 11 lines · Joe Perches
Quoted 7 lines · Andy Shevchenko
There are users which print time and date represented by content of struct
rtc_timein human readable format.Instead of open coding that each time introduce %ptR[dt][rv] specifier.
Note, users have to select
PRINTK_PEXT_TIMEDATEoption in aKconfig.Not sure this is a great option.
Not just the name, the need to select it.
kbuildbot and some people complained about + text size.
https://lists.01.org/pipermail/kbuild-all/2017-June/034950.html
I would really like to compile it always.
Quoted 4 lines
lib/vsprintf.c char *address_val(char *buf, char *end, const void *addr, const char *fmt) · line 1465
Quoted 2 lines
lib/vsprintf.c +2
-0+int year = tm->tm_year + (r ?0 :1900 ); +int mon = tm->tm_mon + (r ?0 :1 );What happens with negative values?
Same as before.
Quoted 1 line
Perhaps these temporaries should be unsigned int.
No, the type of them is int, so, I'll keep it int.
Quoted 3 lines
lib/vsprintf.c char *address_val(char *buf, char *end, const void *addr, const char *fmt) · line 1505
Quoted 1 line
lib/vsprintf.c +1
-0+if (unlikely (v && (unsigned int )tm->tm_min >59 ))leap seconds are allowed in the struct
Alexandre answered already, but I would add that this is part of existing ABI, so, I wouldn't go to change this.
Signature · 2 lines
Andy Shevchenko <[email protected]> Intel Finland Oy
Geert Uytterhoeven
maintainerRe: [PATCH v2 01/21] lib/vsprintf: Print time and date in human readable format via %pt
In reply to Andy ShevchenkoHi Andy,
Quoted 4 lines · Andy Shevchenko
There are users which print time and date represented by content of struct
rtc_timein human readable format.Instead of open coding that each time introduce %ptR[dt][rv] specifier.
Thanks for your patch!
Quoted 1 line
Note, users have to select
PRINTK_PEXT_TIMEDATEoption in aKconfig.
Is it worthwhile making this an option?
Quoted 4 lines
Documentation/core-api/printk-formats.rst +0
-0@@ -412,6 +412,37 @@ Examples::
Documentation/core-api/printk-formats.rst Examples:: · line 422
Quoted 10 lines
Documentation/core-api/printk-formats.rst +8
-0Passed by reference. +Time and date +------------- + +:: + + %pt[R] YYYY-mm-dd HH:MM:SS + %pt[R]d YYYY-mm-dd + %pt[R]t HH:MM:SS
[R] suggests the "R" is optional?
But if it's missing, it prints the hex pointer value?
Documentation/core-api/printk-formats.rst Examples:: · line 423
Quoted 1 line
Documentation/core-api/printk-formats.rst +1
-0+ %pt[R][dt]
What's the purpose of this?
Documentation/core-api/printk-formats.rst Examples:: · line 434
Quoted 11 lines
Documentation/core-api/printk-formats.rst +11
-0+ + R for struct rtc_time + +Note, users have to select PRINTK_PEXT_TIMEDATE option in a Kconfig. + +struct rtc_time +~~~~~~~~~~~~~~~ + +:: + + %ptR[dt][rv]
What's the purpose of this paragraph, compared to the previous one?
Quoted 11 lines
Documentation/core-api/printk-formats.rst +6
-0+ +For printing date and time as represented by struct rtc_time structure in +human readable format.@@ -1443,6 +1458,132 @@ char *address_val(char *buf, char *end, const void *addr, const char *fmt) return special_hex_number(buf, end, num, size); } +static noinline_for_stack +char *date_str(char *buf, char *end, const struct rtc_time *tm, bool v, bool r) +{
Documentation/core-api/printk-formats.rst char *address_val(char *buf, char *end, const void *addr, const char *fmt) · line 1473
Quoted 10 lines
Documentation/core-api/printk-formats.rst +10
-0+ int year = tm->tm_year + (r ? 0 : 1900); + int mon = tm->tm_mon + (r ? 0 : 1); + + if (unlikely(v && (unsigned int)tm->tm_year > 200)) + buf = string(buf, end, "****", default_str_spec); + else + buf = number(buf, end, year, default_dec04_spec); + + if (buf < end) + *buf = '-';
Instead of all these checks to avoid overflowing the passed buffer, it may be simpler to format everything in a fixed-size buffer on the stack, and copy whatever will fit in the target buffer at the end.
Quoted 19 lines
Documentation/core-api/printk-formats.rst +19
-0+ buf++; + + if (unlikely(v && (unsigned int)tm->tm_mon > 11)) + buf = string(buf, end, "**", default_str_spec); + else + buf = number(buf, end, mon, default_dec02_spec); + + if (buf < end) + *buf = '-'; + buf++; + + if (unlikely(v && (unsigned int)tm->tm_mday > 31)) + buf = string(buf, end, "**", default_str_spec); + else + buf = number(buf, end, tm->tm_mday, default_dec02_spec); + + return buf; +} +
Documentation/core-api/printk-formats.rst char *address_val(char *buf, char *end, const void *addr, const char *fmt) · line 1502
Quoted 10 lines
Documentation/core-api/printk-formats.rst +10
-0+static noinline_for_stack +char *time_str(char *buf, char *end, const struct rtc_time *tm, bool v, bool r) +{ + if (unlikely(v && (unsigned int)tm->tm_hour > 24)) + buf = string(buf, end, "**", default_str_spec); + else + buf = number(buf, end, tm->tm_hour, default_dec02_spec); + + if (buf < end) + *buf = ':';
Likewise.
Quoted 30 lines
Documentation/core-api/printk-formats.rst +30
-0+ buf++; + + if (unlikely(v && (unsigned int)tm->tm_min > 59)) + buf = string(buf, end, "**", default_str_spec); + else + buf = number(buf, end, tm->tm_min, default_dec02_spec); + + if (buf < end) + *buf = ':'; + buf++; + + if (unlikely(v && (unsigned int)tm->tm_sec > 59)) + buf = string(buf, end, "**", default_str_spec); + else + buf = number(buf, end, tm->tm_sec, default_dec02_spec); + + return buf; +} + +static noinline_for_stack +char *rtc_str(char *buf, char *end, const struct rtc_time *tm, const char *fmt) +{ + bool have_t = true, have_d = true; + bool validate = false; + bool raw = false; + int count = 1; + bool found; + + switch (fmt[++count]) { + case 'd':
Documentation/core-api/printk-formats.rst char *address_val(char *buf, char *end, const void *addr, const char *fmt) · line 1542
Quoted 10 lines
Documentation/core-api/printk-formats.rst +10
-0+ have_t = false; + break; + case 't': + have_d = false; + break; + } + + /* No %pt[dt] supplied */ + if (have_d && have_t) + --count;
First increment count, then rollback.
What about:
switch (fmt[count]) {
case 'd':
have_t = false;
count++;
break;
case 't':
have_d = false;
count++;
break;
}Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]
In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
Andy Shevchenko
reviewerRe: [PATCH v2 01/21] lib/vsprintf: Print time and date in human readable format via %pt
Quoted 7 lines · Geert Uytterhoeven
Hi Andy,
Quoted 3 lines · Andy Shevchenko
There are users which print time and date represented by content of struct
rtc_timein human readable format.
Quoted 8 lines
Quoted 2 lines
Instead of open coding that each time introduce %ptR[dt][rv] specifier.
Thanks for your patch!
Quoted 1 line
Note, users have to select
PRINTK_PEXT_TIMEDATEoption in aKconfig.Is it worthwhile making this an option?
People were complaining before
https://lists.01.org/pipermail/kbuild-all/2017-June/034950.html
Quoted 6 lines
Quoted 6 lines
Documentation/core-api/printk-formats.rst +0
-0@@ -412,6 +412,37 @@ Examples:: Passed by reference.
Quoted 11 lines
Documentation/core-api/printk-formats.rst Examples:: · line 422
Quoted 8 lines
Documentation/core-api/printk-formats.rst +8
-0+Time and date +------------- + +:: + + %pt[R] YYYY-mm-dd HH:MM:SS + %pt[R]d YYYY-mm-dd + %pt[R]t HH:MM:SS[R] suggests the "R" is optional?
But if it's missing, it prints the hex pointer value?
Yes.
Quoted 3 lines
Documentation/core-api/printk-formats.rst Examples:: · line 423
Quoted 1 line
Documentation/core-api/printk-formats.rst +1
-0+ %pt[R][dt]What's the purpose of this?
A place holder to extend.
Quoted 6 lines
Quoted 6 lines
Documentation/core-api/printk-formats.rst +4
-0+ + R for struct rtc_time + +Note, users have to select PRINTK_PEXT_TIMEDATE option in a
Kconfig.
+
Quoted 8 lines
Documentation/core-api/printk-formats.rst Examples:: · line 434
Quoted 6 lines
Documentation/core-api/printk-formats.rst +6
-0+struct rtc_time +~~~~~~~~~~~~~~~ + +:: + + %ptR[dt][rv]What's the purpose of this paragraph, compared to the previous one?
This is first batch to make it working for struct rtc_time. We have several users (and I have some local patches WIP) to print time64_t / timespec64 which would use different letters and paragraphs to explain.
I could remove it and return like it was in v1 (with the exception for new R letter added).
TBH, I don't see much consensus among developers on this topic. I wouldn't like to send a new version until it would be a consensus.
Quoted 11 lines
Quoted 11 lines
Documentation/core-api/printk-formats.rst +2
-0+static noinline_for_stack +char *date_str(char *buf, char *end, const struct rtc_time *tm,bool v, bool r)
Documentation/core-api/printk-formats.rst +8
-0+{ + int year = tm->tm_year + (r ? 0 : 1900); + int mon = tm->tm_mon + (r ? 0 : 1); + + if (unlikely(v && (unsigned int)tm->tm_year > 200)) + buf = string(buf, end, "****", default_str_spec); + else + buf = number(buf, end, year, default_dec04_spec);
Quoted 8 lines
Documentation/core-api/printk-formats.rst
Quoted 3 lines
Documentation/core-api/printk-formats.rst +3
-0+ + if (buf < end) + *buf = '-';Instead of all these checks to avoid overflowing the passed buffer, it may be simpler to format everything in a fixed-size buffer on the stack,
and copy whatever will fit in the target buffer at the end.
I dropped that idea since the most heavier call is number(). We still need to do several of them one way or the other.
So, I really don't see much benefit of doing your way.
Quoted 26 lines
Quoted 12 lines
Documentation/core-api/printk-formats.rst +2
-0+static noinline_for_stack +char *rtc_str(char *buf, char *end, const struct rtc_time *tm,const char *fmt)
Documentation/core-api/printk-formats.rst +9
-0+{ + bool have_t = true, have_d = true; + bool validate = false; + bool raw = false; + int count = 1; + bool found; + + switch (fmt[++count]) { + case 'd':Documentation/core-api/printk-formats.rst
Quoted 10 lines
Documentation/core-api/printk-formats.rst +10
-0+ have_t = false; + break; + case 't': + have_d = false; + break; + } + + /* No %pt[dt] supplied */ + if (have_d && have_t) + --count;First increment count, then rollback.
What about:
Quoted 10 lines
switch (fmt[count]) {
case 'd':
have_t = false;
count++;
break;
case 't':
have_d = false;
count++;
break;
}Or simple:
default:
--count;
break;
?
I really need to come up with the next pile for time64_t which I suppose will require rethinking of format parsing and printing functions here.
Signature · 2 lines
Andy Shevchenko <[email protected]> Intel Finland Oy
Andy Shevchenko
reviewerRe: [PATCH v2 01/21] lib/vsprintf: Print time and date in human readable format via %pt
Quoted 2 lines
TBH, I don't see much consensus among developers on this topic. I wouldn't like to send a new version until it would be a consensus.
I would love to see the comments followed by an agreement from majority of people who are in Cc list here.
Signature · 2 lines
Andy Shevchenko <[email protected]> Intel Finland Oy
Dmitry Torokhov
maintainerRe: [PATCH v2 01/21] lib/vsprintf: Print time and date in human readable format via %pt
Quoted 5 lines · Andy Shevchenko
Quoted 2 lines
TBH, I don't see much consensus among developers on this topic. I wouldn't like to send a new version until it would be a consensus.
I would love to see the comments followed by an agreement from majority of people who are in Cc list here.
Not sure why I am on the CC list, but if we add it at all I do not think this should be guarded by a config option. Otherwise let's add options for %d and %s as well.
Thanks.
Signature · 1 line
Dmitry
Andy Shevchenko
reviewerPATCH v2 2/21 rtc: Switch to use %ptR
In reply to Andy ShevchenkoUse %ptR instead of open coded variant to print content of struct rtc_time in human readable format.
--- drivers/char/Kconfig | 1 + drivers/char/rtc.c | 7 +++---- drivers/rtc/Kconfig | 1 + drivers/rtc/hctosys.c | 8 ++------ drivers/rtc/interface.c | 8 ++------ drivers/rtc/rtc-proc.c | 36 +++++------------------------------- drivers/rtc/rtc-sysfs.c | 12 ++++-------- 7 files changed, 18 insertions(+), 55 deletions(-)
drivers/char/Kconfig +1 -0
@@ -297,6 +297,7 @@ if RTC_LIB=n config RTC tristate "Enhanced Real Time Clock Support (legacy PC RTC driver)" depends on ALPHA || (MIPS && MACH_LOONGSON64) + select PRINTK_PEXT_TIMEDATE ---help--- If you say Y here and create a character special file /dev/rtc with major number 10 and minor number 135 using mknod ("man mknod"), you
drivers/char/rtc.c +3 -4
@@ -1148,11 +1148,10 @@ static int rtc_proc_show(struct seq_file *seq, void *v)* time or for Universal Standard Time (GMT). Probably local though. */ seq_printf (seq, -"rtc_time\t: %02d:%02d:%02d\n" -"rtc_date\t: %04d-%02d-%02d\n" +"rtc_time\t: %ptRt\n" +"rtc_date\t: %ptRd\n" "rtc_epoch\t: %04lu\n" , - tm.tm_hour, tm.tm_min, tm.tm_sec, - tm.tm_year +1900 , tm.tm_mon +1 , tm.tm_mday, epoch); + &tm, &tm, epoch);get_rtc_alm_time (&tm);
drivers/rtc/Kconfig +1 -0
@@ -4,6 +4,7 @@ config RTC_LIB bool + select PRINTK_PEXT_TIMEDATE config RTC_MC146818_LIB bool
drivers/rtc/hctosys.c +2 -6
@@ -51,12 +51,8 @@ static int __init rtc_hctosys(void) err =do_settimeofday64 (&tv64); -dev_info (rtc->dev.parent, -"setting system clock to " -"%d-%02d-%02d %02d:%02d:%02d UTC (%lld)\n" , - tm.tm_year +1900 , tm.tm_mon +1 , tm.tm_mday, - tm.tm_hour, tm.tm_min, tm.tm_sec, - (long long ) tv64.tv_sec); +dev_info (rtc->dev.parent,"setting system clock to %ptR UTC (%lld)\n" , + &tm, (long long )tv64.tv_sec); err_read:rtc_class_close (rtc);
drivers/rtc/interface.c +2 -6
@@ -297,12 +297,8 @@ int __rtc_read_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm) err =rtc_valid_tm (&alarm->time); done: -if (err) { -dev_warn (&rtc->dev,"invalid alarm value: %d-%d-%d %d:%d:%d\n" , - alarm->time.tm_year +1900 , alarm->time.tm_mon +1 , - alarm->time.tm_mday, alarm->time.tm_hour, alarm->time.tm_min, - alarm->time.tm_sec); - } +if (err) +dev_warn (&rtc->dev,"invalid alarm value: %ptR\n" , &alarm->time);return err; }
drivers/rtc/rtc-proc.c +5 -31
@@ -50,41 +50,15 @@ static int rtc_proc_show(struct seq_file *seq, void *offset) err =rtc_read_time (rtc, &tm);if (err ==0 ) {seq_printf (seq, -"rtc_time\t: %02d:%02d:%02d\n" -"rtc_date\t: %04d-%02d-%02d\n" , - tm.tm_hour, tm.tm_min, tm.tm_sec, - tm.tm_year +1900 , tm.tm_mon +1 , tm.tm_mday); +"rtc_time\t: %ptRt\n" +"rtc_date\t: %ptRd\n" , + &tm, &tm); } err =rtc_read_alarm (rtc, &alrm);if (err ==0 ) { -seq_printf (seq,"alrm_time\t: " ); -if ((unsigned int )alrm.time.tm_hour <=24 ) -seq_printf (seq,"%02d:" , alrm.time.tm_hour); -else -seq_printf (seq,"**:" ); -if ((unsigned int )alrm.time.tm_min <=59 ) -seq_printf (seq,"%02d:" , alrm.time.tm_min); -else -seq_printf (seq,"**:" ); -if ((unsigned int )alrm.time.tm_sec <=59 ) -seq_printf (seq,"%02d\n" , alrm.time.tm_sec); -else -seq_printf (seq,"**\n" ); - -seq_printf (seq,"alrm_date\t: " ); -if ((unsigned int )alrm.time.tm_year <=200 ) -seq_printf (seq,"%04d-" , alrm.time.tm_year +1900 ); -else -seq_printf (seq,"****-" ); -if ((unsigned int )alrm.time.tm_mon <=11 ) -seq_printf (seq,"%02d-" , alrm.time.tm_mon +1 ); -else -seq_printf (seq,"**-" ); -if (alrm.time.tm_mday && (unsigned int )alrm.time.tm_mday <=31 ) -seq_printf (seq,"%02d\n" , alrm.time.tm_mday); -else -seq_printf (seq,"**\n" ); +seq_printf (seq,"alrm_time\t: %ptRtv\n" , &alrm.time); +seq_printf (seq,"alrm_date\t: %ptRdv\n" , &alrm.time);seq_printf (seq,"alarm_IRQ\t: %s\n" , alrm.enabled ?"yes" :"no" ); seq_printf(seq, "alrm_pending\t: %s\n",
drivers/rtc/rtc-sysfs.c +4 -8
@@ -39,10 +39,8 @@ date_show(struct device *dev, struct device_attribute *attr, char *buf)struct rtc_time tm; retval =rtc_read_time (to_rtc_device (dev), &tm); -if (retval ==0 ) { - retval =sprintf (buf,"%04d-%02d-%02d\n" , - tm.tm_year +1900 , tm.tm_mon +1 , tm.tm_mday); - } +if (retval ==0 ) + retval =sprintf (buf,"%ptRd\n" , &tm);return retval; }
@@ -55,10 +53,8 @@ time_show(struct device *dev, struct device_attribute *attr, char *buf)struct rtc_time tm; retval =rtc_read_time (to_rtc_device (dev), &tm); -if (retval ==0 ) { - retval =sprintf (buf,"%02d:%02d:%02d\n" , - tm.tm_hour, tm.tm_min, tm.tm_sec); - } +if (retval ==0 ) + retval =sprintf (buf,"%ptRt\n" , &tm);return retval; }
Signature · 1 line
2.15.1
Andy Shevchenko
reviewerPATCH v2 3/21 rtc: at91rm9200: Switch to use %ptR
In reply to Andy ShevchenkoUse %ptR instead of open coded variant to print content of struct rtc_time in human readable format.
--- drivers/rtc/rtc-at91rm9200.c | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-)
drivers/rtc/rtc-at91rm9200.c +4 -11
@@ -147,9 +147,7 @@ static int at91_rtc_readtime(struct device *dev, struct rtc_time *tm) tm->tm_yday =rtc_year_days (tm->tm_mday, tm->tm_mon, tm->tm_year); tm->tm_year = tm->tm_year -1900 ; -dev_dbg (dev,"%s(): %4d-%02d-%02d %02d:%02d:%02d\n" , __func__, -1900 + tm->tm_year, tm->tm_mon, tm->tm_mday, - tm->tm_hour, tm->tm_min, tm->tm_sec); +dev_dbg (dev,"%s(): %ptR\n" , __func__, tm);return 0 ; }
@@ -161,9 +159,7 @@ static int at91_rtc_settime(struct device *dev, struct rtc_time *tm) {unsigned long cr; -dev_dbg (dev,"%s(): %4d-%02d-%02d %02d:%02d:%02d\n" , __func__, -1900 + tm->tm_year, tm->tm_mon, tm->tm_mday, - tm->tm_hour, tm->tm_min, tm->tm_sec); +dev_dbg (dev,"%s(): %ptR\n" , __func__, tm);wait_for_completion (&at91_rtc_upd_rdy);
@@ -209,8 +205,7 @@ static int at91_rtc_readalarm(struct device *dev, struct rtc_wkalrm *alrm) alrm->enabled = (at91_rtc_read_imr () &AT91_RTC_ALARM ) ?1 :0 ; -dev_dbg (dev,"%s(): %02d-%02d %02d:%02d:%02d %sabled\n" , __func__, - tm->tm_mon, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, +dev_dbg (dev,"%s(): %ptR %sabled\n" , __func__, tm, alrm->enabled ?"en" :"dis" );return 0 ;
@@ -247,9 +242,7 @@ static int at91_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm)at91_rtc_write_ier (AT91_RTC_ALARM ); } -dev_dbg (dev,"%s(): %4d-%02d-%02d %02d:%02d:%02d\n" , __func__, - tm.tm_year, tm.tm_mon, tm.tm_mday, tm.tm_hour, - tm.tm_min, tm.tm_sec); +dev_dbg (dev,"%s(): %ptR\n" , __func__, &tm);return 0 ; }
Signature · 1 line
2.15.1
Andy Shevchenko
reviewerPATCH v2 4/21 rtc: at91sam9: Switch to use %ptR
In reply to Andy ShevchenkoUse %ptR instead of open coded variant to print content of struct rtc_time in human readable format.
--- drivers/rtc/rtc-at91sam9.c | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-)
drivers/rtc/rtc-at91sam9.c +4 -12
@@ -124,9 +124,7 @@ static int at91_rtc_readtime(struct device *dev, struct rtc_time *tm)rtc_time_to_tm (offset + secs, tm); -dev_dbg (dev,"%s: %4d-%02d-%02d %02d:%02d:%02d\n" ,"readtime" , -1900 + tm->tm_year, tm->tm_mon, tm->tm_mday, - tm->tm_hour, tm->tm_min, tm->tm_sec); +dev_dbg (dev,"%s: %ptR\n" , __func__, tm);return 0 ; }
@@ -141,9 +139,7 @@ static int at91_rtc_settime(struct device *dev, struct rtc_time *tm)u32 offset, alarm, mr;unsigned long secs; -dev_dbg (dev,"%s: %4d-%02d-%02d %02d:%02d:%02d\n" ,"settime" , -1900 + tm->tm_year, tm->tm_mon, tm->tm_mday, - tm->tm_hour, tm->tm_min, tm->tm_sec); +dev_dbg (dev,"%s: %ptR\n" , __func__, tm); err =rtc_tm_to_time (tm, &secs);if (err !=0 )
@@ -199,9 +195,7 @@ static int at91_rtc_readalarm(struct device *dev, struct rtc_wkalrm *alrm)if (alarm !=ALARM_DISABLED && offset !=0 ) {rtc_time_to_tm (offset + alarm, tm); -dev_dbg (dev,"%s: %4d-%02d-%02d %02d:%02d:%02d\n" ,"readalarm" , -1900 + tm->tm_year, tm->tm_mon, tm->tm_mday, - tm->tm_hour, tm->tm_min, tm->tm_sec); +dev_dbg (dev,"%s: %ptR\n" , __func__, tm);if (rtt_readl (rtc,MR ) &AT91_RTT_ALMIEN ) alrm->enabled =1 ;
@@ -242,9 +236,7 @@ static int at91_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm)if (alrm->enabled)rtt_writel (rtc,MR , mr |AT91_RTT_ALMIEN ); -dev_dbg (dev,"%s: %4d-%02d-%02d %02d:%02d:%02d\n" ,"setalarm" , - tm->tm_year, tm->tm_mon, tm->tm_mday, tm->tm_hour, - tm->tm_min, tm->tm_sec); +dev_dbg (dev,"%s: %ptR\n" , __func__, tm);return 0 ; }
Signature · 1 line
2.15.1
Andy Shevchenko
reviewerPATCH v2 5/21 rtc: m41t80: Switch to use %ptR
In reply to Andy ShevchenkoUse %ptR instead of open coded variant to print content of struct rtc_time in human readable format.
--- drivers/rtc/rtc-m41t80.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-)
drivers/rtc/rtc-m41t80.c +1 -5
@@ -950,11 +950,7 @@ static int m41t80_probe(struct i2c_client *client,if (m41t80_data->features &M41T80_FEATURE_HT ) {m41t80_get_datetime (client, &tm);dev_info (&client->dev,"HT bit was set!\n" ); -dev_info (&client->dev, -"Power Down at %04i-%02i-%02i %02i:%02i:%02i\n" , - tm.tm_year +1900 , - tm.tm_mon +1 , tm.tm_mday, tm.tm_hour, - tm.tm_min, tm.tm_sec); +dev_info (&client->dev,"Power Down at %ptR\n" , &tm); } rc =i2c_smbus_write_byte_data (client,M41T80_REG_ALARM_HOUR , rc & ~M41T80_ALHOUR_HT );
Signature · 1 line
2.15.1
Andy Shevchenko
reviewerPATCH v2 6/21 rtc: m48t59: Switch to use %ptR
In reply to Andy ShevchenkoUse %ptR instead of open coded variant to print content of struct rtc_time in human readable format.
--- drivers/rtc/rtc-m48t59.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-)
drivers/rtc/rtc-m48t59.c +2 -6
@@ -102,9 +102,7 @@ static int m48t59_rtc_read_time(struct device *dev, struct rtc_time *tm)M48T59_CLEAR_BITS (M48T59_CNTL_READ ,M48T59_CNTL );spin_unlock_irqrestore (&m48t59->lock, flags); -dev_dbg (dev,"RTC read time %04d-%02d-%02d %02d/%02d/%02d\n" , - tm->tm_year +1900 , tm->tm_mon, tm->tm_mday, - tm->tm_hour, tm->tm_min, tm->tm_sec); +dev_dbg (dev,"RTC read time %ptR\n" , tm);return rtc_valid_tm (tm); }
@@ -193,9 +191,7 @@ static int m48t59_rtc_readalarm(struct device *dev, struct rtc_wkalrm *alrm)M48T59_CLEAR_BITS (M48T59_CNTL_READ ,M48T59_CNTL );spin_unlock_irqrestore (&m48t59->lock, flags); -dev_dbg (dev,"RTC read alarm time %04d-%02d-%02d %02d/%02d/%02d\n" , - tm->tm_year +1900 , tm->tm_mon, tm->tm_mday, - tm->tm_hour, tm->tm_min, tm->tm_sec); +dev_dbg (dev,"RTC read alarm time %ptR\n" , tm);return rtc_valid_tm (tm); }
Signature · 1 line
2.15.1
Andy Shevchenko
reviewerPATCH v2 7/21 rtc: mcp795: Switch to use %ptR
In reply to Andy ShevchenkoUse %ptR instead of open coded variant to print content of struct rtc_time in human readable format.
--- drivers/rtc/rtc-mcp795.c | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-)
drivers/rtc/rtc-mcp795.c +6 -12
@@ -233,9 +233,7 @@ static int mcp795_set_time(struct device *dev, struct rtc_time *tim)if (ret)return ret; -dev_dbg (dev,"Set mcp795: %04d-%02d-%02d(%d) %02d:%02d:%02d\n" , - tim->tm_year +1900 , tim->tm_mon, tim->tm_mday, - tim->tm_wday, tim->tm_hour, tim->tm_min, tim->tm_sec); +dev_dbg (dev,"Set mcp795: %ptR\n" , tim);return 0 ; }
@@ -258,9 +256,7 @@ static int mcp795_read_time(struct device *dev, struct rtc_time *tim) tim->tm_mon =bcd2bin (data[5 ] &0x1F ) -1 ; tim->tm_year =bcd2bin (data[6 ]) +100 ;/* Assume we are in 20xx */ -dev_dbg (dev,"Read from mcp795: %04d-%02d-%02d(%d) %02d:%02d:%02d\n" , - tim->tm_year +1900 , tim->tm_mon, tim->tm_mday, - tim->tm_wday, tim->tm_hour, tim->tm_min, tim->tm_sec); +dev_dbg (dev,"Read from mcp795: %ptR\n" , tim);return rtc_valid_tm (tim); }
@@ -319,9 +315,8 @@ static int mcp795_set_alarm(struct device *dev, struct rtc_wkalrm *alm)return ret;dev_dbg (dev,"Alarm IRQ armed\n" ); } -dev_dbg (dev,"Set alarm: %02d-%02d(%d) %02d:%02d:%02d\n" , - alm->time.tm_mon, alm->time.tm_mday, alm->time.tm_wday, - alm->time.tm_hour, alm->time.tm_min, alm->time.tm_sec); +dev_dbg (dev,"Set alarm: %ptRdr(%d) %ptRt\n" , + &alm->time, alm->time.tm_wday, &alm->time);return 0 ; }
@@ -345,9 +340,8 @@ static int mcp795_read_alarm(struct device *dev, struct rtc_wkalrm *alm) alm->time.tm_isdst =-1 ; alm->time.tm_yday =-1 ; -dev_dbg (dev,"Read alarm: %02d-%02d(%d) %02d:%02d:%02d\n" , - alm->time.tm_mon, alm->time.tm_mday, alm->time.tm_wday, - alm->time.tm_hour, alm->time.tm_min, alm->time.tm_sec); +dev_dbg (dev,"Read alarm: %ptRdr(%d) %ptRt\n" , + &alm->time, alm->time.tm_wday, &alm->time);return 0 ; }
Signature · 1 line
2.15.1
Andy Shevchenko
reviewerPATCH v2 8/21 rtc: pcf50633: Switch to use %ptR
In reply to Andy ShevchenkoUse %ptR instead of open coded variant to print content of struct rtc_time in human readable format.
--- drivers/rtc/rtc-pcf50633.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-)
drivers/rtc/rtc-pcf50633.c +2 -6
@@ -131,9 +131,7 @@ static int pcf50633_rtc_read_time(struct device *dev, struct rtc_time *tm)pcf2rtc_time (tm, &pcf_tm); -dev_dbg (dev,"RTC_TIME: %u.%u.%u %u:%u:%u\n" , - tm->tm_mday, tm->tm_mon, tm->tm_year, - tm->tm_hour, tm->tm_min, tm->tm_sec); +dev_dbg (dev,"RTC_TIME: %ptRr\n" , tm);return rtc_valid_tm (tm); }
@@ -146,9 +144,7 @@ static int pcf50633_rtc_set_time(struct device *dev, struct rtc_time *tm) rtc =dev_get_drvdata (dev); -dev_dbg (dev,"RTC_TIME: %u.%u.%u %u:%u:%u\n" , - tm->tm_mday, tm->tm_mon, tm->tm_year, - tm->tm_hour, tm->tm_min, tm->tm_sec); +dev_dbg (dev,"RTC_TIME: %ptRr\n" , tm);rtc2pcf_time (&pcf_tm, tm);
Signature · 1 line
2.15.1
Andy Shevchenko
reviewerPATCH v2 9/21 rtc: pic32: Switch to use %ptR
In reply to Andy ShevchenkoUse %ptR instead of open coded variant to print content of struct rtc_time in human readable format.
--- drivers/rtc/rtc-pic32.c | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-)
drivers/rtc/rtc-pic32.c +4 -14
@@ -170,9 +170,7 @@ static int pic32_rtc_gettime(struct device *dev, struct rtc_time *rtc_tm) rtc_tm->tm_year +=100 ; -dev_dbg (dev,"read time %04d.%02d.%02d %02d:%02d:%02d\n" , -1900 + rtc_tm->tm_year, rtc_tm->tm_mon, rtc_tm->tm_mday, - rtc_tm->tm_hour, rtc_tm->tm_min, rtc_tm->tm_sec); +dev_dbg (dev,"read time %ptR\n" , rtc_tm);clk_disable (pdata->clk);return rtc_valid_tm (rtc_tm);
@@ -184,9 +182,7 @@ static int pic32_rtc_settime(struct device *dev, struct rtc_time *tm)void __iomem *base = pdata->reg_base;int year = tm->tm_year -100 ; -dev_dbg (dev,"set time %04d.%02d.%02d %02d:%02d:%02d\n" , -1900 + tm->tm_year, tm->tm_mon, tm->tm_mday, - tm->tm_hour, tm->tm_min, tm->tm_sec); +dev_dbg (dev,"set time %ptR\n" , tm);if (year <0 || year >=100 ) {dev_err (dev,"rtc only supports 100 years\n" );
@@ -224,10 +220,7 @@ static int pic32_rtc_getalarm(struct device *dev, struct rtc_wkalrm *alrm) alrm->enabled = (alm_en &PIC32_RTCALRM_ALRMEN ) ?1 :0 ; -dev_dbg (dev,"getalarm: %d, %04d.%02d.%02d %02d:%02d:%02d\n" , - alm_en, -1900 + alm_tm->tm_year, alm_tm->tm_mon, alm_tm->tm_mday, - alm_tm->tm_hour, alm_tm->tm_min, alm_tm->tm_sec); +dev_dbg (dev,"getalarm: %d, %ptR\n" , alm_en, alm_tm); alm_tm->tm_sec =bcd2bin (alm_tm->tm_sec); alm_tm->tm_min =bcd2bin (alm_tm->tm_min);
@@ -247,10 +240,7 @@ static int pic32_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm)void __iomem *base = pdata->reg_base;clk_enable (pdata->clk); -dev_dbg (dev,"setalarm: %d, %04d.%02d.%02d %02d:%02d:%02d\n" , - alrm->enabled, -1900 + tm->tm_year, tm->tm_mon +1 , tm->tm_mday, - tm->tm_hour, tm->tm_min, tm->tm_sec); +dev_dbg (dev,"setalarm: %d, %ptR\n" , alrm->enabled, tm);writel (0x00 , base +PIC32_ALRMTIME );writel (0x00 , base +PIC32_ALRMDATE );
Signature · 1 line
2.15.1
Andy Shevchenko
reviewerPATCH v2 10/21 rtc: pm8xxx: Switch to use %ptR
In reply to Andy ShevchenkoUse %ptR instead of open coded variant to print content of struct rtc_time in human readable format.
--- drivers/rtc/rtc-pm8xxx.c | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-)
drivers/rtc/rtc-pm8xxx.c +5 -11
@@ -196,9 +196,7 @@ static int pm8xxx_rtc_read_time(struct device *dev, struct rtc_time *tm)return rc; } -dev_dbg (dev,"secs = %lu, h:m:s == %d:%d:%d, d/m/y = %d/%d/%d\n" , - secs, tm->tm_hour, tm->tm_min, tm->tm_sec, - tm->tm_mday, tm->tm_mon, tm->tm_year); +dev_dbg (dev,"secs = %lu, h:m:s == %ptRt, y-m-d = %ptRdr\n" , secs, tm, tm);return 0 ; }
@@ -243,10 +241,8 @@ static int pm8xxx_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm) goto rtc_rw_fail; } -dev_dbg (dev,"Alarm Set for h:r:s=%d:%d:%d, d/m/y=%d/%d/%d\n" , - alarm->time.tm_hour, alarm->time.tm_min, - alarm->time.tm_sec, alarm->time.tm_mday, - alarm->time.tm_mon, alarm->time.tm_year); +dev_dbg (dev,"Alarm Set for h:m:s=%ptRt, y-m-d=%ptRdr\n" , + &alarm->time, &alarm->time); rtc_rw_fail:spin_unlock_irqrestore (&rtc_dd->ctrl_reg_lock, irq_flags);return rc;
@@ -277,10 +273,8 @@ static int pm8xxx_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alarm)return rc; } -dev_dbg (dev,"Alarm set for - h:r:s=%d:%d:%d, d/m/y=%d/%d/%d\n" , - alarm->time.tm_hour, alarm->time.tm_min, - alarm->time.tm_sec, alarm->time.tm_mday, - alarm->time.tm_mon, alarm->time.tm_year); +dev_dbg (dev,"Alarm set for - h:m:s=%ptRt, y-m-d=%ptRdr\n" , + &alarm->time, &alarm->time);return 0 ; }
Signature · 1 line
2.15.1
Andy Shevchenko
reviewerPATCH v2 11/21 rtc: puv3: Switch to use %ptR
In reply to Andy ShevchenkoUse %ptR instead of open coded variant to print content of struct rtc_time in human readable format.
--- drivers/rtc/rtc-puv3.c | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-)
drivers/rtc/rtc-puv3.c +4 -14
@@ -90,9 +90,7 @@ static int puv3_rtc_gettime(struct device *dev, struct rtc_time *rtc_tm) {rtc_time_to_tm (readl (RTC_RCNR ), rtc_tm); -dev_dbg (dev,"read time %02x.%02x.%02x %02x/%02x/%02x\n" , - rtc_tm->tm_year, rtc_tm->tm_mon, rtc_tm->tm_mday, - rtc_tm->tm_hour, rtc_tm->tm_min, rtc_tm->tm_sec); +dev_dbg (dev,"read time %ptRr\n" , rtc_tm);return 0 ; }
@@ -101,9 +99,7 @@ static int puv3_rtc_settime(struct device *dev, struct rtc_time *tm) {unsigned long rtc_count =0 ; -dev_dbg (dev,"set time %02d.%02d.%02d %02d/%02d/%02d\n" , - tm->tm_year, tm->tm_mon, tm->tm_mday, - tm->tm_hour, tm->tm_min, tm->tm_sec); +dev_dbg (dev,"set time %ptRr\n" , tm);rtc_tm_to_time (tm, &rtc_count);writel (rtc_count,RTC_RCNR );
@@ -119,10 +115,7 @@ static int puv3_rtc_getalarm(struct device *dev, struct rtc_wkalrm *alrm) alrm->enabled =readl (RTC_RTSR ) &RTC_RTSR_ALE ; -dev_dbg (dev,"read alarm %02x %02x.%02x.%02x %02x/%02x/%02x\n" , - alrm->enabled, - alm_tm->tm_year, alm_tm->tm_mon, alm_tm->tm_mday, - alm_tm->tm_hour, alm_tm->tm_min, alm_tm->tm_sec); +dev_dbg (dev,"read alarm: %d, %ptRr\n" , alrm->enabled, alm_tm);return 0 ; }
@@ -132,10 +125,7 @@ static int puv3_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm)struct rtc_time *tm = &alrm->time;unsigned long rtcalarm_count =0 ; -dev_dbg (dev,"puv3_rtc_setalarm: %d, %02x/%02x/%02x %02x.%02x.%02x\n" , - alrm->enabled, - tm->tm_mday &0xff , tm->tm_mon &0xff , tm->tm_year &0xff , - tm->tm_hour &0xff , tm->tm_min &0xff , tm->tm_sec); +dev_dbg (dev,"set alarm: %d, %ptRr\n" , alrm->enabled, tm);rtc_tm_to_time (tm, &rtcalarm_count);writel (rtcalarm_count,RTC_RTAR );
Signature · 1 line
2.15.1
Andy Shevchenko
reviewerPATCH v2 12/21 rtc: rk808: Switch to use %ptR
In reply to Andy ShevchenkoUse %ptR instead of open coded variant to print content of struct rtc_time in human readable format.
--- drivers/rtc/rtc-rk808.c | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-)
drivers/rtc/rtc-rk808.c +6 -14
@@ -138,9 +138,7 @@ static int rk808_rtc_readtime(struct device *dev, struct rtc_time *tm) tm->tm_year = (bcd2bin (rtc_data[5 ] &YEARS_REG_MSK )) +100 ; tm->tm_wday =bcd2bin (rtc_data[6 ] &WEEKS_REG_MSK );rockchip_to_gregorian (tm); -dev_dbg (dev,"RTC date/time %4d-%02d-%02d(%d) %02d:%02d:%02d\n" , -1900 + tm->tm_year, tm->tm_mon +1 , tm->tm_mday, - tm->tm_wday, tm->tm_hour, tm->tm_min, tm->tm_sec); +dev_dbg (dev,"RTC date/time %ptRd(%d) %ptRt\n" , tm, tm->tm_wday, tm);return ret; }
@@ -153,9 +151,7 @@ static int rk808_rtc_set_time(struct device *dev, struct rtc_time *tm)u8 rtc_data[NUM_TIME_REGS ];int ret; -dev_dbg (dev,"set RTC date/time %4d-%02d-%02d(%d) %02d:%02d:%02d\n" , -1900 + tm->tm_year, tm->tm_mon +1 , tm->tm_mday, - tm->tm_wday, tm->tm_hour, tm->tm_min, tm->tm_sec); +dev_dbg (dev,"set RTC date/time %ptRd(%d) %ptRt\n" , tm, tm->tm_wday, tm);gregorian_to_rockchip (tm); rtc_data[0 ] =bin2bcd (tm->tm_sec); rtc_data[1 ] =bin2bcd (tm->tm_min);
@@ -216,10 +212,8 @@ static int rk808_rtc_readalarm(struct device *dev, struct rtc_wkalrm *alrm)return ret; } -dev_dbg (dev,"alrm read RTC date/time %4d-%02d-%02d(%d) %02d:%02d:%02d\n" , -1900 + alrm->time.tm_year, alrm->time.tm_mon +1 , - alrm->time.tm_mday, alrm->time.tm_wday, alrm->time.tm_hour, - alrm->time.tm_min, alrm->time.tm_sec); +dev_dbg (dev,"alrm read RTC date/time %ptRd(%d) %ptRt\n" , + &alrm->time, alrm->time.tm_wday, &alrm->time); alrm->enabled = (int_reg &BIT_RTC_INTERRUPTS_REG_IT_ALARM_M ) ?1 :0 ;
@@ -261,10 +255,8 @@ static int rk808_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm)dev_err (dev,"Failed to stop alarm: %d\n" , ret);return ret; } -dev_dbg (dev,"alrm set RTC date/time %4d-%02d-%02d(%d) %02d:%02d:%02d\n" , -1900 + alrm->time.tm_year, alrm->time.tm_mon +1 , - alrm->time.tm_mday, alrm->time.tm_wday, alrm->time.tm_hour, - alrm->time.tm_min, alrm->time.tm_sec); +dev_dbg (dev,"alrm set RTC date/time %ptRd(%d) %ptRt\n" , + &alrm->time, alrm->time.tm_wday, &alrm->time);gregorian_to_rockchip (&alrm->time); alrm_data[0 ] =bin2bcd (alrm->time.tm_sec);
Signature · 1 line
2.15.1
Andy Shevchenko
reviewerPATCH v2 13/21 rtc: rx6110: Switch to use %ptR
In reply to Andy ShevchenkoUse %ptR instead of open coded variant to print content of struct rtc_time in human readable format.
--- drivers/rtc/rtc-rx6110.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-)
drivers/rtc/rtc-rx6110.c +3 -9
@@ -114,9 +114,7 @@ struct rx6110_data {*/ static int rx6110_rtc_tm_to_data (struct rtc_time *tm,u8 *data) { -pr_debug ("%s: date %ds %dm %dh %dmd %dm %dy\n" , __func__, - tm->tm_sec, tm->tm_min, tm->tm_hour, - tm->tm_mday, tm->tm_mon, tm->tm_year); +pr_debug ("%s: date %ptRr\n" , __func__, tm);/* * The year in the RTC is a value between 0 and 99.
@@ -154,9 +152,7 @@ static int rx6110_data_to_rtc_tm(u8 *data, struct rtc_time *tm) tm->tm_mon =bcd2bin (data[RTC_MONTH ] &0x1f ) -1 ; tm->tm_year =bcd2bin (data[RTC_YEAR ]) +100 ; -pr_debug ("%s: date %ds %dm %dh %dmd %dm %dy\n" , __func__, - tm->tm_sec, tm->tm_min, tm->tm_hour, - tm->tm_mday, tm->tm_mon, tm->tm_year); +pr_debug ("%s: date %ptRr\n" , __func__, tm);/* * The year in the RTC is a value between 0 and 99.
@@ -248,9 +244,7 @@ static int rx6110_get_time(struct device *dev, struct rtc_time *tm)if (ret)return ret; -dev_dbg (dev,"%s: date %ds %dm %dh %dmd %dm %dy\n" , __func__, - tm->tm_sec, tm->tm_min, tm->tm_hour, - tm->tm_mday, tm->tm_mon, tm->tm_year); +dev_dbg (dev,"%s: date %ptRr\n" , __func__, tm);return rtc_valid_tm (tm); }
Signature · 1 line
2.15.1
Andy Shevchenko
reviewerPATCH v2 14/21 rtc: rx8025: Switch to use %ptR
In reply to Andy ShevchenkoUse %ptR instead of open coded variant to print content of struct rtc_time in human readable format.
--- drivers/rtc/rtc-rx8025.c | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-)
drivers/rtc/rtc-rx8025.c +4 -15
@@ -193,10 +193,7 @@ static int rx8025_get_time(struct device *dev, struct rtc_time *dt)if (err)return err; -dev_dbg (dev,"%s: read 0x%02x 0x%02x " -"0x%02x 0x%02x 0x%02x 0x%02x 0x%02x\n" , __func__, - date[0 ], date[1 ], date[2 ], date[3 ], date[4 ], - date[5 ], date[6 ]); +dev_dbg (dev,"%s: read %7ph\n" , __func__, date); dt->tm_sec =bcd2bin (date[RX8025_REG_SEC ] &0x7f ); dt->tm_min =bcd2bin (date[RX8025_REG_MIN ] &0x7f );
@@ -210,9 +207,7 @@ static int rx8025_get_time(struct device *dev, struct rtc_time *dt) dt->tm_mon =bcd2bin (date[RX8025_REG_MONTH ] &0x1f ) -1 ; dt->tm_year =bcd2bin (date[RX8025_REG_YEAR ]) +100 ; -dev_dbg (dev,"%s: date %ds %dm %dh %dmd %dm %dy\n" , __func__, - dt->tm_sec, dt->tm_min, dt->tm_hour, - dt->tm_mday, dt->tm_mon, dt->tm_year); +dev_dbg (dev,"%s: date %ptRr\n" , __func__, dt);return rtc_valid_tm (dt); }
@@ -243,10 +238,7 @@ static int rx8025_set_time(struct device *dev, struct rtc_time *dt) date[RX8025_REG_MONTH ] =bin2bcd (dt->tm_mon +1 ); date[RX8025_REG_YEAR ] =bin2bcd (dt->tm_year -100 ); -dev_dbg (dev, -"%s: write 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x\n" , - __func__, - date[0 ], date[1 ], date[2 ], date[3 ], date[4 ], date[5 ], date[6 ]); +dev_dbg (dev,"%s: write %7ph\n" , __func__, date); ret =rx8025_write_regs (rx8025->client,RX8025_REG_SEC ,7 , date);if (ret <0 )
@@ -319,10 +311,7 @@ static int rx8025_read_alarm(struct device *dev, struct rtc_wkalrm *t) t->time.tm_hour =bcd2bin (ald[1 ] &0x1f ) %12 + (ald[1 ] &0x20 ?12 :0 ); -dev_dbg (dev,"%s: date: %ds %dm %dh %dmd %dm %dy\n" , - __func__, - t->time.tm_sec, t->time.tm_min, t->time.tm_hour, - t->time.tm_mday, t->time.tm_mon, t->time.tm_year); +dev_dbg (dev,"%s: date: %ptRr\n" , __func__, t); t->enabled = !!(rx8025->ctrl1 &RX8025_BIT_CTRL1_DALE ); t->pending = (ctrl2 &RX8025_BIT_CTRL2_DAFG ) && t->enabled;
Signature · 1 line
2.15.1
Andy Shevchenko
reviewerPATCH v2 15/21 rtc: s3c: Switch to use %ptR
In reply to Andy ShevchenkoUse %ptR instead of open coded variant to print content of struct rtc_time in human readable format.
--- drivers/rtc/rtc-s3c.c | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-)
drivers/rtc/rtc-s3c.c +5 -16
@@ -225,13 +225,10 @@ static int s3c_rtc_gettime(struct device *dev, struct rtc_time *rtc_tm)s3c_rtc_disable_clk (info); rtc_tm->tm_year +=100 ; - -dev_dbg (dev,"read time %04d.%02d.%02d %02d:%02d:%02d\n" , -1900 + rtc_tm->tm_year, rtc_tm->tm_mon, rtc_tm->tm_mday, - rtc_tm->tm_hour, rtc_tm->tm_min, rtc_tm->tm_sec); - rtc_tm->tm_mon -=1 ; +dev_dbg (dev,"read time %ptR\n" , rtc_tm); +return rtc_valid_tm (rtc_tm); }
@@ -241,9 +238,7 @@ static int s3c_rtc_settime(struct device *dev, struct rtc_time *tm)int year = tm->tm_year -100 ;int ret; -dev_dbg (dev,"set time %04d.%02d.%02d %02d:%02d:%02d\n" , -1900 + tm->tm_year, tm->tm_mon, tm->tm_mday, - tm->tm_hour, tm->tm_min, tm->tm_sec); +dev_dbg (dev,"set time %ptR\n" , tm);/* we get around y2k by simply not supporting it */
@@ -292,10 +287,7 @@ static int s3c_rtc_getalarm(struct device *dev, struct rtc_wkalrm *alrm) alrm->enabled = (alm_en &S3C2410_RTCALM_ALMEN ) ?1 :0 ; -dev_dbg (dev,"read alarm %d, %04d.%02d.%02d %02d:%02d:%02d\n" , - alm_en, -1900 + alm_tm->tm_year, alm_tm->tm_mon, alm_tm->tm_mday, - alm_tm->tm_hour, alm_tm->tm_min, alm_tm->tm_sec); +dev_dbg (dev,"read alarm %d, %ptR\n" , alm_en, alm_tm);/* decode the alarm enable field */ if (alm_en &S3C2410_RTCALM_SECEN )
@@ -329,10 +321,7 @@ static int s3c_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm)int ret;int year = tm->tm_year -100 ; -dev_dbg (dev,"s3c_rtc_setalarm: %d, %04d.%02d.%02d %02d:%02d:%02d\n" , - alrm->enabled, -1900 + tm->tm_year, tm->tm_mon +1 , tm->tm_mday, - tm->tm_hour, tm->tm_min, tm->tm_sec); +dev_dbg (dev,"s3c_rtc_setalarm: %d, %ptR\n" , alrm->enabled, tm); ret =s3c_rtc_enable_clk (info);if (ret)
Signature · 1 line
2.15.1
Andy Shevchenko
reviewerPATCH v2 16/21 rtc: s5m: Switch to use %ptR
In reply to Andy ShevchenkoUse %ptR instead of open coded variant to print content of struct rtc_time in human readable format.
--- drivers/rtc/rtc-s5m.c | 27 ++++++--------------------- 1 file changed, 6 insertions(+), 21 deletions(-)
drivers/rtc/rtc-s5m.c +6 -21
@@ -403,9 +403,7 @@ static int s5m_rtc_read_time(struct device *dev, struct rtc_time *tm)return -EINVAL ; } -dev_dbg (dev,"%s: %d/%d/%d %d:%d:%d(%d)\n" , __func__, -1900 + tm->tm_year,1 + tm->tm_mon, tm->tm_mday, - tm->tm_hour, tm->tm_min, tm->tm_sec, tm->tm_wday); +dev_dbg (dev,"%s: %ptR(%d)\n" , __func__, tm, tm->tm_wday);return rtc_valid_tm (tm); }
@@ -433,9 +431,7 @@ static int s5m_rtc_set_time(struct device *dev, struct rtc_time *tm)if (ret <0 )return ret; -dev_dbg (dev,"%s: %d/%d/%d %d:%d:%d(%d)\n" , __func__, -1900 + tm->tm_year,1 + tm->tm_mon, tm->tm_mday, - tm->tm_hour, tm->tm_min, tm->tm_sec, tm->tm_wday); +dev_dbg (dev,"%s: %ptR(%d)\n" , __func__, tm, tm->tm_wday); ret =regmap_raw_write (info->regmap, info->regs->time, data, info->regs->regs_count);
@@ -487,11 +483,7 @@ static int s5m_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)return -EINVAL ; } -dev_dbg (dev,"%s: %d/%d/%d %d:%d:%d(%d)\n" , __func__, -1900 + alrm->time.tm_year,1 + alrm->time.tm_mon, - alrm->time.tm_mday, alrm->time.tm_hour, - alrm->time.tm_min, alrm->time.tm_sec, - alrm->time.tm_wday); +dev_dbg (dev,"%s: %ptR(%d)\n" , __func__, &alrm->time, alrm->time.tm_wday); ret =s5m_check_peding_alarm_interrupt (info, alrm);
@@ -510,9 +502,7 @@ static int s5m_rtc_stop_alarm(struct s5m_rtc_info *info)return ret;s5m8767_data_to_tm (data, &tm, info->rtc_24hr_mode); -dev_dbg (info->dev,"%s: %d/%d/%d %d:%d:%d(%d)\n" , __func__, -1900 + tm.tm_year,1 + tm.tm_mon, tm.tm_mday, - tm.tm_hour, tm.tm_min, tm.tm_sec, tm.tm_wday); +dev_dbg (info->dev,"%s: %ptR(%d)\n" , __func__, &tm, tm.tm_wday);switch (info->device_type) {case S5M8763X :
@@ -555,9 +545,7 @@ static int s5m_rtc_start_alarm(struct s5m_rtc_info *info)return ret;s5m8767_data_to_tm (data, &tm, info->rtc_24hr_mode); -dev_dbg (info->dev,"%s: %d/%d/%d %d:%d:%d(%d)\n" , __func__, -1900 + tm.tm_year,1 + tm.tm_mon, tm.tm_mday, - tm.tm_hour, tm.tm_min, tm.tm_sec, tm.tm_wday); +dev_dbg (info->dev,"%s: %ptR(%d)\n" , __func__, &tm, tm.tm_wday);switch (info->device_type) {case S5M8763X :
@@ -617,10 +605,7 @@ static int s5m_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)return -EINVAL ; } -dev_dbg (dev,"%s: %d/%d/%d %d:%d:%d(%d)\n" , __func__, -1900 + alrm->time.tm_year,1 + alrm->time.tm_mon, - alrm->time.tm_mday, alrm->time.tm_hour, alrm->time.tm_min, - alrm->time.tm_sec, alrm->time.tm_wday); +dev_dbg (dev,"%s: %ptR(%d)\n" , __func__, &alrm->time, alrm->time.tm_wday); ret =s5m_rtc_stop_alarm (info);if (ret <0 )
Signature · 1 line
2.15.1
Andy Shevchenko
reviewerPATCH v2 17/21 rtc: tegra: Switch to use %ptR
In reply to Andy ShevchenkoUse %ptR instead of open coded variant to print content of struct rtc_time in human readable format.
--- drivers/rtc/rtc-tegra.c | 30 +++--------------------------- 1 file changed, 3 insertions(+), 27 deletions(-)
drivers/rtc/rtc-tegra.c +3 -27
@@ -124,15 +124,7 @@ static int tegra_rtc_read_time(struct device *dev, struct rtc_time *tm)rtc_time_to_tm (sec, tm); -dev_vdbg (dev,"time read as %lu. %d/%d/%d %d:%02u:%02u\n" , - sec, - tm->tm_mon +1 , - tm->tm_mday, - tm->tm_year +1900 , - tm->tm_hour, - tm->tm_min, - tm->tm_sec - ); +dev_vdbg (dev,"time read as %lu. %ptR\n" , sec, tm);return 0 ; }
@@ -150,15 +142,7 @@ static int tegra_rtc_set_time(struct device *dev, struct rtc_time *tm)rtc_tm_to_time (tm, &sec); -dev_vdbg (dev,"time set to %lu. %d/%d/%d %d:%02u:%02u\n" , - sec, - tm->tm_mon+1 , - tm->tm_mday, - tm->tm_year+1900 , - tm->tm_hour, - tm->tm_min, - tm->tm_sec - ); +dev_vdbg (dev,"time set to %lu. %ptR\n" , sec, tm);/* seconds only written if wait succeeded. */ ret =tegra_rtc_wait_while_busy (dev);
@@ -235,15 +219,7 @@ static int tegra_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm)/* if successfully written and alarm is enabled ... */ if (sec) {tegra_rtc_alarm_irq_enable (dev,1 ); - -dev_vdbg (dev,"alarm set as %lu. %d/%d/%d %d:%02u:%02u\n" , - sec, - alarm->time.tm_mon+1 , - alarm->time.tm_mday, - alarm->time.tm_year+1900 , - alarm->time.tm_hour, - alarm->time.tm_min, - alarm->time.tm_sec); +dev_vdbg (dev,"alarm set as %lu. %ptR\n" , sec, &alarm->time); }else {/* disable alarm if 0 or write error. */ dev_vdbg (dev,"alarm disabled\n" );
Signature · 1 line
2.15.1
Andy Shevchenko
reviewerPATCH v2 18/21 ds1302: Switch to use %ptR
In reply to Andy ShevchenkoUse %ptR instead of open coded variant to print content of struct rtc_time in human readable format.
--- drivers/char/Kconfig | 1 + drivers/char/ds1302.c | 39 ++++++++++----------------------------- 2 files changed, 11 insertions(+), 29 deletions(-)
drivers/char/Kconfig +1 -0
@@ -350,6 +350,7 @@ config EFI_RTC config DS1302 tristate "DS1302 RTC support" depends on M32R && (PLAT_M32700UT || PLAT_OPSPUT) + select PRINTK_PEXT_TIMEDATE help If you say Y here and create a character special file /dev/rtc with major number 121 and minor number 0 using mknod ("man mknod"), you
drivers/char/ds1302.c +10 -29
@@ -5,7 +5,7 @@ *! *! DESCRIPTION: Implements an interface for the DS1302 RTC *! -*! Functions exported: ds1302_readreg, ds1302_writereg, ds1302_init, get_rtc_status +*! Functions exported: ds1302_readreg, ds1302_writereg, ds1302_init *! *! --------------------------------------------------------------------------- *!
@@ -258,31 +258,6 @@ static long rtc_ioctl(struct file *file, unsigned int cmd, unsigned long arg) } } -int -get_rtc_status (char *buf) -{ -char *p; -struct rtc_time tm; - - p = buf; - -get_rtc_time (&tm); - -/* -* There is no way to tell if the luser has the RTC set for local -* time or for Universal Standard Time (GMT). Probably local though. -*/ - - p +=sprintf (p, -"rtc_time\t: %02d:%02d:%02d\n" -"rtc_date\t: %04d-%02d-%02d\n" , - tm.tm_hour, tm.tm_min, tm.tm_sec, - tm.tm_year +1900 , tm.tm_mon +1 , tm.tm_mday); - -return p - buf; -} - -/* The various file operations we support. */ static const struct file_operations rtc_fops = {
@@ -299,6 +274,7 @@ static int __initds1302_probe (void) {int retval, res, baur; +struct rtc_time tm; baur=(boot_cpu_data.bus_clock/(2 *1000 *1000 ));
@@ -317,11 +293,16 @@ ds1302_probe(void)/* read RAM byte 0 */ if ((res =in_byte_rtc (0xc1 )) ==MAGIC_PATTERN ) { -char buf[100 ];ds1302_wdisable ();printk ("%s: RTC found.\n" , ds1302_name); -get_rtc_status (buf); -printk (buf); +/* +* There is no way to tell if the luser has the RTC set +* for local time or for Universal Standard Time (GMT). +* Probably local though. +*/ +get_rtc_time (&tm); +printk ("rtc_time\t: %ptRt\n" , &tm); +printk ("rtc_date\t: %ptRd\n" , &tm); retval =1 ; }else {printk ("%s: RTC not found.\n" , ds1302_name);
Signature · 1 line
2.15.1
Andy Shevchenko
reviewerPATCH v2 19/21 Input: hp_sdc_rtc - Switch to use %ptR
In reply to Andy ShevchenkoUse %ptR instead of open coded variant to print content of struct rtc_time in human readable format.
--- drivers/input/misc/Kconfig | 1 + drivers/input/misc/hp_sdc_rtc.c | 8 +++----- 2 files changed, 4 insertions(+), 5 deletions(-)
drivers/input/misc/Kconfig +1 -0
@@ -525,6 +525,7 @@ config HP_SDC_RTC tristate "HP SDC Real Time Clock" depends on (GSC || HP300) && SERIO select HP_SDC + select PRINTK_PEXT_TIMEDATE help Say Y here if you want to support the built-in real time clock of the HP SDC controller.
drivers/input/misc/hp_sdc_rtc.c +3 -5
@@ -441,12 +441,10 @@ static int hp_sdc_rtc_proc_show(struct seq_file *m, void *v)seq_puts (m,"BBRTC\t\t: READ FAILED!\n" ); }else {seq_printf (m, -"rtc_time\t: %02d:%02d:%02d\n" -"rtc_date\t: %04d-%02d-%02d\n" +"rtc_time\t: %ptRt\n" +"rtc_date\t: %ptRd\n" "rtc_epoch\t: %04lu\n" , - tm.tm_hour, tm.tm_min, tm.tm_sec, - tm.tm_year +1900 , tm.tm_mon +1 , - tm.tm_mday, epoch); + &tm, &tm, epoch); }if (hp_sdc_rtc_read_rt (&tv)) {
Signature · 1 line
2.15.1
Andy Shevchenko
reviewerPATCH v2 20/21 mk68/mac: Switch to use %ptR
In reply to Andy ShevchenkoUse %ptR instead of open coded variant to print content of struct rtc_time in human readable format.
--- arch/m68k/Kconfig.machine | 1 + arch/m68k/mac/misc.c | 8 ++------ 2 files changed, 3 insertions(+), 6 deletions(-)
arch/m68k/Kconfig.machine +1 -0
@@ -26,6 +26,7 @@ config MAC bool "Macintosh support" depends on MMU select MMU_MOTOROLA if MMU + select PRINTK_PEXT_TIMEDATE help This option enables support for the Apple Macintosh series of computers (yes, there is experimental support now, at least for part
arch/m68k/mac/misc.c +2 -6
@@ -673,13 +673,9 @@ int mac_hwclk(int op, struct rtc_time *t)unmktime (now,0 , &t->tm_year, &t->tm_mon, &t->tm_mday, &t->tm_hour, &t->tm_min, &t->tm_sec); -pr_debug ("%s: read %04d-%02d-%-2d %02d:%02d:%02d\n" , - __func__, t->tm_year +1900 , t->tm_mon +1 , t->tm_mday, - t->tm_hour, t->tm_min, t->tm_sec); +pr_debug ("%s: read %ptR\n" , __func__, t); }else {/* write */ -pr_debug ("%s: tried to write %04d-%02d-%-2d %02d:%02d:%02d\n" , - __func__, t->tm_year +1900 , t->tm_mon +1 , t->tm_mday, - t->tm_hour, t->tm_min, t->tm_sec); +pr_debug ("%s: tried to write %ptR\n" , __func__, t); now =mktime (t->tm_year +1900 , t->tm_mon +1 , t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);
Signature · 1 line
2.15.1
Geert Uytterhoeven
maintainerRe: [PATCH v2 20/21] mk68/mac: Switch to use %ptR
Hi Andy,
Quoted 15 lines · Andy Shevchenko
Use %ptR instead of open coded variant to print content of struct
rtc_timein human readable format.Cc Geert Uytterhoeven <[email protected]>Signed-off-by Andy Shevchenko <[email protected]>--- arch/m68k/Kconfig.machine | 1 + arch/m68k/mac/misc.c | 8 ++------ 2 files changed, 3 insertions(+), 6 deletions(-)arch/m68k/Kconfig.machine +0
-0
arch/m68k/Kconfig.machine config MAC · line 29
Quoted 4 lines
arch/m68k/Kconfig.machine +1
-0@@ -26,6 +26,7 @@ config MAC bool "Macintosh support" depends on MMU select MMU_MOTOROLA if MMU + select PRINTK_PEXT_TIMEDATE
Yeah, now you have to track whatever code uses the new %p extension...
Note that the user below uses pr_debug(), so technically it depends on DYNAMIC_DEBUG, or (more likely) someone manually inserting "#define DEBUG" at the top of the file for a short debug session ;-)
Quoted 8 lines
arch/m68k/mac/misc.c +0
-2@@ -673,13 +673,9 @@ int mac_hwclk(int op, struct rtc_time *t)unmktime (now,0 , &t->tm_year, &t->tm_mon, &t->tm_mday, &t->tm_hour, &t->tm_min, &t->tm_sec); - pr_debug("%s: read %04d-%02d-%-2d %02d:%02d:%02d\n", - __func__, t->tm_year + 1900, t->tm_mon + 1, t->tm_mday,
arch/m68k/mac/misc.c int mac_hwclk(int op, struct rtc_time *t) · line 681
Quoted 10 lines
arch/m68k/mac/misc.c +2
-4- t->tm_hour, t->tm_min, t->tm_sec); +pr_debug ("%s: read %ptR\n" , __func__, t); }else {/* write */ -pr_debug ("%s: tried to write %04d-%02d-%-2d %02d:%02d:%02d\n" , - __func__, t->tm_year +1900 , t->tm_mon +1 , t->tm_mday, - t->tm_hour, t->tm_min, t->tm_sec); +pr_debug ("%s: tried to write %ptR\n" , __func__, t); now =mktime (t->tm_year +1900 , t->tm_mon +1 , t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]
In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
Andy Shevchenko
reviewerRe: [PATCH v2 20/21] mk68/mac: Switch to use %ptR
Quoted 3 lines · Geert Uytterhoeven
Quoted 1 line
+ select
PRINTK_PEXT_TIMEDATEYeah, now you have to track whatever code uses the new %p extension...
I don't like this. People had an opinion that 750+ bytes is way too much for tiny kernel configuration.
Signature · 2 lines
Andy Shevchenko <[email protected]> Intel Finland Oy
Andy Shevchenko
reviewerPATCH v2 21/21 PM: Switch to use %ptR
In reply to Andy ShevchenkoUse %ptR instead of open coded variant to print content of struct rtc_time in human readable format.
--- drivers/base/power/trace.c | 4 +--- kernel/power/Kconfig | 1 + 2 files changed, 2 insertions(+), 3 deletions(-)
drivers/base/power/trace.c +1 -3
@@ -118,9 +118,7 @@ static unsigned int read_magic_time(void)unsigned int val;mc146818_get_time (&time); -pr_info ("RTC time: %2d:%02d:%02d, date: %02d/%02d/%02d\n" , - time.tm_hour, time.tm_min, time.tm_sec, - time.tm_mon +1 , time.tm_mday, time.tm_year %100 ); +pr_info ("RTC time: %ptRt, date: %ptRd\n" , &time, &time); val = time.tm_year;/* 100 years */ if (val >100 ) val -=100 ;
kernel/power/Kconfig +1 -0
@@ -220,6 +220,7 @@ config PM_TRACE_RTC depends on PM_SLEEP_DEBUG depends on X86 select PM_TRACE + select PRINTK_PEXT_TIMEDATE ---help--- This enables some cheesy code to save the last PM event point in the RTC across reboots, so that you can debug a machine that just hangs
Signature · 1 line
2.15.1