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();