From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751481AbeAZDcT (ORCPT ); Thu, 25 Jan 2018 22:32:19 -0500 Received: from mail1.windriver.com ([147.11.146.13]:49266 "EHLO mail1.windriver.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751324AbeAZDcS (ORCPT ); Thu, 25 Jan 2018 22:32:18 -0500 Subject: Re: [PATCH] kdb: use ktime_get_seconds() instead of ktime_get_ts() To: Baolin Wang , CC: , , , , References: From: Jason Wessel Message-ID: <4c5edb5b-8d48-3fb3-2068-2493df228ed2@windriver.com> Date: Thu, 25 Jan 2018 21:31:59 -0600 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-GB Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 01/25/2018 09:03 PM, Baolin Wang 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 Acked-by: Jason Wessel Thanks.   Added to the kgdb-next branch for the next merge cycle. Jason. > --- > 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];