Module Name:    src
Committed By:   pooka
Date:           Sat Apr 27 14:59:09 UTC 2013

Modified Files:
        src/lib/librumpuser: rumpuser.c rumpuser_component.c rumpuser_int.h
            rumpuser_pth.c rumpuser_pth_dummy.c rumpuser_sp.c
        src/sys/rump/include/rump: rumpuser.h
        src/sys/rump/librump/rumpkern: rump.c

Log Message:
* integrate rumpuser_getversion() with the hypervisor initialization
* rename some identifiers to better match reality


To generate a diff of this commit:
cvs rdiff -u -r1.29 -r1.30 src/lib/librumpuser/rumpuser.c
cvs rdiff -u -r1.1 -r1.2 src/lib/librumpuser/rumpuser_component.c
cvs rdiff -u -r1.4 -r1.5 src/lib/librumpuser/rumpuser_int.h
cvs rdiff -u -r1.13 -r1.14 src/lib/librumpuser/rumpuser_pth.c
cvs rdiff -u -r1.8 -r1.9 src/lib/librumpuser/rumpuser_pth_dummy.c
cvs rdiff -u -r1.51 -r1.52 src/lib/librumpuser/rumpuser_sp.c
cvs rdiff -u -r1.77 -r1.78 src/sys/rump/include/rump/rumpuser.h
cvs rdiff -u -r1.257 -r1.258 src/sys/rump/librump/rumpkern/rump.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.c
diff -u src/lib/librumpuser/rumpuser.c:1.29 src/lib/librumpuser/rumpuser.c:1.30
--- src/lib/librumpuser/rumpuser.c:1.29	Mon Mar 18 21:00:52 2013
+++ src/lib/librumpuser/rumpuser.c	Sat Apr 27 14:59:08 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumpuser.c,v 1.29 2013/03/18 21:00:52 pooka Exp $	*/
+/*	$NetBSD: rumpuser.c,v 1.30 2013/04/27 14:59:08 pooka Exp $	*/
 
 /*
  * Copyright (c) 2007-2010 Antti Kantee.  All Rights Reserved.
@@ -28,7 +28,7 @@
 #include "rumpuser_port.h"
 
 #if !defined(lint)
-__RCSID("$NetBSD: rumpuser.c,v 1.29 2013/03/18 21:00:52 pooka Exp $");
+__RCSID("$NetBSD: rumpuser.c,v 1.30 2013/04/27 14:59:08 pooka Exp $");
 #endif /* !lint */
 
 #include <sys/ioctl.h>
