Module Name:    src
Committed By:   pooka
Date:           Thu May  2 19:15:02 UTC 2013

Modified Files:
        src/lib/librumpuser: rumpuser.3 rumpuser_pth.c rumpuser_pth_dummy.c
        src/sys/rump/include/machine: cpu.h
        src/sys/rump/include/rump: rumpuser.h
        src/sys/rump/librump/rumpkern: lwproc.c rump.c scheduler.c threads.c
        src/sys/rump/librump/rumpkern/arch/i386: rumpcpu.c

Log Message:
Inform the rump kernel hypervisor of valid thread contexts so
that the implementation can allocate and release storage for them
in an optimal fashion, if necessary.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/lib/librumpuser/rumpuser.3
cvs rdiff -u -r1.22 -r1.23 src/lib/librumpuser/rumpuser_pth.c
cvs rdiff -u -r1.12 -r1.13 src/lib/librumpuser/rumpuser_pth_dummy.c
cvs rdiff -u -r1.15 -r1.16 src/sys/rump/include/machine/cpu.h
cvs rdiff -u -r1.100 -r1.101 src/sys/rump/include/rump/rumpuser.h
cvs rdiff -u -r1.21 -r1.22 src/sys/rump/librump/rumpkern/lwproc.c
cvs rdiff -u -r1.266 -r1.267 src/sys/rump/librump/rumpkern/rump.c
cvs rdiff -u -r1.32 -r1.33 src/sys/rump/librump/rumpkern/scheduler.c
cvs rdiff -u -r1.20 -r1.21 src/sys/rump/librump/rumpkern/threads.c
cvs rdiff -u -r1.10 -r1.11 src/sys/rump/librump/rumpkern/arch/i386/rumpcpu.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/lib/librumpuser/rumpuser.3
diff -u src/lib/librumpuser/rumpuser.3:1.5 src/lib/librumpuser/rumpuser.3:1.6
--- src/lib/librumpuser/rumpuser.3:1.5	Thu May  2 15:32:19 2013
+++ src/lib/librumpuser/rumpuser.3	Thu May  2 19:14:59 2013
@@ -1,4 +1,4 @@
-.\"     $NetBSD: rumpuser.3,v 1.5 2013/05/02 15:32:19 pooka Exp $
+.\"     $NetBSD: rumpuser.3,v 1.6 2013/05/02 19:14:59 pooka Exp $
 .\"
 .\" Copyright (c) 2013 Antti Kantee.  All rights reserved.
 .\"
@@ -450,25 +450,53 @@ The cookie matches the value from
 .Fn rumpuser_thread_create .
 .Pp
 .Ft void
-.Fn rumpuser_set_curlwp "struct lwp *l"
+.Fn rumpuser_curlwpop "enum rumplwpop op" "struct lwp *l"
 .Pp
+Manipulate the hypervisor's thread context database.
+The possible operations are create, destroy and set as specified by
+.Fa op :
+.Bl -tag -width "XRUMPUSER_LWP_DESTROY"
+.It Dv RUMPUSER_LWP_CREATE
+Inform the hypervisor that
+.Fa l
+is now a valid thread context which may be set.
+A currently valid value of
+.Fa l
+may not be specified.
+This operation is informational and does not mandate any action
+from the hypervisor.
+.It Dv RUMPUSER_LWP_DESTROY
+Inform the hypervisor that
+.Fa l
+is no longer a valid thread context.
+This means that it may no longer be set as the current context.
+A currently set context or an invalid one may not be destroyed.
+This operation is informational and does not mandate any action
+from the hypervisor.
+.It Dv RUMPUSER_LWP_SET
 Set
 .Fa l
-as the rump kernel thread context for the calling host thread.
+as the current host thread's rump kernel context.
 The value
 .Dv NULL
 means that an existing rump kernel context (which must exist)
 must be cleared.
+.El
 .Pp
 .Ft struct lwp *
-.Fn rumpuser_get_curlwp "void"
+.Fn rumpuser_curlwp "void"
 .Pp
-Retrieve the rump kernel thread context previously set by
-.Fn rumpuser_set_curlwp .
-This routine can be called when a context does not exist and
+Retrieve the rump kernel thread context associated with the current host
+thread, as set by
+.Fn rumpuser_curlwpop .
+This routine may be called when a context is not set and
 the routine must return
 .Dv NULL
 in that case.
