From owner-svn-src-projects@FreeBSD.ORG Thu Jul 26 18:13:22 2012 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id B4314106566B; Thu, 26 Jul 2012 18:13:22 +0000 (UTC) (envelope-from davide@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 8646F8FC0C; Thu, 26 Jul 2012 18:13:22 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q6QIDMXO011826; Thu, 26 Jul 2012 18:13:22 GMT (envelope-from davide@svn.freebsd.org) Received: (from davide@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q6QIDMQV011822; Thu, 26 Jul 2012 18:13:22 GMT (envelope-from davide@svn.freebsd.org) Message-Id: <201207261813.q6QIDMQV011822@svn.freebsd.org> From: Davide Italiano Date: Thu, 26 Jul 2012 18:13:22 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r238814 - in projects/calloutng/sys: kern sys X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 26 Jul 2012 18:13:22 -0000 Author: davide Date: Thu Jul 26 18:13:21 2012 New Revision: 238814 URL: http://svn.freebsd.org/changeset/base/238814 Log: Introduce tsleep_bt() function as part of the sleep(9) KPI. Use it in kern_nanosleep() so that we don't need to duplicate _sleep() code. Modified: projects/calloutng/sys/kern/kern_synch.c projects/calloutng/sys/kern/kern_time.c projects/calloutng/sys/sys/systm.h Modified: projects/calloutng/sys/kern/kern_synch.c ============================================================================== --- projects/calloutng/sys/kern/kern_synch.c Thu Jul 26 17:30:34 2012 (r238813) +++ projects/calloutng/sys/kern/kern_synch.c Thu Jul 26 18:13:21 2012 (r238814) @@ -162,7 +162,7 @@ _sleep(void *ident, struct lock_object * #endif WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, lock, "Sleeping on \"%s\"", wmesg); - KASSERT(timo != 0 || mtx_owned(&Giant) || lock != NULL, + KASSERT(timo != 0 || bt != NULL || mtx_owned(&Giant) || lock != NULL, ("sleeping without a lock")); KASSERT(p != NULL, ("msleep1")); KASSERT(ident != NULL && TD_IS_RUNNING(td), ("msleep")); @@ -242,9 +242,9 @@ _sleep(void *ident, struct lock_object * lock_state = class->lc_unlock(lock); sleepq_lock(ident); } - if ((timo || bt) && catch) + if ((timo != 0 || bt != NULL) && catch) rval = sleepq_timedwait_sig(ident, pri); - else if (timo || bt) + else if (timo != 0 || bt != NULL) rval = sleepq_timedwait(ident, pri); else if (catch) rval = sleepq_wait_sig(ident, pri); Modified: projects/calloutng/sys/kern/kern_time.c ============================================================================== --- projects/calloutng/sys/kern/kern_time.c Thu Jul 26 17:30:34 2012 (r238813) +++ projects/calloutng/sys/kern/kern_time.c Thu Jul 26 18:13:21 2012 (r238814) @@ -365,10 +365,8 @@ kern_nanosleep(struct thread *td, struct timespec2bintime(rqt, &tmp); bintime_add(&bt,&tmp); for (;;) { - sleepq_lock(&nanowait); - sleepq_add(&nanowait, NULL, "nanslp", PWAIT | PCATCH, 0); - sleepq_set_timeout_bt(&nanowait, &bt, C_DIRECT_EXEC); - error = sleepq_timedwait_sig(&nanowait, PWAIT | PCATCH); + error = tsleep_bt(&nanowait, PWAIT | PCATCH, "nanslp", &bt, + C_DIRECT_EXEC); binuptime(&bt2); if (error != EWOULDBLOCK) { if (error == ERESTART) Modified: projects/calloutng/sys/sys/systm.h ============================================================================== --- projects/calloutng/sys/sys/systm.h Thu Jul 26 17:30:34 2012 (r238813) +++ projects/calloutng/sys/sys/systm.h Thu Jul 26 18:13:21 2012 (r238814) @@ -356,6 +356,8 @@ int msleep_spin(void *chan, struct mtx * int pause(const char *wmesg, int timo); #define tsleep(chan, pri, wmesg, timo) \ _sleep((chan), NULL, (pri), (wmesg), (timo), NULL, 0) +#define tsleep_bt(chan, pri, wmesg, bt, flags) \ + _sleep((chan), NULL, (pri), (wmesg), 0, (bt), (flags)) void wakeup(void *chan) __nonnull(1); void wakeup_one(void *chan) __nonnull(1);