From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752225AbcDUMVp (ORCPT ); Thu, 21 Apr 2016 08:21:45 -0400 Received: from mout.kundenserver.de ([212.227.126.133]:51893 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751555AbcDUMVn (ORCPT ); Thu, 21 Apr 2016 08:21:43 -0400 From: Arnd Bergmann To: Tina Ruchandani Cc: y2038 , dri-devel@lists.freedesktop.org, Linux Kernel List , Wentao Xu , Thierry Reding , Hai Li Subject: Re: [PATCH v2] drm/msm: Use 64-bit timekeeping Date: Thu, 21 Apr 2016 14:21:28 +0200 Message-ID: <4114093.bsncTYaCqE@wuerfel> User-Agent: KMail/4.11.5 (Linux/3.16.0-10-generic; KDE/4.11.5; x86_64; ; ) In-Reply-To: References: <20160413095214.GA101605@localhost> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" X-Provags-ID: V03:K0:68Hhe/z5n7v4EYerj0Hna03b0KYx7GdDgjPVAMvCFRFAALTuQew pb0HOZC7w5bXtgSP5hCXNlqST8wd3EtZGH3Dy+AdN5ogJDnPU/ix7Cj0bAe0MmVjXDOAC/j 5DO1qsEqXOd9KnDppVNg5+PiuVfh20Kq8CKo/MayK/sYC3u0RnR8dMv7zEJRVZniUrZclnv 3MvRsfUC6mR+t6RPcA51w== X-UI-Out-Filterresults: notjunk:1;V01:K0:2VfXhGFgK9s=:NiJ0nwkyTH4Uts4wCLIp8g zqB6WBJehmuiqf6oqgIl/j98Ydamiy8Ql14+DpXYFTlsU06bQ7IuWOjgYJNkYBTBDGlzcX0Fq d7RYPj3NeJGYCxYt4EBWJ4sx6gLqaJuujP4Qz5Ssg3+3BDYDDm34oZC1KYtya/wznSSj4rB++ +avsUWz4hx2t6infWDJBm/eeHeBLSCDOuNbjK2LBqSfX9isS2TGqbWkwdF0ixzCQQ2goiLb6t AdxhIAQkxfCAwhsCJwX2CBD6wmz5McxKAVa5oXyvJGtJRkOWa12PDfRzGhvEhYi9B6vxUSPeB +vpDH6DZ1QwQ3K9lmVYbPoF5tFUGSqyQ+8bt3UIPHAzxJC7rrl2Ukg3dhPB0ZCBrdZ17SDHCA uZQOx4/Fk6yooIuxPKXPWEVYpEG0OjhGfMiHFn4jd1S5G5wSc85jb4zHkrMp9CNGxsD4npdyW DOkechiVhciS2CNFVV9VffNvXp2hgX5GtYCvA9Uen0o4uhXvtNrlCJtZCxaN9WY6IGVxQVTtv G8TTN5R2aB/RPejzeUK+vwtO0gBvKuPlBUVIsI22KLS8EZUZu85hnPc/nTubzXl5AvQN4i57W CYmqevxOhdg8zTB2FB+d1n4uhQDcwVUNukaLDYRPWIDSXDZ9RVYCw6gJVDr0NECsg38IvnKdD +0Zn5zaNARG+uiypXjGw2gFbcLuUBiejUf2sxpVwHhbyZyhTkRFftdH4EubeEhwCZyPeFtxad TezBSqfJ0eBybBI4 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thursday 21 April 2016 04:39:04 Tina Ruchandani wrote: > >> which only does one 64-bit division, and it's one that we can probably > >> optimize out in the future (we can check in ktime_ms_delta whether the > >> difference is more than 2^32 nanoseconds as the fast path). > > It looks like ktime_divns already has that optimization for 32-bit divisor, > so your solution should avoid the 64-bit division. I meant an optimization for a 32-bit dividend, not divisor, e.g. doing: diff --git a/include/linux/ktime.h b/include/linux/ktime.h index 2b6a204bd8d4..4fbf735ec0af 100644 --- a/include/linux/ktime.h +++ b/include/linux/ktime.h @@ -169,13 +169,17 @@ static inline bool ktime_before(const ktime_t cmp1, const ktime_t cmp2) extern s64 __ktime_divns(const ktime_t kt, s64 div); static inline s64 ktime_divns(const ktime_t kt, s64 div) { + s64 ns = kt.tv64; + /* * Negative divisors could cause an inf loop, * so bug out here. */ BUG_ON(div < 0); - if (__builtin_constant_p(div) && !(div >> 32)) { - s64 ns = kt.tv64; + + if ((ns >> 32) == 0) { + return (s32)ns / div; + else if (__builtin_constant_p(div) && !(div >> 32)) { u64 tmp = ns < 0 ? -ns : ns; do_div(tmp, div); I also just looked at the implementation of do_div() in include/asm-generic/div64.h, and it already does that for non-constant divisors, but I don't understand __div64_const32() enough to know if the compiler end up doing the same optimization for the constant divisor we have here. Arnd