Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754212AbcKPVFl (ORCPT ); Wed, 16 Nov 2016 16:05:41 -0500 Received: from mail-db5eur01on0081.outbound.protection.outlook.com ([104.47.2.81]:9856 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753265AbcKPVFi (ORCPT ); Wed, 16 Nov 2016 16:05:38 -0500 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=cmetcalf@mellanox.com; Subject: Re: [PATCH] clocksource_cyc2ns: avoid overflowing 64 bits To: John Stultz References: <1479315472-5245-1-git-send-email-cmetcalf@mellanox.com> CC: Thomas Gleixner , Salman Qazi , "Paul Turner" , Tony Lindgren , Steven Miao , lkml From: Chris Metcalf Message-ID: Date: Wed, 16 Nov 2016 14:30:04 -0500 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [12.216.194.146] X-ClientProxiedBy: BN6PR07CA0035.namprd07.prod.outlook.com (10.172.104.21) To AM4PR0501MB2754.eurprd05.prod.outlook.com (10.172.216.10) X-Microsoft-Exchange-Diagnostics: 1;AM4PR0501MB2754;2:GVx3hCfD7Svlf517y/JP1kAwdAhbNr4c3dBYhT9OtrmJm4EY/szyYE1jm00g+sImILaO/4Hk89TNWZQv67s5P2AZpAFIlW1Dun0CiyhUwAHHmK6LF/2leTIzFDDGEsSdKYZ0mbEncNUDNkh3XxFnfr2Yg8oys/2I9DQWtCRXHGw=;3:6R/r8GfLFp8HJHKcFYxpo7rrID6eBogFxPiv93UlfzXM7tI88NRRJkVFQXb4d2QbjKgQzS5THfYrYrfYgVcTeG+BUWT9dH8d/LKnxKLdNDpG7P/jpGC5ZHsEYra+4BNAX8ccQ+suCbqZnxslVYOs6YQLt0CEvNTiKYOqEjjpguM=;25:MpO+mY/Hnig0Zr/pLAJgJ0sKJJaG96USCJvS0yz9gXBI3Kj+aL5nIvLnuccQ6Z6XnaguEUzqLJsnbPfiBWDR5zOVvdnR2/gC79teXHTFwT08NtH21XhSw9m6k5WjPBa7TAbSMfO9o3pdqAB+a4cCCkXmYaO3dpJ0hczF+ulY4ZzWsmIj1b3ZtcC/JnFSiNNto4qRQOuQX5oYEYeekoEd3Bb0OsLIPXp6jggENRdkSbZy6/2s5+3sZade2ZzePcVrPD6js6J+h0n6bo0QHvx04XSCfA772byFp2idjl3T9qD3HjhQjYOcjUc+HmpDdXyMZWk4QdQ8nWjvYq8eMMDLaIzE4YH+VPmkOQ+D7FO1d3YU6x98cR+cqQNDb3uTWmTl/6Gr04a5U75r4cg9PM4rnrMxuVnbVtdMv9aXsWdcScYjq02Mv8tI7rRIOnvlKvfhVGXtqC6P9ZzW4/I2Q1HnHQ== X-MS-Office365-Filtering-Correlation-Id: 3e4b55b9-5a6c-4c77-7df7-08d40e56fcc2 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:AM4PR0501MB2754; X-Microsoft-Exchange-Diagnostics: 1;AM4PR0501MB2754;31:Px7buKGpKOhbXv3VFBDaRg3MWxZlbCnQjyqnOkiQqu6X4Macq3zY2rvD3mqPG8IZPdGkA9+B1ka/sT307g6hYbneCmLb+/L5v+mLN+Yc7/DrlbOkj7jAjNMzQqJ05fImU93NeG/dO6YekZkzeyIrsP/brC1TISqyfNQ7mPrJwNGPYKWsfji5lk0ZJvYlZWIVVJLYvOkQkc5HzHq4rWn43wejhAfcIG8zm1tbVAeAoNpAFiADq9gin5M7nFdznUarutbC3ZJkAsh1sg63qzP2lw==;20:JdlMBInP+nzkAoHwDBJuVjUc+OZLoAwk80m5w4+H6YHBSGwyIPNhVjUSOk6OqnGRDdQ4eZJVX9HxGw80XKdValfChUk/eLCIjIn3IuvcIxm6IP1CyN0oH6OTkpd5TnRzzeDlUomO1Aqf1nIm3ufcH/R6aqav7NGXk96APX1RnWQ0agWbHa6KouMh5RlWlJl94t9AJKqqKEYHPzB5Xpg/WXhlHDKfw3i1xMVytObM5r9+kZbnz08f62E/36labZKEKnR9aOF4807vy2wWBsxVfXAtoihYAEh0U8nU1CwNY4eIyDyF6blNNbSja9pwmKZN5STz3RxbFYpJ19MJRpU5JnbfPdVU+Dveziqlc1ckQLZu9fFiIlJMCoGsglrHvszNdPvmWgWrQ0M/n3Ed3iBE1/8OgEFu4gtq9woH9rHmA7PwlGlOxrRVDuAVO+DiltSvVGe9UpOdy9zNbQ2XsGiB7k3csJ5urqvurDDWlwUfsYcMdNdFL/V4fY7rAP60ZmvH X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(171992500451332); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040281)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6055026)(6041223);SRVR:AM4PR0501MB2754;BCL:0;PCL:0;RULEID:;SRVR:AM4PR0501MB2754; X-Microsoft-Exchange-Diagnostics: 1;AM4PR0501MB2754;4:QvBQXf1og74BHTeZJ+/CIu3lE8cU8ZyClsAVEyZsDWSg1381YDgYP+kafY1m7HBd2njeacQaRb5K+4MkMDaGknwxH/HYavF4a+qK/FzO8VC4gNTwo8J14atM8U8q5Jc6kOLVjjnzenDA6J6gSkaJXfqEBqn3qUwBPe8bVCjCGhVXb1+E6EPOsJ3n0sz2YwS5iVDnvTGv625loe04zC91BIVr00GEC1B9S2SMCoht20SsEMFmizNavYtevTEyScFLfzSQIsOyEoNGiuhXTDR2QPevFBet+mx0HwgGBN4cXf9HmWHwkI7AHOcKwB9N5luWKhWMVJh/nnPyQV/z73RXClGFjvs6ARuZgrULAR1q3id6iC9zNCPmEY5h6Y2KMTXFHVWAQ1fu17a7yv6qv6EytuNrgHGMLE8MVYTKgiIuHVeV/Sc0P6IFVVubWNuwSZgp95bVJfU2h4AUlrYvnz8W8+qtiQ8/G6kq7a72/5ocdJ8= X-Forefront-PRVS: 01283822F8 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6049001)(6009001)(7916002)(199003)(377454003)(24454002)(189002)(65956001)(101416001)(7736002)(3846002)(6116002)(31696002)(76176999)(68736007)(36756003)(2906002)(6666003)(97736004)(4001350100001)(65806001)(189998001)(230700001)(33646002)(54356999)(50986999)(4326007)(64126003)(7846002)(23676002)(65826007)(47776003)(83506001)(77096005)(105586002)(42186005)(8676002)(16601075003)(81166006)(2950100002)(50466002)(110136003)(6916009)(305945005)(5660300001)(86362001)(92566002)(66066001)(31686004)(81156014)(106356001)(229853002)(15760500001)(21314002);DIR:OUT;SFP:1101;SCL:1;SRVR:AM4PR0501MB2754;H:[10.15.7.187];FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtBTTRQUjA1MDFNQjI3NTQ7MjM6NzZveWwyczFDSWE3U0NuSEhRdFNRTHJT?= =?utf-8?B?SXgxRlJMV0syRFhLK2VZUXhQdVlUdzVKdUJXc0xETm1jS08wZGNZN1RaTll0?= =?utf-8?B?TGw5MnhHRGJjTTJkVmx1Y3UrWFA5bnVzNjJ3UDhFT0JPNkNZUEM3b3ZvSEw3?= =?utf-8?B?WitLY3M2a09jVHpDNUlSbElxVVhiWjJaWlhwUkx4M0k5VnBHcE82QXREWFhG?= =?utf-8?B?T000WFBrSkpMVXJPOGxGMi9wanlYT1RlK09Zb2ViTldNNVVhQ25ERTh3cnJX?= =?utf-8?B?R2tyY0RmNmxvTDJOK0ROSitpcHpZcy9mUlA4QTRkQ3N3VFhMUWZVOWJCRUFi?= =?utf-8?B?WnVkK1h6WlVtODRnb1NYSEpyVVg2K2h2V3l3cU9iWTJjb0dPRUpOclVxWEFh?= =?utf-8?B?dURSS3I0Z3lEQXF6RE1weDUvdUJWcTlISlFIcmpVV2xVN0Q3WmlyRkQ4eXlQ?= =?utf-8?B?OUdMcGtaZXQwcG41RmlVNTNKa0NrL3pWUDdHa2NhZkh6NzlQaFdja0VKL0Nn?= =?utf-8?B?NmlxL3pMb09keERFWUh0bDdiNVVsblV5NzNWT0dSZksvNDNheWZGLzk2L0Nm?= =?utf-8?B?aC9UekZhUks1VTVRa3JJTTB2MEtJUUhyb3hCU1Z6SVd2TDR6OXptOHBOQ0hT?= =?utf-8?B?dXZzZVUzT0IzdlZmS01kZmkyRzhvNElRc1pLdm1RQ3RnZDdqWVM1VGJpZmU5?= =?utf-8?B?M1AxbGRsK21sc25aOTR6NnhlajZ5WUV3TnYvbWtxQXNuT2pLRlVFUW8wdGls?= =?utf-8?B?SWRqMko2N1F4dHd1WlUzUkRYam5VRzVWcjhXb2xSUHdFWXY3bk9mZ2M4YzVz?= =?utf-8?B?QTIvSWxBYWw4QWgzSWpqWW51dmZ4QlZ0S1F1MTF6MjA5SWlFY24wdC9aQVRO?= =?utf-8?B?c1BxYjltcjlLRkJDeEJ0eHY4NjBsVEpqaEEwM2FEeGVnRnNFMEh1MTB3MnNM?= =?utf-8?B?RzdWMTJRaDVEYjArY1ZzVkZUMU5aRTV0b202ZGk5UmdBaFFGSDZNVWkveEJy?= =?utf-8?B?bXgyNVdmSGtjK2o3amRFU2xmeWlvcTBsMnUybzVCT0ptT1FEd1dvREpPQUg0?= =?utf-8?B?alFQeVBKRzdnME5nMnVRc1FQVjZMdE9zdXVCbjhwdHJJUzNIUXY2TVZoUUUv?= =?utf-8?B?Rmxhb2YzeERYem1kWlpwZ2lJTDJRdHZVbUlsUnNWUDVpRm5EeE9LYURhL3lx?= =?utf-8?B?dFhoRHlSekpjZmVwdWZOc3hhM09LckVZc2RzdjNWYzJSbzNPTjUzOU05M01a?= =?utf-8?B?NkpreWpCNGVJanBHV0RNL3RQVFhockY2UHZQb0lEMDNRWXRGT05nb1hWVUN5?= =?utf-8?B?V1lKU1ZzMzlMSTF0eDR5Tjg0bmRBQjZYZGM2N1hudFFubytuT01OSHlIU28z?= =?utf-8?B?UDVjU2NFTGJ4Q010aDN0aUhUbFd5U0VJU3NWd21oaGVFSWc2aGIxb000cXVL?= =?utf-8?B?YkR2TGVCTzFzUXVHRHhmSWc3cUF1cjJZQUZIUEt2VlVPUWJNVEZ3cEN2QklO?= =?utf-8?B?ZzFqd3J2ZHV2c05RUGhuTmU1cG9sbVBuclBYNXIzWFJlaE4xVFMxTkpKNzVm?= =?utf-8?B?Vzhsd2tVd0hqcWFFT3UweG84RXVTSFd2cWFoZ2RNbzNIOGZZaXNnbExLdm1l?= =?utf-8?B?YjZpZ1hmQzNCK01WdU5Wanl2Nkp4NEYwelJVWjlmVmUxa1lzbkdoSEJBcUZY?= =?utf-8?B?YXNYbTZqZUZJWTR0T2M5S05nYTI0TDJIOTRFdTE5UTFpY09Idi9xanVUQWdG?= =?utf-8?B?anp3SExEYndITzBUYUpOdXdGOG9Gb3ptU1o0ZzB4ekF4VlRjOXJyWUlsLzBj?= =?utf-8?B?eTFKaGxTOG4vN0wzYWl2OWJOYUpPUDhlV0pYV1ZrTkFPUmRNdz09?= X-Microsoft-Exchange-Diagnostics: 1;AM4PR0501MB2754;6:+FPMQkNTOPxWKKMPOEe/9Lp70b6nHM9s1j6s3SZXiRBpeezltJc+wq36dkV09HvhIUCXNQA+TXEm79j0l7ErzIHeWsHEozj2CSE+ogC3mzkpcf2e+8CFx+yRMQdHPIstCzNKS+/P+fIS8L8fOQ/ma+Rw8FJXGgEr3H1FWnFGgpBB69MrqM050CpHAwee4XemwFY7Of1gEI4KPWHDqOZtXULuL6po8wNRqYf9yZy6rIhQZm7MkysfLE9L5nFRbq+53Z9qTeSNcmh7oInbfga1LsujUxByWAWf1EDSh1MS7podRmIXKIpYwWjxiib5YTYpgIYlOYolMmUeMsdigSqDZucl//2PU12GsA3WfkFUREw=;5:jwqRt6iXMM5tmNufBoRZXJMlPCbq09SdK1R47LloynDN/A+aC0NAUftGFEIQxV4KDbwEjrZZEG3Qar5vbSvNuyd//zyIiYmpJ1CIBB9sTh99ZmBcGk7ZY4kHVuIt3fWshDzsrgB3uD4wji8KEl4CoQ==;24:8CoF5HaXkLJUzxTN6tbPRtAQfzf31D5tN/VMA7KeS4NE6/X31Ogi6h1utHpiv5K+W+DC8DD2tc58QKQvyHYdtLTX10eg8/qxN81fEkQOf3I= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;AM4PR0501MB2754;7:9573+biR4wJiMjvzvn1iiCkrwsVp0+LwHcLEgHgebKbydmRuME/9xmwUzGQaCJRlEqp3bufh3lEuJ0oistIR4wmCMXsrK/1+sGbS4yiIm49LGhY7HXRJ0KiUm7dqd61Hy9RCsOwwCYA0qa0AOYssQ6sSqDqWrTnbj9rLQQmZLETjIxXaf2iuhhH23GfF6SQIuL/k0nL8l1fnS7H6HAIRGEzqKxGFQz8Edun3lNy+MvF6xJuzX48+k1WIvd+GKBiCCP0+fUuN2goasfAaVV9fEjTKgSeVUFOuTe2v2AckNgaHs7sKw0Xkh9dRjt5DPWvZPlHWF5zAco12ek+3giL6z9uGZvJHtXfCJH/z6n5xM1I= X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Nov 2016 19:30:12.6855 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR0501MB2754 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3153 Lines: 75 On 11/16/2016 1:04 PM, John Stultz wrote: > On Wed, Nov 16, 2016 at 8:57 AM, Chris Metcalf wrote: >> include/linux/clocksource.h | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/include/linux/clocksource.h b/include/linux/clocksource.h >> index 08398182f56e..b2a022acf232 100644 >> --- a/include/linux/clocksource.h >> +++ b/include/linux/clocksource.h >> @@ -175,7 +175,7 @@ static inline u32 clocksource_hz2mult(u32 hz, u32 shift_constant) >> */ >> static inline s64 clocksource_cyc2ns(cycle_t cycles, u32 mult, u32 shift) >> { >> - return ((u64) cycles * mult) >> shift; >> + return mult_frac(cycles, mult, 1ULL << shift); >> } > > So clocksource_cyc2ns() was never intended to be used with > indefinitely large cycle values, and it looks like tile and blackfin > are abusing the interface (the omap usage provide cycle deltas rather > then just the current counter value). Well, the interface does just say "convert clocksource cycles to nanoseconds". :-) If you think it's more important that it be a little faster, we should adjust the documentation to say it is only appropriate for delta-cycles, not absolute cycles. I've appended a commit that does this if you'd like to take it. > I'd suggest instead to move tile/blackfin to using the generic > sched_clock implementation that most of the architectures use, or > special case the code in the arch specific sched_clock > implementations(as x86 does) instead of modifying the common interface > to better handle a use case its not intended for. Yes, since tile has a full 64-bit cycle counter, the best thing is to just directly open-code the mult_frac() in tile's sched_clock(). I'll push that change. Steven Miao, I assume you should do the same for blackfin. Thanks! -- Chris Metcalf, Mellanox Technologies http://www.mellanox.com From: Chris Metcalf Date: Wed, 16 Nov 2016 14:24:53 -0500 Subject: [PATCH] clocksource_cyc2ns: document intended range limitation The "cycles" argument should not be an absolute clocksource cycle value, as the implementation's arithmetic will overflow relatively easily. For performance, the implementation is simple and fast, since the function is intended for only relatively small delta values of clocksource cycles. Signed-off-by: Chris Metcalf --- include/linux/clocksource.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/include/linux/clocksource.h b/include/linux/clocksource.h index 08398182f56e..5444429884b8 100644 --- a/include/linux/clocksource.h +++ b/include/linux/clocksource.h @@ -171,6 +171,10 @@ static inline u32 clocksource_hz2mult(u32 hz, u32 shift_constant) * * Converts cycles to nanoseconds, using the given mult and shift. * + * The code is optimized for performance and not intended to work + * with absolute clocksource cycles, as it will easily overflow, + * but just intended for relative (delta) clocksource cycles. + * * XXX - This could use some mult_lxl_ll() asm optimization */ static inline s64 clocksource_cyc2ns(cycle_t cycles, u32 mult, u32 shift) -- 2.7.2