@@ -66,11 +66,41 @@ __RCSID("$NetBSD: rumpuser.c,v 1.29 2013
 
 #include "rumpuser_int.h"
 
+rump_unschedulefn	rumpuser__unschedule;
+rump_reschedulefn	rumpuser__reschedule;
+
 int
-rumpuser_getversion(void)
+rumpuser_init(int version,
+	rump_reschedulefn rumpkern_resched, rump_unschedulefn rumpkern_unsched)
 {
 
-	return RUMPUSER_VERSION;
+	if (version != RUMPUSER_VERSION) {
+		fprintf(stderr, "rumpuser mismatch, kern: %d, hypervisor %d\n",
+		    version, RUMPUSER_VERSION);
+		return 1;
+	}
+
+#ifdef RUMPUSER_USE_RANDOM
+	uint32_t rv;
+	int fd;
+
+	if ((fd = open("/dev/urandom", O_RDONLY)) == -1) {
+		srandom(time(NULL));
+	} else {
+		if (read(fd, &rv, sizeof(rv)) != sizeof(rv))
+			srandom(time(NULL));
+		else
+			srandom(rv);
+		close(fd);
+	}
+#endif
+
+	rumpuser__thrinit();
+
+	rumpuser__unschedule = rumpkern_unsched;
+	rumpuser__reschedule = rumpkern_resched;
+
+	return 0;
 }
 
 int

Index: src/lib/librumpuser/rumpuser_component.c
diff -u src/lib/librumpuser/rumpuser_component.c:1.1 src/lib/librumpuser/rumpuser_component.c:1.2
--- src/lib/librumpuser/rumpuser_component.c:1.1	Fri Mar  1 18:15:36 2013
+++ src/lib/librumpuser/rumpuser_component.c	Sat Apr 27 14:59:08 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumpuser_component.c,v 1.1 2013/03/01 18:15:36 pooka Exp $	*/
+/*	$NetBSD: rumpuser_component.c,v 1.2 2013/04/27 14:59:08 pooka Exp $	*/
 
 /*
  * Copyright (c) 2013 Antti Kantee.  All Rights Reserved.
@@ -28,7 +28,7 @@
 #include "rumpuser_port.h"
 
 #if !defined(lint)
-__RCSID("$NetBSD: rumpuser_component.c,v 1.1 2013/03/01 18:15:36 pooka Exp $");
+__RCSID("$NetBSD: rumpuser_component.c,v 1.2 2013/04/27 14:59:08 pooka Exp $");
 #endif /* !lint */
 
 /*
@@ -47,7 +47,7 @@ rumpuser_component_unschedule(void)
 {
 	int nlocks;
 
-	rumpuser__kunlock(0, &nlocks, NULL);
+	rumpuser__unschedule(0, &nlocks, NULL);
 	return (void *)(intptr_t)nlocks;
 }
 
@@ -56,5 +56,5 @@ rumpuser_component_schedule(void *cookie
 {
 	int nlocks = (int)(intptr_t)cookie;
 
-	rumpuser__klock(nlocks, NULL);
+	rumpuser__reschedule(nlocks, NULL);
 }

Index: src/lib/librumpuser/rumpuser_int.h
diff -u src/lib/librumpuser/rumpuser_int.h:1.4 src/lib/librumpuser/rumpuser_int.h:1.5
--- src/lib/librumpuser/rumpuser_int.h:1.4	Mon Nov 15 15:23:32 2010
+++ src/lib/librumpuser/rumpuser_int.h	Sat Apr 27 14:59:08 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumpuser_int.h,v 1.4 2010/11/15 15:23:32 pooka Exp $	*/
+/*	$NetBSD: rumpuser_int.h,v 1.5 2013/04/27 14:59:08 pooka Exp $	*/
 
 /*
  * Copyright (c) 2008 Antti Kantee.  All Rights Reserved.
@@ -29,18 +29,17 @@
 
 #include <rump/rumpuser.h>
 
-extern kernel_lockfn rumpuser__klock;
-extern kernel_unlockfn rumpuser__kunlock;
-extern int rumpuser__wantthreads;
+extern rump_unschedulefn rumpuser__unschedule;
+extern rump_reschedulefn rumpuser__reschedule;
 
 #define seterror(value) do { if (error) *error = value;} while (/*CONSTCOND*/0)
 
 #define KLOCK_WRAP(a)							\
 do {									\
 	int nlocks;							\
-	rumpuser__kunlock(0, &nlocks, NULL);				\
+	rumpuser__unschedule(0, &nlocks, NULL);				\
 	a;								\
-	rumpuser__klock(nlocks, NULL);					\
+	rumpuser__reschedule(nlocks, NULL);				\
 } while (/*CONSTCOND*/0)
 
 #define DOCALL(rvtype, call)						\