+This interface is expected to be called very often.
+Any optimizations pertaining to the execution speed of this routine
+should be done in
+.Fn rumpuser_curlwpop .
 .Pp
 .Ft void
 .Fn rumpuser_seterrno "int errno"

Index: src/lib/librumpuser/rumpuser_pth.c
diff -u src/lib/librumpuser/rumpuser_pth.c:1.22 src/lib/librumpuser/rumpuser_pth.c:1.23
--- src/lib/librumpuser/rumpuser_pth.c:1.22	Thu May  2 16:49:08 2013
+++ src/lib/librumpuser/rumpuser_pth.c	Thu May  2 19:14:59 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumpuser_pth.c,v 1.22 2013/05/02 16:49:08 pooka Exp $	*/
+/*	$NetBSD: rumpuser_pth.c,v 1.23 2013/05/02 19:14:59 pooka Exp $	*/
 
 /*
  * Copyright (c) 2007-2010 Antti Kantee.  All Rights Reserved.
@@ -28,9 +28,11 @@
 #include "rumpuser_port.h"
 
 #if !defined(lint)
-__RCSID("$NetBSD: rumpuser_pth.c,v 1.22 2013/05/02 16:49:08 pooka Exp $");
+__RCSID("$NetBSD: rumpuser_pth.c,v 1.23 2013/05/02 19:14:59 pooka Exp $");
 #endif /* !lint */
 
+#include <sys/queue.h>
+
 #include <assert.h>
 #include <errno.h>
 #include <fcntl.h>
@@ -53,14 +55,14 @@ struct rumpuser_mtx {
 	int flags;
 };
 
-#define RURW_AMWRITER(rw) (rw->writer == rumpuser_get_curlwp()		\
+#define RURW_AMWRITER(rw) (rw->writer == rumpuser_curlwp()		\
 				&& rw->readers == -1)
 #define RURW_HASREAD(rw)  (rw->readers > 0)
 
 #define RURW_SETWRITE(rw)						\
 do {									\
 	assert(rw->readers == 0);					\
-	rw->writer = rumpuser_get_curlwp();				\
+	rw->writer = rumpuser_curlwp();					\
 	rw->readers = -1;						\
 } while (/*CONSTCOND*/0)
 #define RURW_CLRWRITE(rw)						\
@@ -193,7 +195,7 @@ mtxenter(struct rumpuser_mtx *mtx)
 		return;
 
 	assert(mtx->owner == NULL);
-	mtx->owner = rumpuser_get_curlwp();
+	mtx->owner = rumpuser_curlwp();
 }
 
 static void
