From mboxrd@z Thu Jan 1 00:00:00 1970 From: Arnd Bergmann Subject: Re: [PATCH v2] drm/msm: Use 64-bit timekeeping Date: Thu, 21 Apr 2016 14:21:28 +0200 Message-ID: <4114093.bsncTYaCqE@wuerfel> References: <20160413095214.GA101605@localhost> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mout.kundenserver.de (mout.kundenserver.de [212.227.126.133]) by gabe.freedesktop.org (Postfix) with ESMTPS id 692216EC99 for ; Thu, 21 Apr 2016 12:21:40 +0000 (UTC) In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Tina Ruchandani Cc: y2038 , Linux Kernel List , dri-devel@lists.freedesktop.org, Thierry Reding List-Id: dri-devel@lists.freedesktop.org T24gVGh1cnNkYXkgMjEgQXByaWwgMjAxNiAwNDozOTowNCBUaW5hIFJ1Y2hhbmRhbmkgd3JvdGU6 Cj4gPj4gd2hpY2ggb25seSBkb2VzIG9uZSA2NC1iaXQgZGl2aXNpb24sIGFuZCBpdCdzIG9uZSB0 aGF0IHdlIGNhbiBwcm9iYWJseQo+ID4+IG9wdGltaXplIG91dCBpbiB0aGUgZnV0dXJlICh3ZSBj YW4gY2hlY2sgaW4ga3RpbWVfbXNfZGVsdGEgd2hldGhlciB0aGUKPiA+PiBkaWZmZXJlbmNlIGlz IG1vcmUgdGhhbiAyXjMyIG5hbm9zZWNvbmRzIGFzIHRoZSBmYXN0IHBhdGgpLgo+IAo+IEl0IGxv b2tzIGxpa2Uga3RpbWVfZGl2bnMgYWxyZWFkeSBoYXMgdGhhdCBvcHRpbWl6YXRpb24gZm9yIDMy LWJpdCBkaXZpc29yLAo+IHNvIHlvdXIgc29sdXRpb24gc2hvdWxkIGF2b2lkIHRoZSA2NC1iaXQg ZGl2aXNpb24uCgpJIG1lYW50IGFuIG9wdGltaXphdGlvbiBmb3IgYSAzMi1iaXQgZGl2aWRlbmQs IG5vdCBkaXZpc29yLAplLmcuIGRvaW5nOgoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3Rp bWUuaCBiL2luY2x1ZGUvbGludXgva3RpbWUuaAppbmRleCAyYjZhMjA0YmQ4ZDQuLjRmYmY3MzVl YzBhZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdGltZS5oCisrKyBiL2luY2x1ZGUvbGlu dXgva3RpbWUuaApAQCAtMTY5LDEzICsxNjksMTcgQEAgc3RhdGljIGlubGluZSBib29sIGt0aW1l X2JlZm9yZShjb25zdCBrdGltZV90IGNtcDEsIGNvbnN0IGt0aW1lX3QgY21wMikKIGV4dGVybiBz NjQgX19rdGltZV9kaXZucyhjb25zdCBrdGltZV90IGt0LCBzNjQgZGl2KTsKIHN0YXRpYyBpbmxp bmUgczY0IGt0aW1lX2Rpdm5zKGNvbnN0IGt0aW1lX3Qga3QsIHM2NCBkaXYpCiB7CisJczY0IG5z ID0ga3QudHY2NDsKKwogCS8qCiAJICogTmVnYXRpdmUgZGl2aXNvcnMgY291bGQgY2F1c2UgYW4g aW5mIGxvb3AsCiAJICogc28gYnVnIG91dCBoZXJlLgogCSAqLwogCUJVR19PTihkaXYgPCAwKTsK LQlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoZGl2KSAmJiAhKGRpdiA+PiAzMikpIHsKLQkJczY0 IG5zID0ga3QudHY2NDsKKworCWlmICgobnMgPj4gMzIpID09IDApIHsKKwkJcmV0dXJuIChzMzIp bnMgLyBkaXY7CisJZWxzZSBpZiAoX19idWlsdGluX2NvbnN0YW50X3AoZGl2KSAmJiAhKGRpdiA+ PiAzMikpIHsKIAkJdTY0IHRtcCA9IG5zIDwgMCA/IC1ucyA6IG5zOwogCiAJCWRvX2Rpdih0bXAs IGRpdik7CgpJIGFsc28ganVzdCBsb29rZWQgYXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGRvX2Rp digpIGluCmluY2x1ZGUvYXNtLWdlbmVyaWMvZGl2NjQuaCwgYW5kIGl0IGFscmVhZHkgZG9lcyB0 aGF0IGZvcgpub24tY29uc3RhbnQgZGl2aXNvcnMsIGJ1dCBJIGRvbid0IHVuZGVyc3RhbmQgX19k aXY2NF9jb25zdDMyKCkKZW5vdWdoIHRvIGtub3cgaWYgdGhlIGNvbXBpbGVyIGVuZCB1cCBkb2lu ZyB0aGUgc2FtZQpvcHRpbWl6YXRpb24gZm9yIHRoZSBjb25zdGFudCBkaXZpc29yIHdlIGhhdmUg aGVyZS4KCglBcm5kCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZl bAo= 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