diff --git a/sys/kern/kern_sleepq.c b/sys/kern/kern_sleepq.c index 971fd7c5def5..fcf79c2ccbb5 100644 --- a/sys/kern/kern_sleepq.c +++ b/sys/kern/kern_sleepq.c @@ -1,4 +1,4 @@ -/* $NetBSD: kern_sleepq.c,v 1.44 2011/10/31 12:18:32 yamt Exp $ */ +/* $NetBSD: kern_sleepq.c,v 1.45 2012/01/28 12:22:33 rmind Exp $ */ /*- * Copyright (c) 2006, 2007, 2008, 2009 The NetBSD Foundation, Inc. @@ -35,7 +35,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: kern_sleepq.c,v 1.44 2011/10/31 12:18:32 yamt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_sleepq.c,v 1.45 2012/01/28 12:22:33 rmind Exp $"); #include #include @@ -54,7 +54,7 @@ __KERNEL_RCSID(0, "$NetBSD: kern_sleepq.c,v 1.44 2011/10/31 12:18:32 yamt Exp $" static int sleepq_sigtoerror(lwp_t *, int); -/* General purpose sleep table, used by ltsleep() and condition variables. */ +/* General purpose sleep table, used by mtsleep() and condition variables. */ sleeptab_t sleeptab __cacheline_aligned; /* diff --git a/sys/kern/kern_synch.c b/sys/kern/kern_synch.c index 5db59059ac82..1cb63d54935a 100644 --- a/sys/kern/kern_synch.c +++ b/sys/kern/kern_synch.c @@ -1,4 +1,4 @@ -/* $NetBSD: kern_synch.c,v 1.296 2011/11/06 14:11:00 dholland Exp $ */ +/* $NetBSD: kern_synch.c,v 1.297 2012/01/28 12:22:33 rmind Exp $ */ /*- * Copyright (c) 1999, 2000, 2004, 2006, 2007, 2008, 2009 @@ -69,7 +69,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: kern_synch.c,v 1.296 2011/11/06 14:11:00 dholland Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_synch.c,v 1.297 2012/01/28 12:22:33 rmind Exp $"); #include "opt_kstack.h" #include "opt_perfctrs.h" @@ -176,28 +176,19 @@ synch_init(void) * signal needs to be delivered, ERESTART is returned if the current system * call should be restarted if possible, and EINTR is returned if the system * call should be interrupted by the signal (return EINTR). - * - * The interlock is held until we are on a sleep queue. The interlock will - * be locked before returning back to the caller unless the PNORELOCK flag - * is specified, in which case the interlock will always be unlocked upon - * return. */ int -ltsleep(wchan_t ident, pri_t priority, const char *wmesg, int timo, - volatile struct simplelock *interlock) +tsleep(wchan_t ident, pri_t priority, const char *wmesg, int timo) { struct lwp *l = curlwp; sleepq_t *sq; kmutex_t *mp; - int error; KASSERT((l->l_pflag & LP_INTR) == 0); KASSERT(ident != &lbolt); if (sleepq_dontsleep(l)) { (void)sleepq_abort(NULL, 0); - if ((priority & PNORELOCK) != 0) - simple_unlock(interlock); return 0; } @@ -205,18 +196,7 @@ ltsleep(wchan_t ident, pri_t priority, const char *wmesg, int timo, sq = sleeptab_lookup(&sleeptab, ident, &mp); sleepq_enter(sq, l, mp); sleepq_enqueue(sq, ident, wmesg, &sleep_syncobj); - - if (interlock != NULL) { - KASSERT(simple_lock_held(interlock)); - simple_unlock(interlock); - } - - error = sleepq_block(timo, priority & PCATCH); - - if (interlock != NULL && (priority & PNORELOCK) == 0) - simple_lock(interlock); - - return error; + return sleepq_block(timo, priority & PCATCH); } int @@ -245,7 +225,7 @@ mtsleep(wchan_t ident, pri_t priority, const char *wmesg, int timo, if ((priority & PNORELOCK) == 0) mutex_enter(mtx); - + return error; } @@ -317,26 +297,6 @@ wakeup(wchan_t ident) sleepq_wake(sq, ident, (u_int)-1, mp); } -/* - * OBSOLETE INTERFACE - * - * Make the highest priority LWP first in line on the specified - * identifier runnable. - */ -void -wakeup_one(wchan_t ident) -{ - sleepq_t *sq; - kmutex_t *mp; - - if (__predict_false(cold)) - return; - - sq = sleeptab_lookup(&sleeptab, ident, &mp); - sleepq_wake(sq, ident, 1, mp); -} - - /* * General yield call. Puts the current LWP back on its run queue and * performs a voluntary context switch. Should only be called when the diff --git a/sys/rump/librump/rumpkern/ltsleep.c b/sys/rump/librump/rumpkern/ltsleep.c index a187375776be..4625a1ceb70c 100644 --- a/sys/rump/librump/rumpkern/ltsleep.c +++ b/sys/rump/librump/rumpkern/ltsleep.c @@ -1,4 +1,4 @@ -/* $NetBSD: ltsleep.c,v 1.28 2010/12/01 14:59:38 pooka Exp $ */ +/* $NetBSD: ltsleep.c,v 1.29 2012/01/28 12:22:33 rmind Exp $ */ /* * Copyright (c) 2009, 2010 Antti Kantee. All Rights Reserved. @@ -26,7 +26,7 @@ */ /* - * Implementation of the ltsleep/mtsleep kernel sleep interface. There + * Implementation of the tsleep/mtsleep kernel sleep interface. There * are two sides to our implementation. For historic spinlocks we * assume the kernel is giantlocked and use kernel giantlock as the * wait interlock. For mtsleep, we use the interlock supplied by @@ -34,13 +34,12 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: ltsleep.c,v 1.28 2010/12/01 14:59:38 pooka Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ltsleep.c,v 1.29 2012/01/28 12:22:33 rmind Exp $"); #include #include #include #include -#include #include @@ -123,14 +122,10 @@ sleeper(wchan_t ident, int timo, kmutex_t *kinterlock) } int -ltsleep(wchan_t ident, pri_t prio, const char *wmesg, int timo, - volatile struct simplelock *slock) +tsleep(wchan_t ident, pri_t prio, const char *wmesg, int timo) { int rv, nlocks; - if (slock) - simple_unlock(slock); - /* * Since we cannot use slock as the rumpuser interlock, * require that everyone using this prehistoric interface @@ -142,15 +137,11 @@ ltsleep(wchan_t ident, pri_t prio, const char *wmesg, int timo, rv = sleeper(ident, timo, NULL); rump_kernel_bigunwrap(nlocks); - if (slock && (prio & PNORELOCK) == 0) - simple_lock(slock); - return rv; } int -mtsleep(wchan_t ident, pri_t prio, const char *wmesg, int timo, - kmutex_t *lock) +mtsleep(wchan_t ident, pri_t prio, const char *wmesg, int timo, kmutex_t *lock) { int rv; @@ -161,46 +152,24 @@ mtsleep(wchan_t ident, pri_t prio, const char *wmesg, int timo, return rv; } -static void -do_wakeup(wchan_t ident, bool wakeup_all) +void +wakeup(wchan_t ident) { struct ltsleeper *ltsp; rumpuser_mutex_enter_nowrap(qlock); LIST_FOREACH(ltsp, &sleepers, entries) { if (ltsp->id == ident) { - if (wakeup_all) { - if (ltsp->iskwait) { - cv_broadcast(<sp->kcv); - } else { - rumpuser_cv_broadcast(ltsp->ucv); - } + if (ltsp->iskwait) { + cv_broadcast(<sp->kcv); } else { - if (ltsp->iskwait) { - cv_signal(<sp->kcv); - } else { - rumpuser_cv_signal(ltsp->ucv); - } + rumpuser_cv_broadcast(ltsp->ucv); } } } rumpuser_mutex_exit(qlock); } -void -wakeup(wchan_t ident) -{ - - do_wakeup(ident, true); -} - -void -wakeup_one(wchan_t ident) -{ - - do_wakeup(ident, false); -} - void rump_tsleep_init() { diff --git a/sys/sys/proc.h b/sys/sys/proc.h index 1b3b0bba59ab..8473faca67a2 100644 --- a/sys/sys/proc.h +++ b/sys/sys/proc.h @@ -1,4 +1,4 @@ -/* $NetBSD: proc.h,v 1.313 2012/01/05 15:19:53 reinoud Exp $ */ +/* $NetBSD: proc.h,v 1.314 2012/01/28 12:22:33 rmind Exp $ */ /*- * Copyright (c) 2006, 2007, 2008 The NetBSD Foundation, Inc. @@ -466,10 +466,9 @@ void proc_sesshold(struct session *); void proc_sessrele(struct session *); void fixjobc(struct proc *, struct pgrp *, int); -int ltsleep(wchan_t, pri_t, const char *, int, volatile struct simplelock *); +int tsleep(wchan_t, pri_t, const char *, int); int mtsleep(wchan_t, pri_t, const char *, int, kmutex_t *); void wakeup(wchan_t); -void wakeup_one(wchan_t); int kpause(const char *, bool, int, kmutex_t *); void exit1(struct lwp *, int) __dead; int do_sys_wait(int *, int *, int, struct rusage *); @@ -532,10 +531,6 @@ _proclist_skipmarker(struct proc *p0) ((var) = _proclist_skipmarker(var)) != NULL; \ (var) = LIST_NEXT(var, p_list)) -/* Compatibility with old, non-interlocked tsleep call */ -#define tsleep(chan, pri, wmesg, timo) \ - ltsleep(chan, pri, wmesg, timo, NULL) - #ifdef KSTACK_CHECK_MAGIC void kstack_setup_magic(const struct lwp *); void kstack_check_magic(const struct lwp *);