Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757709AbcLOI5D (ORCPT ); Thu, 15 Dec 2016 03:57:03 -0500 Received: from 92-243-34-74.adsl.nanet.at ([92.243.34.74]:52475 "EHLO mail.osadl.at" rhost-flags-OK-FAIL-OK-OK) by vger.kernel.org with ESMTP id S1757673AbcLOI5B (ORCPT ); Thu, 15 Dec 2016 03:57:01 -0500 Date: Thu, 15 Dec 2016 08:56:51 +0000 From: Nicholas Mc Guire To: Jani Nikula Cc: Nicholas Mc Guire , Daniel Vetter , ymohanma , David Airlie , intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] drm/i915: use udelay for very small delays Message-ID: <20161215085651.GA25256@osadl.at> References: <1481774609-20998-1-git-send-email-hofrat@osadl.org> <8737hpr32a.fsf@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <8737hpr32a.fsf@intel.com> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1893 Lines: 49 On Thu, Dec 15, 2016 at 10:47:57AM +0200, Jani Nikula wrote: > On Thu, 15 Dec 2016, Nicholas Mc Guire wrote: > > usleep_range() is intended for delays in the 10us to 10ms range that need > > good precision. a useleep_range(1, will effectively be no more than an > > imprecise udelay with some added cache disruption as it will fire more or > > less immediately - use udelay() here. > > > > Fixes: commit be4fc046bed3 ("drm/i915: add VLV DSI PLL Calculations") > > Signed-off-by: Nicholas Mc Guire > > --- > > > > Problem located by coccinelle > > > > The requirement of waiting at least 0.5 us is assured with the udelay(1) > > here which should be more effective than a usleep_range() - would > > ndelay(500) make sense here ? > > This is in the modeset path, i.e. pretty slow anyway. In this case, the > point is not to try hard to minimize the wait, the point is to guarantee > "at least 0.5 us" has passed. If the CPU can do something else, > including dozing off, in the mean time, great. I think we should stick > with usleep_range(). well in that case maybe an acceptable solution would be to set it to some suitable range 10,20 us ? or if not critical preferably even with a large upper limit. > > I think the question is, how do we express this in code? IMO udelay() is > not the answer. if the delay need to be kept short then no - then its not the answer but usleep_ranges(1,2) I think is effectively just an inefficient version of udelay(1), by the time the timer is setup and the task gives up the cpu the timer would fire. > > And why doesn't usleep_range() kernel-doc mention anything about the > ranges? > interesting - that might be part of the reason there are many findings Documentation/timers/timers-howto.txt does SLEEPING FOR ~USECS OR SMALL MSECS ( 10us - 20ms): * Use usleep_range thx! hofrat