@@ -58,12 +57,14 @@ do {									\
 {									\
 	rvtype rv;							\
 	int nlocks;							\
-	rumpuser__kunlock(0, &nlocks, NULL);				\
+	rumpuser__unschedule(0, &nlocks, NULL);				\
 	rv = call;							\
-	rumpuser__klock(nlocks, NULL);					\
+	rumpuser__reschedule(nlocks, NULL);				\
 	if (rv == -1)							\
 		seterror(errno);					\
 	else								\
 		seterror(0);						\
 	return rv;							\
 }
+
+void rumpuser__thrinit(void);

Index: src/lib/librumpuser/rumpuser_pth.c
diff -u src/lib/librumpuser/rumpuser_pth.c:1.13 src/lib/librumpuser/rumpuser_pth.c:1.14
--- src/lib/librumpuser/rumpuser_pth.c:1.13	Sat Apr 27 13:59:46 2013
+++ src/lib/librumpuser/rumpuser_pth.c	Sat Apr 27 14:59:08 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumpuser_pth.c,v 1.13 2013/04/27 13:59:46 pooka Exp $	*/
+/*	$NetBSD: rumpuser_pth.c,v 1.14 2013/04/27 14:59:08 pooka Exp $	*/
 
 /*
  * Copyright (c) 2007-2010 Antti Kantee.  All Rights Reserved.
@@ -28,7 +28,7 @@
 #include "rumpuser_port.h"
 
 #if !defined(lint)
-__RCSID("$NetBSD: rumpuser_pth.c,v 1.13 2013/04/27 13:59:46 pooka Exp $");
+__RCSID("$NetBSD: rumpuser_pth.c,v 1.14 2013/04/27 14:59:08 pooka Exp $");
 #endif /* !lint */
 
 #include <assert.h>
@@ -113,9 +113,14 @@ struct rumpuser_cv rumpuser_aio_cv;
 int rumpuser_aio_head, rumpuser_aio_tail;
 struct rumpuser_aio rumpuser_aios[N_AIOS];
 
-kernel_lockfn	rumpuser__klock;
-kernel_unlockfn	rumpuser__kunlock;
-int		rumpuser__wantthreads;
+void
+rumpuser__thrinit(void)
+{
+
+	pthread_mutex_init(&rumpuser_aio_mtx.pthmtx, NULL);
+	pthread_cond_init(&rumpuser_aio_cv.pthcv, NULL);
+	pthread_key_create(&curlwpkey, NULL);
+}
 
 void
 /*ARGSUSED*/
@@ -127,7 +132,7 @@ rumpuser_biothread(void *arg)
 	int error, dummy;
 
 	/* unschedule from CPU.  we reschedule before running the interrupt */
-	rumpuser__kunlock(0, &dummy, NULL);
+	rumpuser__unschedule(0, &dummy, NULL);
 	assert(dummy == 0);
 
 	NOFAIL_ERRNO(pthread_mutex_lock(&rumpuser_aio_mtx.pthmtx));
@@ -165,9 +170,9 @@ rumpuser_biothread(void *arg)
 #endif
 			}
 		}
-		rumpuser__klock(0, NULL);
+		rumpuser__reschedule(0, NULL);
 		biodone(rua->rua_bp, (size_t)rv, error);
-		rumpuser__kunlock(0, &dummy, NULL);
+		rumpuser__unschedule(0, &dummy, NULL);
 
 		rua->rua_bp = NULL;
 
@@ -181,44 +186,6 @@ rumpuser_biothread(void *arg)
 	abort();
 }
 
-void
-rumpuser_thrinit(kernel_lockfn lockfn, kernel_unlockfn unlockfn, int threads)
-{
-#ifdef RUMPUSER_USE_RANDOM
-	/* XXX: there's no rumpuser_bootstrap, so do this here */
-	uint32_t rv;
-	int fd;
-
-	if ((fd = open("/dev/urandom", O_RDONLY)) == -1) {
-		srandom(time(NULL));
-	} else {
-		if (read(fd, &rv, sizeof(rv)) != sizeof(rv))
-			srandom(time(NULL));
-		else
-			srandom(rv);
-		close(fd);
-	}
-#endif
-
-	pthread_mutex_init(&rumpuser_aio_mtx.pthmtx, NULL);
-	pthread_cond_init(&rumpuser_aio_cv.pthcv, NULL);
-
-	pthread_key_create(&curlwpkey, NULL);
-
-	rumpuser__klock = lockfn;
-	rumpuser__kunlock = unlockfn;
-	rumpuser__wantthreads = threads;
-}
-
-#if 0
-void
-rumpuser__thrdestroy(void)
-{
-
-	pthread_key_delete(curlwpkey);
-}
-#endif
-
 int
 rumpuser_thread_create(void *(*f)(void *), void *arg, const char *thrname,
 	int joinable, void **ptcookie)