@@ -460,17 +462,106 @@ rumpuser_cv_has_waiters(struct rumpuser_
  * curlwp
  */
 
+/*
+ * the if0'd curlwp implementation is not used by this hypervisor,
+ * but serves as test code to check that the intended usage works.
+ */
+#if 0
+struct rumpuser_lwp {
+	struct lwp *l;
+	LIST_ENTRY(rumpuser_lwp) l_entries;
+};
+static LIST_HEAD(, rumpuser_lwp) lwps = LIST_HEAD_INITIALIZER(lwps);
+static pthread_mutex_t lwplock = PTHREAD_MUTEX_INITIALIZER;
+
 void
-rumpuser_set_curlwp(struct lwp *l)
+rumpuser_curlwpop(enum rumplwpop op, struct lwp *l)
 {
+	struct rumpuser_lwp *rl, *rliter;
 
-	assert(pthread_getspecific(curlwpkey) == NULL || l == NULL);
-	pthread_setspecific(curlwpkey, l);
+	switch (op) {
+	case RUMPUSER_LWP_CREATE:
+		rl = malloc(sizeof(*rl));
+		rl->l = l;
+		pthread_mutex_lock(&lwplock);
+		LIST_FOREACH(rliter, &lwps, l_entries) {
+			if (rliter->l == l) {
+				fprintf(stderr, "LWP_CREATE: %p exists\n", l);
+				abort();
+			}
+		}
+		LIST_INSERT_HEAD(&lwps, rl, l_entries);
+		pthread_mutex_unlock(&lwplock);
+		break;
+	case RUMPUSER_LWP_DESTROY:
+		pthread_mutex_lock(&lwplock);
+		LIST_FOREACH(rl, &lwps, l_entries) {
+			if (rl->l == l)
+				break;
+		}
+		if (!rl) {
+			fprintf(stderr, "LWP_DESTROY: %p does not exist\n", l);
+			abort();
+		}
+		LIST_REMOVE(rl, l_entries);
+		pthread_mutex_unlock(&lwplock);
+		free(rl);
+		break;
+	case RUMPUSER_LWP_SET:
+		assert(pthread_getspecific(curlwpkey) == NULL || l == NULL);
+
+		if (l) {
+			pthread_mutex_lock(&lwplock);
+			LIST_FOREACH(rl, &lwps, l_entries) {
+				if (rl->l == l)
+					break;
+			}
+			if (!rl) {
+				fprintf(stderr,
+				    "LWP_SET: %p does not exist\n", l);
+				abort();
+			}
+			pthread_mutex_unlock(&lwplock);
+		} else {
+			rl = NULL;
+		}
+
+		pthread_setspecific(curlwpkey, rl);
+		break;
+	}
 }
 
 struct lwp *
-rumpuser_get_curlwp(void)
+rumpuser_curlwp(void)
+{
+	struct rumpuser_lwp *rl;
+
+	rl = pthread_getspecific(curlwpkey);
+	return rl ? rl->l : NULL;
+}
+
+#else
+
+void
+rumpuser_curlwpop(enum rumplwpop op, struct lwp *l)
+{
+
+	switch (op) {
+	case RUMPUSER_LWP_CREATE:
+		break;
+	case RUMPUSER_LWP_DESTROY:
+		break;
+	case RUMPUSER_LWP_SET:
+		assert(pthread_getspecific(curlwpkey) == NULL || l == NULL);
+		pthread_setspecific(curlwpkey, l);
+		break;
+	}
+}
+
+struct lwp *
+rumpuser_curlwp(void)
 {
 
 	return pthread_getspecific(curlwpkey);
 }
+#endif

Index: src/lib/librumpuser/rumpuser_pth_dummy.c
diff -u src/lib/librumpuser/rumpuser_pth_dummy.c:1.12 src/lib/librumpuser/rumpuser_pth_dummy.c:1.13
--- src/lib/librumpuser/rumpuser_pth_dummy.c:1.12	Tue Apr 30 13:37:03 2013
+++ src/lib/librumpuser/rumpuser_pth_dummy.c	Thu May  2 19:14:59 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumpuser_pth_dummy.c,v 1.12 2013/04/30 13:37:03 pooka Exp $	*/
+/*	$NetBSD: rumpuser_pth_dummy.c,v 1.13 2013/05/02 19:14:59 pooka Exp $	*/
 
 /*
  * Copyright (c) 2009 Antti Kantee.  All Rights Reserved.
@@ -29,7 +29,7 @@
 
 #include <sys/cdefs.h>
 #if !defined(lint)
-__RCSID("$NetBSD: rumpuser_pth_dummy.c,v 1.12 2013/04/30 13:37:03 pooka Exp $");
+__RCSID("$NetBSD: rumpuser_pth_dummy.c,v 1.13 2013/05/02 19:14:59 pooka Exp $");
 #endif /* !lint */
 
 #include <sys/time.h>
@@ -283,14 +283,21 @@ rumpuser_cv_has_waiters(struct rumpuser_
  */
 
 void
-rumpuser_set_curlwp(struct lwp *l)
+rumpuser_curlwpop(enum rumplwpop op, struct lwp *l)
 {
 
-	curlwp = l;
+	switch (op) {
+	case RUMPUSER_LWP_CREATE:
+	case RUMPUSER_LWP_DESTROY:
+		break;
+	case RUMPUSER_LWP_SET:
+		curlwp = l;
+		break;
+	}
 }
 
 struct lwp *
-rumpuser_get_curlwp(void)
+rumpuser_curlwp(void)
 {
 
 	return curlwp;

Index: src/sys/rump/include/machine/cpu.h
diff -u src/sys/rump/include/machine/cpu.h:1.15 src/sys/rump/include/machine/cpu.h:1.16
--- src/sys/rump/include/machine/cpu.h:1.15	Mon Mar 21 16:41:08 2011
+++ src/sys/rump/include/machine/cpu.h	Thu May  2 19:15:00 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpu.h,v 1.15 2011/03/21 16:41:08 pooka Exp $	*/
+/*	$NetBSD: cpu.h,v 1.16 2013/05/02 19:15:00 pooka Exp $	*/
 
 /*
  * Copyright (c) 2008-2011 Antti Kantee.  All Rights Reserved.
@@ -73,8 +73,8 @@ static __inline void cpu_handle_ipi(void
 void __syncicache(void *, size_t);
 #endif
 
-struct lwp *rumpuser_get_curlwp(void);
-#define curlwp rumpuser_get_curlwp()
+struct lwp *rumpuser_curlwp(void);
+#define curlwp rumpuser_curlwp()
 
 #define curcpu() (curlwp->l_cpu)
 #define cpu_number() (cpu_index(curcpu))

Index: src/sys/rump/include/rump/rumpuser.h
diff -u src/sys/rump/include/rump/rumpuser.h:1.100 src/sys/rump/include/rump/rumpuser.h:1.101
--- src/sys/rump/include/rump/rumpuser.h:1.100	Tue Apr 30 16:03:44 2013
+++ src/sys/rump/include/rump/rumpuser.h	Thu May  2 19:15:01 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumpuser.h,v 1.100 2013/04/30 16:03:44 pooka Exp $	*/
+/*	$NetBSD: rumpuser.h,v 1.101 2013/05/02 19:15:01 pooka Exp $	*/
 
 /*
  * Copyright (c) 2007-2013 Antti Kantee.  All Rights Reserved.
@@ -164,8 +164,9 @@ int  rumpuser_thread_create(void *(*f)(v
 void rumpuser_thread_exit(void) __dead;
 int  rumpuser_thread_join(void *);
 
-void rumpuser_set_curlwp(struct lwp *);
-struct lwp *rumpuser_get_curlwp(void);
+enum rumplwpop { RUMPUSER_LWP_CREATE, RUMPUSER_LWP_DESTROY, RUMPUSER_LWP_SET };
+void rumpuser_curlwpop(enum rumplwpop, struct lwp *);
+struct lwp *rumpuser_curlwp(void);
 
 struct rumpuser_mtx;
 #define RUMPUSER_MTX_SPIN	0x01

Index: src/sys/rump/librump/rumpkern/lwproc.c
diff -u src/sys/rump/librump/rumpkern/lwproc.c:1.21 src/sys/rump/librump/rumpkern/lwproc.c:1.22
--- src/sys/rump/librump/rumpkern/lwproc.c:1.21	Sun Apr 28 23:19:33 2013
+++ src/sys/rump/librump/rumpkern/lwproc.c	Thu May  2 19:15:01 2013
@@ -1,4 +1,4 @@
-/*      $NetBSD: lwproc.c,v 1.21 2013/04/28 23:19:33 pooka Exp $	*/
+/*      $NetBSD: lwproc.c,v 1.22 2013/05/02 19:15:01 pooka Exp $	*/
 
 /*
  * Copyright (c) 2010, 2011 Antti Kantee.  All Rights Reserved.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lwproc.c,v 1.21 2013/04/28 23:19:33 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lwproc.c,v 1.22 2013/05/02 19:15:01 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -196,7 +196,7 @@ lwproc_freelwp(struct lwp *l)
 		KASSERT(p != &proc0);
 		p->p_stat = SDEAD;
 	}
-	cv_broadcast(&p->p_lwpcv); /* nobody sleeps on this in rump? */
+	cv_broadcast(&p->p_lwpcv); /* nobody sleeps on this in a rump kernel? */
 	kauth_cred_free(l->l_cred);
 	mutex_exit(p->p_lock);
 
@@ -208,6 +208,8 @@ lwproc_freelwp(struct lwp *l)
 		kmem_free(l->l_name, MAXCOMLEN);
 	lwp_finispecific(l);
 
+	rumpuser_curlwpop(RUMPUSER_LWP_DESTROY, l);
+	membar_exit();
 	kmem_free(l, sizeof(*l));
 
 	if (p->p_stat == SDEAD)
@@ -241,6 +243,8 @@ lwproc_makelwp(struct proc *p, struct lw
 	lwp_update_creds(l);
 	lwp_initspecific(l);
 
+	membar_enter();
+	rumpuser_curlwpop(RUMPUSER_LWP_CREATE, l);
 	if (doswitch) {
 		rump_lwproc_switch(l);
 	}
@@ -348,13 +352,13 @@ rump_lwproc_switch(struct lwp *newlwp)
 		fd_free();
 	}
 
-	rumpuser_set_curlwp(NULL);
+	rumpuser_curlwpop(RUMPUSER_LWP_SET, NULL);
 
 	newlwp->l_cpu = newlwp->l_target_cpu = l->l_cpu;
 	newlwp->l_mutex = l->l_mutex;
 	newlwp->l_pflag |= LP_RUNNING;
 
-	rumpuser_set_curlwp(newlwp);
+	rumpuser_curlwpop(RUMPUSER_LWP_SET, newlwp);
 
 	/*
 	 * Check if the thread should get a signal.  This is

Index: src/sys/rump/librump/rumpkern/rump.c
diff -u src/sys/rump/librump/rumpkern/rump.c:1.266 src/sys/rump/librump/rumpkern/rump.c:1.267
--- src/sys/rump/librump/rumpkern/rump.c:1.266	Tue Apr 30 16:03:44 2013
+++ src/sys/rump/librump/rumpkern/rump.c	Thu May  2 19:15:01 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: rump.c,v 1.266 2013/04/30 16:03:44 pooka Exp $	*/
+/*	$NetBSD: rump.c,v 1.267 2013/05/02 19:15:01 pooka Exp $	*/
 
 /*
  * Copyright (c) 2007-2011 Antti Kantee.  All Rights Reserved.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rump.c,v 1.266 2013/04/30 16:03:44 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rump.c,v 1.267 2013/05/02 19:15:01 pooka Exp $");
 
 #include <sys/systm.h>
 #define ELFSIZE ARCH_ELFSIZE
@@ -288,7 +288,10 @@ rump_init(void)
 	l->l_lid = 1;
 	l->l_cpu = l->l_target_cpu = rump_cpu;
 	l->l_fd = &filedesc0;
-	rumpuser_set_curlwp(l);
+
+	/* lwp0 isn't created like other threads, so notify hypervisor here */
+	rumpuser_curlwpop(RUMPUSER_LWP_CREATE, l);
+	rumpuser_curlwpop(RUMPUSER_LWP_SET, l);
 
 	rumpuser_mutex_init(&rump_giantlock, RUMPUSER_MTX_SPIN);
 	ksyms_init();
@@ -342,7 +345,7 @@ rump_init(void)
 
 	rump_scheduler_init(numcpu);
 	/* revert temporary context and schedule a semireal context */
-	rumpuser_set_curlwp(NULL);
+	rumpuser_curlwpop(RUMPUSER_LWP_SET, NULL);
 	initproc = &proc0; /* borrow proc0 before we get initproc started */
 	rump_schedule();
 	bootlwp = curlwp;

Index: src/sys/rump/librump/rumpkern/scheduler.c
diff -u src/sys/rump/librump/rumpkern/scheduler.c:1.32 src/sys/rump/librump/rumpkern/scheduler.c:1.33
--- src/sys/rump/librump/rumpkern/scheduler.c:1.32	Sat Apr 27 22:26:57 2013
+++ src/sys/rump/librump/rumpkern/scheduler.c	Thu May  2 19:15:01 2013
@@ -1,4 +1,4 @@
-/*      $NetBSD: scheduler.c,v 1.32 2013/04/27 22:26:57 pooka Exp $	*/
+/*      $NetBSD: scheduler.c,v 1.33 2013/05/02 19:15:01 pooka Exp $	*/
 
 /*
  * Copyright (c) 2010, 2011 Antti Kantee.  All Rights Reserved.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: scheduler.c,v 1.32 2013/04/27 22:26:57 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: scheduler.c,v 1.33 2013/05/02 19:15:01 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -225,7 +225,8 @@ lwp0rele(void)
 
 /*
  * rump_schedule: ensure that the calling host thread has a valid lwp context.
- * ie. ensure that rumpuser_get_curlwp() != NULL.
+ * ie. ensure that curlwp != NULL.  Also, ensure that there
+ * a 1:1 mapping between the lwp and rump kernel cpu.
  */
 void
 rump_schedule()
@@ -239,7 +240,7 @@ rump_schedule()
 	 * for this case -- anyone who cares about performance will
 	 * start a real thread.
 	 */
-	if (__predict_true((l = rumpuser_get_curlwp()) != NULL)) {
+	if (__predict_true((l = rumpuser_curlwp()) != NULL)) {
 		rump_schedule_cpu(l);
 		LWP_CACHE_CREDS(l, l->l_proc);
 	} else {
@@ -247,7 +248,7 @@ rump_schedule()
 
 		/* schedule cpu and use lwp0 */
 		rump_schedule_cpu(&lwp0);
-		rumpuser_set_curlwp(&lwp0);
+		rumpuser_curlwpop(RUMPUSER_LWP_SET, &lwp0);
 
 		/* allocate thread, switch to it, and release lwp0 */
 		l = rump__lwproc_alloclwp(initproc);
@@ -364,7 +365,7 @@ rump_schedule_cpu_interlock(struct lwp *
 void
 rump_unschedule()
 {
-	struct lwp *l = rumpuser_get_curlwp();
+	struct lwp *l = rumpuser_curlwp();
 #ifdef DIAGNOSTIC
 	int nlock;
 
@@ -398,10 +399,10 @@ rump_unschedule()
 		lwp0.l_mutex = &unruntime_lock;
 		lwp0.l_pflag &= ~LP_RUNNING;
 		lwp0rele();
-		rumpuser_set_curlwp(NULL);
+		rumpuser_curlwpop(RUMPUSER_LWP_SET, NULL);
 
 	} else if (__predict_false(l->l_flag & LW_RUMP_CLEAR)) {
-		rumpuser_set_curlwp(NULL);
+		rumpuser_curlwpop(RUMPUSER_LWP_SET, NULL);
 		l->l_flag &= ~LW_RUMP_CLEAR;
 	}
 }

Index: src/sys/rump/librump/rumpkern/threads.c
diff -u src/sys/rump/librump/rumpkern/threads.c:1.20 src/sys/rump/librump/rumpkern/threads.c:1.21
--- src/sys/rump/librump/rumpkern/threads.c:1.20	Tue Apr 30 13:29:28 2013
+++ src/sys/rump/librump/rumpkern/threads.c	Thu May  2 19:15:01 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: threads.c,v 1.20 2013/04/30 13:29:28 pooka Exp $	*/
+/*	$NetBSD: threads.c,v 1.21 2013/05/02 19:15:01 pooka Exp $	*/
 
 /*
  * Copyright (c) 2007-2009 Antti Kantee.  All Rights Reserved.
@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: threads.c,v 1.20 2013/04/30 13:29:28 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: threads.c,v 1.21 2013/05/02 19:15:01 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -73,7 +73,7 @@ threadbouncer(void *arg)
 	}
 
 	/* schedule ourselves */
-	rumpuser_set_curlwp(l);
+	rumpuser_curlwpop(RUMPUSER_LWP_SET, l);
 	rump_schedule();
 
 	/* free dance struct */

Index: src/sys/rump/librump/rumpkern/arch/i386/rumpcpu.c
diff -u src/sys/rump/librump/rumpkern/arch/i386/rumpcpu.c:1.10 src/sys/rump/librump/rumpkern/arch/i386/rumpcpu.c:1.11
--- src/sys/rump/librump/rumpkern/arch/i386/rumpcpu.c:1.10	Tue Feb 19 09:04:54 2013
+++ src/sys/rump/librump/rumpkern/arch/i386/rumpcpu.c	Thu May  2 19:15:01 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumpcpu.c,v 1.10 2013/02/19 09:04:54 martin Exp $	*/
+/*	$NetBSD: rumpcpu.c,v 1.11 2013/05/02 19:15:01 pooka Exp $	*/
 
 /*
  * Copyright (c) 2008 Antti Kantee.  All Rights Reserved.
@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rumpcpu.c,v 1.10 2013/02/19 09:04:54 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rumpcpu.c,v 1.11 2013/05/02 19:15:01 pooka Exp $");
 
 #include <sys/param.h>
 
@@ -65,7 +65,7 @@ struct lwp *
 x86_curlwp()
 {
 
-	return rumpuser_get_curlwp();
+	return rumpuser_curlwp();
 }
 
 void

Reply via email to