On 25 January 2018 at 16:55, Arnd Bergmann <a...@arndb.de> wrote: > On Thu, Jan 25, 2018 at 9:05 AM, Baolin Wang <baolin.w...@linaro.org> wrote: >> @@ -2554,7 +2554,7 @@ static int kdb_summary(int argc, const char **argv) >> kdb_printf("domainname %s\n", init_uts_ns.name.domainname); >> kdb_printf("ccversion %s\n", __stringify(CCVERSION)); >> >> - now = __current_kernel_time(); >> + now = current_kernel_time64(); >> kdb_gmtime(&now, &tm); >> kdb_printf("date %04d-%02d-%02d %02d:%02d:%02d " >> "tz_minuteswest %d\n", > > Thanks for picking this one up again, we should find a permanent solution > here. > Unfortunately you patch is incorrect, as we cannot safely call > current_kernel_time64() > from NMI context.
Ah, thanks for pointing out the issue, since I do not know what context the function will be called in kdb. > > The __ prefix on __current_kernel_time() indicates that this is a special call > that intentionally doesn't read the hardware time to avoid taking locks that > might already be held in the context from which we entered the debugger. > > See https://patchwork.kernel.org/patch/10002097/ for my earlier patch. This patch had not been merged into mainline? > >> @@ -2521,8 +2521,8 @@ static void kdb_gmtime(struct timespec *tv, struct >> kdb_tm *tm) >> */ >> static void kdb_sysinfo(struct sysinfo *val) >> { >> - struct timespec uptime; >> - ktime_get_ts(&uptime); >> + struct timespec64 uptime; >> + ktime_get_ts64(&uptime); >> memset(val, 0, sizeof(*val)); >> val->uptime = uptime.tv_sec; >> val->loads[0] = avenrun[0]; > > This function appears to have the same problem, except that it is a > preexisting > issue in this case. I had not noticed this earlier, but we must fix it > in a similar > manner to the other one. OK. -- Baolin.wang Best Regards