Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 30 Aug 2013 16:37:43 +0300
From:      Andriy Gapon <avg@FreeBSD.org>
To:        Hans Petter Selasky <hselasky@FreeBSD.org>
Cc:        svn-src-head@FreeBSD.org, svn-src-all@FreeBSD.org, src-committers@FreeBSD.org
Subject:   Re: svn commit: r255067 - head/sys/kern
Message-ID:  <5220A027.8070604@FreeBSD.org>
In-Reply-To: <201308301039.r7UAduI1052038@svn.freebsd.org>
References:  <201308301039.r7UAduI1052038@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
on 30/08/2013 13:39 Hans Petter Selasky said the following:
> Author: hselasky
> Date: Fri Aug 30 10:39:56 2013
> New Revision: 255067
> URL: http://svnweb.freebsd.org/changeset/base/255067
> 
> Log:
>   Simplify pause_sbt() logic. Don't call DELAY() if remainder is less
>   than or equal to zero.

Discussed with?
Reviewed by?
Tested by?

Asking just because this change seems to be outside of your typical area and in
the quite important infrastructural code.

> Modified:
>   head/sys/kern/kern_synch.c
> 
> Modified: head/sys/kern/kern_synch.c
> ==============================================================================
> --- head/sys/kern/kern_synch.c	Fri Aug 30 10:10:22 2013	(r255066)
> +++ head/sys/kern/kern_synch.c	Fri Aug 30 10:39:56 2013	(r255067)
> @@ -356,10 +356,7 @@ msleep_spin_sbt(void *ident, struct mtx 
>  int
>  pause_sbt(const char *wmesg, sbintime_t sbt, sbintime_t pr, int flags)
>  {
> -	int sbt_sec;
> -
> -	sbt_sec = sbintime_getsec(sbt);
> -	KASSERT(sbt_sec >= 0, ("pause: timo must be >= 0"));
> +	KASSERT(sbt >= 0, ("pause: timeout must be >= 0"));
>  
>  	/* silently convert invalid timeouts */
>  	if (sbt == 0)
> @@ -370,11 +367,14 @@ pause_sbt(const char *wmesg, sbintime_t 
>  		 * We delay one second at a time to avoid overflowing the
>  		 * system specific DELAY() function(s):
>  		 */
> -		while (sbt_sec > 0) {
> +		while (sbt >= SBT_1S) {
>  			DELAY(1000000);
> -			sbt_sec--;
> +			sbt -= SBT_1S;
>  		}
> -		DELAY((sbt & 0xffffffff) / SBT_1US);
> +		/* Do the delay remainder, if any */
> +		sbt = (sbt + SBT_1US - 1) / SBT_1US;
> +		if (sbt > 0)
> +			DELAY(sbt);
>  		return (0);
>  	}
>  	return (_sleep(&pause_wchan[curcpu], NULL, 0, wmesg, sbt, pr, flags));
> 


-- 
Andriy Gapon



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5220A027.8070604>