Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S262346AbUKQPd4 (ORCPT ); Wed, 17 Nov 2004 10:33:56 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S262349AbUKQPd4 (ORCPT ); Wed, 17 Nov 2004 10:33:56 -0500 Received: from e33.co.us.ibm.com ([32.97.110.131]:44246 "EHLO e33.co.us.ibm.com") by vger.kernel.org with ESMTP id S262346AbUKQPdI (ORCPT ); Wed, 17 Nov 2004 10:33:08 -0500 Date: Tue, 16 Nov 2004 17:30:59 -0800 From: Nishanth Aravamudan To: janitor@sternwelten.at Cc: netdev@oss.sgi.com, jgarzik@pobox.com, linux-kernel@vger.kernel.org, kernel-janitors@lists.osdl.org Subject: Re: [PATCH] Add ssleep_interruptible() Message-ID: <20041117013059.GA4218@us.ibm.com> References: <20041101200749.GF1730@us.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20041101200749.GF1730@us.ibm.com> X-Operating-System: Linux 2.6.9-test-acpi (i686) User-Agent: Mutt/1.5.6+20040722i Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1886 Lines: 44 On Mon, Nov 01, 2004 at 12:07:49PM -0800, Nishanth Aravamudan wrote: > Description: Adds ssleep_interruptible() to allow longer delays to occur > in TASK_INTERRUPTIBLE, similarly to ssleep(). To be consistent with > msleep_interruptible(), ssleep_interruptible() returns the remaining time > left in the delay in terms of seconds. This required dividing the return > value of msleep_interruptible() by 1000, thus a cast to (unsigned long) > to prevent any floating point issues. > > Signed-off-by: Nishanth Aravamudan > > --- 2.6.10-rc1-vanilla/include/linux/delay.h 2004-10-30 > 15:34:03.000000000 -0700 > +++ 2.6.10-rc1/include/linux/delay.h 2004-11-01 12:06:11.000000000 -0800 > @@ -46,4 +46,9 @@ static inline void ssleep(unsigned int s > msleep(seconds * 1000); > } > > +static inline unsigned long ssleep_interruptible(unsigned int seconds) > +{ > + return (unsigned long)(msleep_interruptible(seconds * 1000) / 1000); > +} > + > #endif /* defined(_LINUX_DELAY_H) */ After a discussion on IRC, I believe it is pretty clear that this function has serious issues. Mainly, that if I request a delay of 1 second, but msleep_interruptible() returns after 1 millisecond, then ssleep_interruptible() will return 0, claiming the entire delay was used (due to rounding). Perhaps we should just be satisfied with milliseconds being the grossest (in contrast to fine) measure of time, at least in terms of interruptible delays. ssleep() is unaffected by this problem, of course. Please revert this patch, if applied, as well as any of the other patches I sent using ssleep_interruptible() [only a handful]. Thanks, Nish - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/