Date: Thu, 26 Jul 2012 18:13:22 +0000 (UTC) From: Davide Italiano <davide@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r238814 - in projects/calloutng/sys: kern sys Message-ID: <201207261813.q6QIDMQV011822@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201207261813.q6QIDMQV011822>