Commit 80ae5529 authored by Petr Mladek's avatar Petr Mladek

Merge branch 'for-5.14-vsprintf-pts' into for-linus

parents 4249cb7d 2f9e0f8c
...@@ -514,9 +514,10 @@ Time and date ...@@ -514,9 +514,10 @@ Time and date
:: ::
%pt[RT] YYYY-mm-ddTHH:MM:SS %pt[RT] YYYY-mm-ddTHH:MM:SS
%pt[RT]s YYYY-mm-dd HH:MM:SS
%pt[RT]d YYYY-mm-dd %pt[RT]d YYYY-mm-dd
%pt[RT]t HH:MM:SS %pt[RT]t HH:MM:SS
%pt[RT][dt][r] %pt[RT][dt][r][s]
For printing date and time as represented by:: For printing date and time as represented by::
...@@ -528,6 +529,10 @@ in human readable format. ...@@ -528,6 +529,10 @@ in human readable format.
By default year will be incremented by 1900 and month by 1. By default year will be incremented by 1900 and month by 1.
Use %pt[RT]r (raw) to suppress this behaviour. Use %pt[RT]r (raw) to suppress this behaviour.
The %pt[RT]s (space) will override ISO 8601 separator by using ' ' (space)
instead of 'T' (Capital T) between date and time. It won't have any effect
when date or time is omitted.
Passed by reference. Passed by reference.
struct clk struct clk
......
...@@ -917,7 +917,6 @@ static int tegra_xusb_load_firmware(struct tegra_xusb *tegra) ...@@ -917,7 +917,6 @@ static int tegra_xusb_load_firmware(struct tegra_xusb *tegra)
struct xhci_op_regs __iomem *op; struct xhci_op_regs __iomem *op;
unsigned long timeout; unsigned long timeout;
time64_t timestamp; time64_t timestamp;
struct tm time;
u64 address; u64 address;
u32 value; u32 value;
int err; int err;
...@@ -1014,11 +1013,8 @@ static int tegra_xusb_load_firmware(struct tegra_xusb *tegra) ...@@ -1014,11 +1013,8 @@ static int tegra_xusb_load_firmware(struct tegra_xusb *tegra)
} }
timestamp = le32_to_cpu(header->fwimg_created_time); timestamp = le32_to_cpu(header->fwimg_created_time);
time64_to_tm(timestamp, 0, &time);
dev_info(dev, "Firmware timestamp: %ld-%02d-%02d %02d:%02d:%02d UTC\n", dev_info(dev, "Firmware timestamp: %ptTs UTC\n", &timestamp);
time.tm_year + 1900, time.tm_mon + 1, time.tm_mday,
time.tm_hour, time.tm_min, time.tm_sec);
return 0; return 0;
} }
......
...@@ -19,19 +19,6 @@ ...@@ -19,19 +19,6 @@
/* /sys/fs/<nilfs>/ */ /* /sys/fs/<nilfs>/ */
static struct kset *nilfs_kset; static struct kset *nilfs_kset;
#define NILFS_SHOW_TIME(time_t_val, buf) ({ \
struct tm res; \
int count = 0; \
time64_to_tm(time_t_val, 0, &res); \
res.tm_year += 1900; \
res.tm_mon += 1; \
count = scnprintf(buf, PAGE_SIZE, \
"%ld-%.2d-%.2d %.2d:%.2d:%.2d\n", \
res.tm_year, res.tm_mon, res.tm_mday, \
res.tm_hour, res.tm_min, res.tm_sec);\
count; \
})
#define NILFS_DEV_INT_GROUP_OPS(name, parent_name) \ #define NILFS_DEV_INT_GROUP_OPS(name, parent_name) \
static ssize_t nilfs_##name##_attr_show(struct kobject *kobj, \ static ssize_t nilfs_##name##_attr_show(struct kobject *kobj, \
struct attribute *attr, char *buf) \ struct attribute *attr, char *buf) \
...@@ -576,7 +563,7 @@ nilfs_segctor_last_seg_write_time_show(struct nilfs_segctor_attr *attr, ...@@ -576,7 +563,7 @@ nilfs_segctor_last_seg_write_time_show(struct nilfs_segctor_attr *attr,
ctime = nilfs->ns_ctime; ctime = nilfs->ns_ctime;
up_read(&nilfs->ns_segctor_sem); up_read(&nilfs->ns_segctor_sem);
return NILFS_SHOW_TIME(ctime, buf); return sysfs_emit(buf, "%ptTs\n", &ctime);
} }
static ssize_t static ssize_t
...@@ -604,7 +591,7 @@ nilfs_segctor_last_nongc_write_time_show(struct nilfs_segctor_attr *attr, ...@@ -604,7 +591,7 @@ nilfs_segctor_last_nongc_write_time_show(struct nilfs_segctor_attr *attr,
nongc_ctime = nilfs->ns_nongc_ctime; nongc_ctime = nilfs->ns_nongc_ctime;
up_read(&nilfs->ns_segctor_sem); up_read(&nilfs->ns_segctor_sem);
return NILFS_SHOW_TIME(nongc_ctime, buf); return sysfs_emit(buf, "%ptTs\n", &nongc_ctime);
} }
static ssize_t static ssize_t
...@@ -724,7 +711,7 @@ nilfs_superblock_sb_write_time_show(struct nilfs_superblock_attr *attr, ...@@ -724,7 +711,7 @@ nilfs_superblock_sb_write_time_show(struct nilfs_superblock_attr *attr,
sbwtime = nilfs->ns_sbwtime; sbwtime = nilfs->ns_sbwtime;
up_read(&nilfs->ns_sem); up_read(&nilfs->ns_sem);
return NILFS_SHOW_TIME(sbwtime, buf); return sysfs_emit(buf, "%ptTs\n", &sbwtime);
} }
static ssize_t static ssize_t
......
...@@ -2488,7 +2488,6 @@ static void kdb_sysinfo(struct sysinfo *val) ...@@ -2488,7 +2488,6 @@ static void kdb_sysinfo(struct sysinfo *val)
static int kdb_summary(int argc, const char **argv) static int kdb_summary(int argc, const char **argv)
{ {
time64_t now; time64_t now;
struct tm tm;
struct sysinfo val; struct sysinfo val;
if (argc) if (argc)
...@@ -2502,13 +2501,7 @@ static int kdb_summary(int argc, const char **argv) ...@@ -2502,13 +2501,7 @@ static int kdb_summary(int argc, const char **argv)
kdb_printf("domainname %s\n", init_uts_ns.name.domainname); kdb_printf("domainname %s\n", init_uts_ns.name.domainname);
now = __ktime_get_real_seconds(); now = __ktime_get_real_seconds();
time64_to_tm(now, 0, &tm); kdb_printf("date %ptTs tz_minuteswest %d\n", &now, sys_tz.tz_minuteswest);
kdb_printf("date %04ld-%02d-%02d %02d:%02d:%02d "
"tz_minuteswest %d\n",
1900+tm.tm_year, tm.tm_mon+1, tm.tm_mday,
tm.tm_hour, tm.tm_min, tm.tm_sec,
sys_tz.tz_minuteswest);
kdb_sysinfo(&val); kdb_sysinfo(&val);
kdb_printf("uptime "); kdb_printf("uptime ");
if (val.uptime > (24*60*60)) { if (val.uptime > (24*60*60)) {
......
...@@ -528,6 +528,11 @@ time_and_date(void) ...@@ -528,6 +528,11 @@ time_and_date(void)
test("0119-00-04T15:32:23", "%ptTr", &t); test("0119-00-04T15:32:23", "%ptTr", &t);
test("15:32:23|2019-01-04", "%ptTt|%ptTd", &t, &t); test("15:32:23|2019-01-04", "%ptTt|%ptTd", &t, &t);
test("15:32:23|0119-00-04", "%ptTtr|%ptTdr", &t, &t); test("15:32:23|0119-00-04", "%ptTtr|%ptTdr", &t, &t);
test("2019-01-04 15:32:23", "%ptTs", &t);
test("0119-00-04 15:32:23", "%ptTsr", &t);
test("15:32:23|2019-01-04", "%ptTts|%ptTds", &t, &t);
test("15:32:23|0119-00-04", "%ptTtrs|%ptTdrs", &t, &t);
} }
static void __init static void __init
......
...@@ -1798,7 +1798,8 @@ char *rtc_str(char *buf, char *end, const struct rtc_time *tm, ...@@ -1798,7 +1798,8 @@ char *rtc_str(char *buf, char *end, const struct rtc_time *tm,
struct printf_spec spec, const char *fmt) struct printf_spec spec, const char *fmt)
{ {
bool have_t = true, have_d = true; bool have_t = true, have_d = true;
bool raw = false; bool raw = false, iso8601_separator = true;
bool found = true;
int count = 2; int count = 2;
if (check_pointer(&buf, end, tm, spec)) if (check_pointer(&buf, end, tm, spec))
...@@ -1815,14 +1816,25 @@ char *rtc_str(char *buf, char *end, const struct rtc_time *tm, ...@@ -1815,14 +1816,25 @@ char *rtc_str(char *buf, char *end, const struct rtc_time *tm,
break; break;
} }
raw = fmt[count] == 'r'; do {
switch (fmt[count++]) {
case 'r':
raw = true;
break;
case 's':
iso8601_separator = false;
break;
default:
found = false;
break;
}
} while (found);
if (have_d) if (have_d)
buf = date_str(buf, end, tm, raw); buf = date_str(buf, end, tm, raw);
if (have_d && have_t) { if (have_d && have_t) {
/* Respect ISO 8601 */
if (buf < end) if (buf < end)
*buf = 'T'; *buf = iso8601_separator ? 'T' : ' ';
buf++; buf++;
} }
if (have_t) if (have_t)
...@@ -2261,7 +2273,7 @@ early_param("no_hash_pointers", no_hash_pointers_enable); ...@@ -2261,7 +2273,7 @@ early_param("no_hash_pointers", no_hash_pointers_enable);
* - 'd[234]' For a dentry name (optionally 2-4 last components) * - 'd[234]' For a dentry name (optionally 2-4 last components)
* - 'D[234]' Same as 'd' but for a struct file * - 'D[234]' Same as 'd' but for a struct file
* - 'g' For block_device name (gendisk + partition number) * - 'g' For block_device name (gendisk + partition number)
* - 't[RT][dt][r]' For time and date as represented by: * - 't[RT][dt][r][s]' For time and date as represented by:
* R struct rtc_time * R struct rtc_time
* T time64_t * T time64_t
* - 'C' For a clock, it prints the name (Common Clock Framework) or address * - 'C' For a clock, it prints the name (Common Clock Framework) or address
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment