On Fri, Jan 26, 2018 at 4:03 AM, Baolin Wang <baolin.w...@linaro.org> wrote: > The kdb code will print the monotonic time by ktime_get_ts(), but > the ktime_get_ts() will be protected by a sequence lock, that will > introduce one deadlock risk if the lock was already held in the > context from which we entered the debugger. > > Since kdb is only interested in the second field, we can use the > ktime_get_seconds() to get the monotonic time without a lock, > moreover we can remove the 'struct timespec', which is not y2038 > safe. > > Signed-off-by: Baolin Wang <baolin.w...@linaro.org> > --- > kernel/debug/kdb/kdb_main.c | 4 +--- > 1 file changed, 1 insertion(+), 3 deletions(-) > > diff --git a/kernel/debug/kdb/kdb_main.c b/kernel/debug/kdb/kdb_main.c > index 69e70f4..f0fc6f7 100644 > --- a/kernel/debug/kdb/kdb_main.c > +++ b/kernel/debug/kdb/kdb_main.c > @@ -2486,10 +2486,8 @@ static int kdb_kill(int argc, const char **argv) > */ > static void kdb_sysinfo(struct sysinfo *val) > { > - struct timespec uptime; > - ktime_get_ts(&uptime); > memset(val, 0, sizeof(*val)); > - val->uptime = uptime.tv_sec; > + val->uptime = ktime_get_seconds(); > val->loads[0] = avenrun[0]; > val->loads[1] = avenrun[1]; > val->loads[2] = avenrun[2];
Using ktime_get_seconds() avoids locking problems, but I wonder what would happen if we trigger the 'WARN_ON(timekeeping_suspended)' from kdb. Is that a problem? If it is, we have to use ktime_get_mono_fast_ns() and div_u64() instead. Arnd