@@ -504,11 +471,11 @@ rumpuser_cv_wait(struct rumpuser_cv *cv,
 	int nlocks;
 
 	cv->nwaiters++;
-	rumpuser__kunlock(0, &nlocks, mtx);
+	rumpuser__unschedule(0, &nlocks, mtx);
 	mtxexit(mtx);
 	NOFAIL_ERRNO(pthread_cond_wait(&cv->pthcv, &mtx->pthmtx));
 	mtxenter(mtx);
-	rumpuser__klock(nlocks, mtx);
+	rumpuser__reschedule(nlocks, mtx);
 	cv->nwaiters--;
 }
 
@@ -534,11 +501,11 @@ rumpuser_cv_timedwait(struct rumpuser_cv
 	ts.tv_sec = sec; ts.tv_nsec = nsec;
 
 	cv->nwaiters++;
-	rumpuser__kunlock(0, &nlocks, mtx);
+	rumpuser__unschedule(0, &nlocks, mtx);
 	mtxexit(mtx);
 	rv = pthread_cond_timedwait(&cv->pthcv, &mtx->pthmtx, &ts);
 	mtxenter(mtx);
-	rumpuser__klock(nlocks, mtx);
+	rumpuser__reschedule(nlocks, mtx);
 	cv->nwaiters--;
 	if (rv != 0 && rv != ETIMEDOUT)
 		abort();

Index: src/lib/librumpuser/rumpuser_pth_dummy.c
diff -u src/lib/librumpuser/rumpuser_pth_dummy.c:1.8 src/lib/librumpuser/rumpuser_pth_dummy.c:1.9
--- src/lib/librumpuser/rumpuser_pth_dummy.c:1.8	Sat Apr 27 13:59:46 2013
+++ src/lib/librumpuser/rumpuser_pth_dummy.c	Sat Apr 27 14:59:08 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumpuser_pth_dummy.c,v 1.8 2013/04/27 13:59:46 pooka Exp $	*/
+/*	$NetBSD: rumpuser_pth_dummy.c,v 1.9 2013/04/27 14:59:08 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.8 2013/04/27 13:59:46 pooka Exp $");
+__RCSID("$NetBSD: rumpuser_pth_dummy.c,v 1.9 2013/04/27 14:59:08 pooka Exp $");
 #endif /* !lint */
 
 #include <sys/time.h>
@@ -63,16 +63,11 @@ struct rumpuser_cv rumpuser_aio_cv;
 int rumpuser_aio_head, rumpuser_aio_tail;
 struct rumpuser_aio rumpuser_aios[N_AIOS];
 
-kernel_lockfn	rumpuser__klock;
-kernel_unlockfn	rumpuser__kunlock;
-
-/*ARGSUSED*/
 void
-rumpuser_thrinit(kernel_lockfn lockfn, kernel_unlockfn unlockfn, int threads)
+rumpuser__thrinit(void)
 {
 
-	rumpuser__klock = lockfn;
-	rumpuser__kunlock = unlockfn;
+	return;
 }
 
 /*ARGSUSED*/

Index: src/lib/librumpuser/rumpuser_sp.c
diff -u src/lib/librumpuser/rumpuser_sp.c:1.51 src/lib/librumpuser/rumpuser_sp.c:1.52
--- src/lib/librumpuser/rumpuser_sp.c:1.51	Mon Jan 14 21:00:16 2013
+++ src/lib/librumpuser/rumpuser_sp.c	Sat Apr 27 14:59:08 2013
@@ -1,4 +1,4 @@
-/*      $NetBSD: rumpuser_sp.c,v 1.51 2013/01/14 21:00:16 pooka Exp $	*/
+/*      $NetBSD: rumpuser_sp.c,v 1.52 2013/04/27 14:59:08 pooka Exp $	*/
 
 /*
  * Copyright (c) 2010, 2011 Antti Kantee.  All Rights Reserved.
@@ -37,7 +37,7 @@
 #include "rumpuser_port.h"
 
 #if !defined(lint)
-__RCSID("$NetBSD: rumpuser_sp.c,v 1.51 2013/01/14 21:00:16 pooka Exp $");
+__RCSID("$NetBSD: rumpuser_sp.c,v 1.52 2013/04/27 14:59:08 pooka Exp $");
 #endif /* !lint */
 
 #include <sys/types.h>
@@ -781,7 +781,7 @@ sp_copyin(void *arg, const void *raddr, 
 	void *rdata = NULL; /* XXXuninit */
 	int rv, nlocks;
 
-	rumpuser__kunlock(0, &nlocks, NULL);
+	rumpuser__unschedule(0, &nlocks, NULL);
 
 	rv = copyin_req(spc, raddr, len, wantstr, &rdata);
 	if (rv)
@@ -791,7 +791,7 @@ sp_copyin(void *arg, const void *raddr, 
 	free(rdata);
 
  out:
-	rumpuser__klock(nlocks, NULL);
+	rumpuser__reschedule(nlocks, NULL);
 	if (rv)
 		return EFAULT;
 	return 0;
@@ -817,9 +817,9 @@ sp_copyout(void *arg, const void *laddr,
 	struct spclient *spc = arg;
 	int nlocks, rv;
 
-	rumpuser__kunlock(0, &nlocks, NULL);
+	rumpuser__unschedule(0, &nlocks, NULL);
 	rv = send_copyout_req(spc, raddr, laddr, dlen);
-	rumpuser__klock(nlocks, NULL);
+	rumpuser__reschedule(nlocks, NULL);
 
 	if (rv)
 		return EFAULT;
@@ -847,7 +847,7 @@ rumpuser_sp_anonmmap(void *arg, size_t h
 	void *resp, *rdata;
 	int nlocks, rv;
 
-	rumpuser__kunlock(0, &nlocks, NULL);
+	rumpuser__unschedule(0, &nlocks, NULL);
 
 	rv = anonmmap_req(spc, howmuch, &rdata);
 	if (rv) {
@@ -865,7 +865,7 @@ rumpuser_sp_anonmmap(void *arg, size_t h
 	*addr = resp;
 
  out:
-	rumpuser__klock(nlocks, NULL);
+	rumpuser__reschedule(nlocks, NULL);
 
 	if (rv)
 		return rv;
@@ -878,9 +878,9 @@ rumpuser_sp_raise(void *arg, int signo)
 	struct spclient *spc = arg;
 	int rv, nlocks;
 
-	rumpuser__kunlock(0, &nlocks, NULL);
+	rumpuser__unschedule(0, &nlocks, NULL);
 	rv = send_raise_req(spc, signo);
-	rumpuser__klock(nlocks, NULL);
+	rumpuser__reschedule(nlocks, NULL);
 
 	return rv;
 }

Index: src/sys/rump/include/rump/rumpuser.h
diff -u src/sys/rump/include/rump/rumpuser.h:1.77 src/sys/rump/include/rump/rumpuser.h:1.78
--- src/sys/rump/include/rump/rumpuser.h:1.77	Sat Apr 27 14:02:17 2013
+++ src/sys/rump/include/rump/rumpuser.h	Sat Apr 27 14:59:09 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumpuser.h,v 1.77 2013/04/27 14:02:17 pooka Exp $	*/
+/*	$NetBSD: rumpuser.h,v 1.78 2013/04/27 14:59:09 pooka Exp $	*/
 
 /*
  * Copyright (c) 2007-2011 Antti Kantee.  All Rights Reserved.
@@ -39,15 +39,15 @@
 #endif
 
 #define RUMPUSER_VERSION 16
-int rumpuser_getversion(void);
 
 int rumpuser_daemonize_begin(void);
 int rumpuser_daemonize_done(int);
 
 struct pollfd;
 
-typedef void (*kernel_lockfn)(int, void *);
-typedef void (*kernel_unlockfn)(int, int *, void *);
+typedef void (*rump_reschedulefn)(int, void *);
+typedef void (*rump_unschedulefn)(int, int *, void *);
+int rumpuser_init(int, rump_reschedulefn, rump_unschedulefn);
 
 int rumpuser_getfileinfo(const char *, uint64_t *, int *, int *);
 #define RUMPUSER_FT_OTHER 0
@@ -129,8 +129,6 @@ int rumpuser_getnhostcpu(void);
 
 uint32_t rumpuser_arc4random(void);
 
-/* rumpuser_pth */
-void rumpuser_thrinit(kernel_lockfn, kernel_unlockfn, int);
 __dead void rumpuser_biothread(void *);
 
 int  rumpuser_thread_create(void *(*f)(void *), void *, const char *, int,

Index: src/sys/rump/librump/rumpkern/rump.c
diff -u src/sys/rump/librump/rumpkern/rump.c:1.257 src/sys/rump/librump/rumpkern/rump.c:1.258
--- src/sys/rump/librump/rumpkern/rump.c:1.257	Sun Mar 10 17:05:12 2013
+++ src/sys/rump/librump/rumpkern/rump.c	Sat Apr 27 14:59:09 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: rump.c,v 1.257 2013/03/10 17:05:12 pooka Exp $	*/
+/*	$NetBSD: rump.c,v 1.258 2013/04/27 14:59:09 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.257 2013/03/10 17:05:12 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rump.c,v 1.258 2013/04/27 14:59:09 pooka Exp $");
 
 #include <sys/systm.h>
 #define ELFSIZE ARCH_ELFSIZE
@@ -246,18 +246,21 @@ rump__init(int rump_version)
 	else
 		rump_inited = 1;
 
-	if (rumpuser_getversion() != RUMPUSER_VERSION) {
-		/* let's hope the ABI of rumpuser_dprintf is the same ;) */
-		rumpuser_dprintf("rumpuser version mismatch: %d vs. %d\n",
-		    rumpuser_getversion(), RUMPUSER_VERSION);
-		return EPROGMISMATCH;
+	/* initialize hypervisor */
+	if (rumpuser_init(RUMPUSER_VERSION,
+	    rump_user_schedule, rump_user_unschedule) != 0) {
+		rumpuser_dprintf("rumpuser init failed\n");
+		return EINVAL;
 	}
 
+	/* retrieve env vars which affect the early stage of bootstrap */
+	if (rumpuser_getenv("RUMP_THREADS", buf, sizeof(buf), &error) == 0) {
+		rump_threads = *buf != '0';
+	}
 	if (rumpuser_getenv("RUMP_VERBOSE", buf, sizeof(buf), &error) == 0) {
 		if (*buf != '0')
 			boothowto = AB_VERBOSE;
 	}
-
 	if (rumpuser_getenv("RUMP_NCPU", buf, sizeof(buf), &error) == 0)
 		error = 0;
 	if (error == 0) {
@@ -267,6 +270,7 @@ rump__init(int rump_version)
 	} else {
 		numcpu = rumpuser_getnhostcpu();
 	}
+
 	rump_thread_init();
 	rump_cpus_bootstrap(&numcpu);
 
@@ -283,11 +287,6 @@ rump__init(int rump_version)
 		return EPROGMISMATCH;
 	}
 
-	if (rumpuser_getenv("RUMP_THREADS", buf, sizeof(buf), &error) == 0) {
-		rump_threads = *buf != '0';
-	}
-	rumpuser_thrinit(rump_user_schedule, rump_user_unschedule,
-	    rump_threads);
 	rump_intr_init(numcpu);
 	rump_tsleep_init();
 

Reply via email to