Date: Tue, 24 Aug 2010 07:29:55 +0000 (UTC) From: David Xu <davidxu@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r211733 - head/sys/kern Message-ID: <201008240729.o7O7TtBG066818@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: davidxu Date: Tue Aug 24 07:29:55 2010 New Revision: 211733 URL: http://svn.freebsd.org/changeset/base/211733 Log: Optimize thr_suspend, if timeout is zero, don't call msleep, just return immediately. Modified: head/sys/kern/kern_thr.c Modified: head/sys/kern/kern_thr.c ============================================================================== --- head/sys/kern/kern_thr.c Tue Aug 24 07:22:24 2010 (r211732) +++ head/sys/kern/kern_thr.c Tue Aug 24 07:29:55 2010 (r211733) @@ -430,15 +430,12 @@ int kern_thr_suspend(struct thread *td, struct timespec *tsp) { struct timeval tv; - int error = 0, hz = 0; + int error = 0; + int timo = 0; if (tsp != NULL) { if (tsp->tv_nsec < 0 || tsp->tv_nsec > 1000000000) return (EINVAL); - if (tsp->tv_sec == 0 && tsp->tv_nsec == 0) - return (ETIMEDOUT); - TIMESPEC_TO_TIMEVAL(&tv, tsp); - hz = tvtohz(&tv); } if (td->td_pflags & TDP_WAKEUP) { @@ -447,9 +444,17 @@ kern_thr_suspend(struct thread *td, stru } PROC_LOCK(td->td_proc); - if ((td->td_flags & TDF_THRWAKEUP) == 0) - error = msleep((void *)td, &td->td_proc->p_mtx, PCATCH, "lthr", - hz); + if ((td->td_flags & TDF_THRWAKEUP) == 0) { + if (tsp->tv_sec == 0 && tsp->tv_nsec == 0) + error = EWOULDBLOCK; + else { + TIMESPEC_TO_TIMEVAL(&tv, tsp); + timo = tvtohz(&tv); + error = msleep((void *)td, &td->td_proc->p_mtx, + PCATCH, "lthr", timo); + } + } + if (td->td_flags & TDF_THRWAKEUP) { thread_lock(td); td->td_flags &= ~TDF_THRWAKEUP; @@ -461,7 +466,7 @@ kern_thr_suspend(struct thread *td, stru if (error == EWOULDBLOCK) error = ETIMEDOUT; else if (error == ERESTART) { - if (hz != 0) + if (timo != 0) error = EINTR; } return (error);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201008240729.o7O7TtBG066818>