Module Name: src
Committed By: pooka
Date: Mon Apr 29 14:51:41 UTC 2013
Modified Files:
src/lib/librumpuser: rumpuser.c rumpuser_bio.c rumpuser_component.c
rumpuser_int.h rumpuser_pth.c rumpuser_sp.c
src/sys/rump/include/rump: rumpuser.h
src/sys/rump/librump/rumpkern: klock.c rump.c
Log Message:
Make the rump kernel upcalls which were previous available only to
the sysproxy module available for the entire hypervisor.
To generate a diff of this commit:
cvs rdiff -u -r1.40 -r1.41 src/lib/librumpuser/rumpuser.c
cvs rdiff -u -r1.3 -r1.4 src/lib/librumpuser/rumpuser_bio.c
cvs rdiff -u -r1.2 -r1.3 src/lib/librumpuser/rumpuser_component.c
cvs rdiff -u -r1.6 -r1.7 src/lib/librumpuser/rumpuser_int.h
cvs rdiff -u -r1.17 -r1.18 src/lib/librumpuser/rumpuser_pth.c
cvs rdiff -u -r1.55 -r1.56 src/lib/librumpuser/rumpuser_sp.c
cvs rdiff -u -r1.92 -r1.93 src/sys/rump/include/rump/rumpuser.h
cvs rdiff -u -r1.5 -r1.6 src/sys/rump/librump/rumpkern/klock.c
cvs rdiff -u -r1.262 -r1.263 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.40 src/lib/librumpuser/rumpuser.c:1.41
--- src/lib/librumpuser/rumpuser.c:1.40 Mon Apr 29 13:21:03 2013
+++ src/lib/librumpuser/rumpuser.c Mon Apr 29 14:51:39 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: rumpuser.c,v 1.40 2013/04/29 13:21:03 pooka Exp $ */
+/* $NetBSD: rumpuser.c,v 1.41 2013/04/29 14:51:39 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.40 2013/04/29 13:21:03 pooka Exp $");
+__RCSID("$NetBSD: rumpuser.c,v 1.41 2013/04/29 14:51:39 pooka Exp $");
#endif /* !lint */
#include <sys/ioctl.h>
@@ -64,12 +64,10 @@ __RCSID("$NetBSD: rumpuser.c,v 1.40 2013
#include "rumpuser_int.h"
-rump_unschedulefn rumpuser__unschedule;
-rump_reschedulefn rumpuser__reschedule;
+struct rumpuser_hyperup rumpuser__hyp;
int
-rumpuser_init(int version,
- rump_reschedulefn rumpkern_resched, rump_unschedulefn rumpkern_unsched)
+rumpuser_init(int version, const struct rumpuser_hyperup *hyp)
{
if (version != RUMPUSER_VERSION) {
@@ -94,9 +92,7 @@ rumpuser_init(int version,
#endif
rumpuser__thrinit();
-
- rumpuser__unschedule = rumpkern_unsched;
- rumpuser__reschedule = rumpkern_resched;
+ rumpuser__hyp = *hyp;
return 0;
}
@@ -465,7 +461,7 @@ rumpuser_clock_sleep(uint64_t sec, uint6
int nlocks;
int rv;
- rumpuser__unschedule(0, &nlocks, NULL);
+ rumpkern_unsched(&nlocks, NULL);
/*LINTED*/
rqt.tv_sec = sec;
@@ -513,7 +509,7 @@ rumpuser_clock_sleep(uint64_t sec, uint6
abort();
}
- rumpuser__reschedule(nlocks, NULL);
+ rumpkern_sched(nlocks, NULL);
return rv;
}
Index: src/lib/librumpuser/rumpuser_bio.c
diff -u src/lib/librumpuser/rumpuser_bio.c:1.3 src/lib/librumpuser/rumpuser_bio.c:1.4
--- src/lib/librumpuser/rumpuser_bio.c:1.3 Mon Apr 29 13:57:46 2013
+++ src/lib/librumpuser/rumpuser_bio.c Mon Apr 29 14:51:39 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: rumpuser_bio.c,v 1.3 2013/04/29 13:57:46 pooka Exp $ */
+/* $NetBSD: rumpuser_bio.c,v 1.4 2013/04/29 14:51:39 pooka Exp $ */
/*-
* Copyright (c) 2013 Antti Kantee. All Rights Reserved.
@@ -88,9 +88,9 @@ dobio(struct rumpuser_bio *biop)
#endif
}
}
- rumpuser__reschedule(0, NULL);
+ rumpkern_sched(0, NULL);
biop->bio_done(biop->bio_donearg, (size_t)rv, error);
- rumpuser__unschedule(0, &dummy, NULL);
+ rumpkern_unsched(&dummy, NULL);
/* paranoia */
biop->bio_donearg = NULL;
@@ -129,7 +129,7 @@ rumpuser_bio(int fd, int op, void *data,
static int usethread = 1;
int nlocks;
- rumpuser__unschedule(0, &nlocks, NULL);
+ rumpkern_unsched(&nlocks, NULL);
if (!inited) {
pthread_mutex_lock(&biomtx);
@@ -175,5 +175,5 @@ rumpuser_bio(int fd, int op, void *data,
pthread_mutex_unlock(&biomtx);
}
- rumpuser__reschedule(nlocks, NULL);
+ rumpkern_sched(nlocks, NULL);
}
Index: src/lib/librumpuser/rumpuser_component.c
diff -u src/lib/librumpuser/rumpuser_component.c:1.2 src/lib/librumpuser/rumpuser_component.c:1.3
--- src/lib/librumpuser/rumpuser_component.c:1.2 Sat Apr 27 14:59:08 2013
+++ src/lib/librumpuser/rumpuser_component.c Mon Apr 29 14:51:39 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: rumpuser_component.c,v 1.2 2013/04/27 14:59:08 pooka Exp $ */
+/* $NetBSD: rumpuser_component.c,v 1.3 2013/04/29 14:51:39 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.2 2013/04/27 14:59:08 pooka Exp $");
+__RCSID("$NetBSD: rumpuser_component.c,v 1.3 2013/04/29 14:51:39 pooka Exp $");
#endif /* !lint */
/*
@@ -47,7 +47,7 @@ rumpuser_component_unschedule(void)
{
int nlocks;
- rumpuser__unschedule(0, &nlocks, NULL);
+ rumpkern_unsched(&nlocks, NULL);
return (void *)(intptr_t)nlocks;
}
@@ -56,5 +56,5 @@ rumpuser_component_schedule(void *cookie
{
int nlocks = (int)(intptr_t)cookie;
- rumpuser__reschedule(nlocks, NULL);
+ rumpkern_sched(nlocks, NULL);
}
Index: src/lib/librumpuser/rumpuser_int.h
diff -u src/lib/librumpuser/rumpuser_int.h:1.6 src/lib/librumpuser/rumpuser_int.h:1.7
--- src/lib/librumpuser/rumpuser_int.h:1.6 Mon Apr 29 12:56:04 2013
+++ src/lib/librumpuser/rumpuser_int.h Mon Apr 29 14:51:39 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: rumpuser_int.h,v 1.6 2013/04/29 12:56:04 pooka Exp $ */
+/* $NetBSD: rumpuser_int.h,v 1.7 2013/04/29 14:51:39 pooka Exp $ */
/*
* Copyright (c) 2008 Antti Kantee. All Rights Reserved.
@@ -29,17 +29,30 @@
#include <rump/rumpuser.h>
-extern rump_unschedulefn rumpuser__unschedule;
-extern rump_reschedulefn rumpuser__reschedule;
-
#define seterror(value) do { if (error) *error = value;} while (/*CONSTCOND*/0)
+extern struct rumpuser_hyperup rumpuser__hyp;
+
+static inline void
+rumpkern_unsched(int *nlocks, void *interlock)
+{
+
+ rumpuser__hyp.hyp_backend_unschedule(0, nlocks, interlock);
+}
+
+static inline void
+rumpkern_sched(int nlocks, void *interlock)
+{
+
+ rumpuser__hyp.hyp_backend_schedule(nlocks, interlock);
+}
+
#define KLOCK_WRAP(a) \
do { \
int nlocks; \
- rumpuser__unschedule(0, &nlocks, NULL); \
+ rumpkern_unsched(&nlocks, NULL); \
a; \
- rumpuser__reschedule(nlocks, NULL); \
+ rumpkern_sched(nlocks, NULL); \
} while (/*CONSTCOND*/0)
#define DOCALL(rvtype, call) \
@@ -57,9 +70,9 @@ do { \
{ \
rvtype rv; \
int nlocks; \
- rumpuser__unschedule(0, &nlocks, NULL); \
+ rumpkern_unsched(&nlocks, NULL); \
rv = call; \
- rumpuser__reschedule(nlocks, NULL); \
+ rumpkern_sched(nlocks, NULL); \
if (rv == -1) \
seterror(errno); \
else \
Index: src/lib/librumpuser/rumpuser_pth.c
diff -u src/lib/librumpuser/rumpuser_pth.c:1.17 src/lib/librumpuser/rumpuser_pth.c:1.18
--- src/lib/librumpuser/rumpuser_pth.c:1.17 Mon Apr 29 12:56:04 2013
+++ src/lib/librumpuser/rumpuser_pth.c Mon Apr 29 14:51:40 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: rumpuser_pth.c,v 1.17 2013/04/29 12:56:04 pooka Exp $ */
+/* $NetBSD: rumpuser_pth.c,v 1.18 2013/04/29 14:51:40 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.17 2013/04/29 12:56:04 pooka Exp $");
+__RCSID("$NetBSD: rumpuser_pth.c,v 1.18 2013/04/29 14:51:40 pooka Exp $");
#endif /* !lint */
#include <assert.h>
@@ -381,11 +381,11 @@ rumpuser_cv_wait(struct rumpuser_cv *cv,
int nlocks;
cv->nwaiters++;
- rumpuser__unschedule(0, &nlocks, mtx);
+ rumpkern_unsched(&nlocks, mtx);
mtxexit(mtx);
NOFAIL_ERRNO(pthread_cond_wait(&cv->pthcv, &mtx->pthmtx));
mtxenter(mtx);
- rumpuser__reschedule(nlocks, mtx);
+ rumpkern_sched(nlocks, mtx);
cv->nwaiters--;
}
@@ -417,7 +417,7 @@ rumpuser_cv_timedwait(struct rumpuser_cv
clock_gettime(CLOCK_REALTIME, &ts);
cv->nwaiters++;
- rumpuser__unschedule(0, &nlocks, mtx);
+ rumpkern_unsched(&nlocks, mtx);
mtxexit(mtx);
ts.tv_sec += sec;
@@ -428,7 +428,7 @@ rumpuser_cv_timedwait(struct rumpuser_cv
}
rv = pthread_cond_timedwait(&cv->pthcv, &mtx->pthmtx, &ts);
mtxenter(mtx);
- rumpuser__reschedule(nlocks, mtx);
+ rumpkern_sched(nlocks, mtx);
cv->nwaiters--;
if (rv != 0 && rv != ETIMEDOUT)
abort();
Index: src/lib/librumpuser/rumpuser_sp.c
diff -u src/lib/librumpuser/rumpuser_sp.c:1.55 src/lib/librumpuser/rumpuser_sp.c:1.56
--- src/lib/librumpuser/rumpuser_sp.c:1.55 Sat Apr 27 17:35:10 2013
+++ src/lib/librumpuser/rumpuser_sp.c Mon Apr 29 14:51:40 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: rumpuser_sp.c,v 1.55 2013/04/27 17:35:10 pooka Exp $ */
+/* $NetBSD: rumpuser_sp.c,v 1.56 2013/04/29 14:51:40 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.55 2013/04/27 17:35:10 pooka Exp $");
+__RCSID("$NetBSD: rumpuser_sp.c,v 1.56 2013/04/29 14:51:40 pooka Exp $");
#endif /* !lint */
#include <sys/types.h>
@@ -83,8 +83,6 @@ static struct spclient spclist[MAXCLI];
static unsigned int disco;
static volatile int spfini;
-static struct rumpuser_sp_ops spops;
-
static char banner[MAXBANNER];
#define PROTOMAJOR 0
@@ -179,18 +177,18 @@ static void
lwproc_switch(struct lwp *l)
{
- spops.spop_schedule();
- spops.spop_lwproc_switch(l);
- spops.spop_unschedule();
+ rumpuser__hyp.hyp_schedule();
+ rumpuser__hyp.hyp_lwproc_switch(l);
+ rumpuser__hyp.hyp_unschedule();
}
static void
lwproc_release(void)
{
- spops.spop_schedule();
- spops.spop_lwproc_release();
- spops.spop_unschedule();
+ rumpuser__hyp.hyp_schedule();
+ rumpuser__hyp.hyp_lwproc_release();
+ rumpuser__hyp.hyp_unschedule();
}
static int
@@ -198,9 +196,9 @@ lwproc_rfork(struct spclient *spc, int f
{
int rv;
- spops.spop_schedule();
- rv = spops.spop_lwproc_rfork(spc, flags, comm);
- spops.spop_unschedule();
+ rumpuser__hyp.hyp_schedule();
+ rv = rumpuser__hyp.hyp_lwproc_rfork(spc, flags, comm);
+ rumpuser__hyp.hyp_unschedule();
return rv;
}
@@ -210,9 +208,9 @@ lwproc_newlwp(pid_t pid)
{
int rv;
- spops.spop_schedule();
- rv = spops.spop_lwproc_newlwp(pid);
- spops.spop_unschedule();
+ rumpuser__hyp.hyp_schedule();
+ rv = rumpuser__hyp.hyp_lwproc_newlwp(pid);
+ rumpuser__hyp.hyp_unschedule();
return rv;
}
@@ -222,9 +220,9 @@ lwproc_curlwp(void)
{
struct lwp *l;
- spops.spop_schedule();
- l = spops.spop_lwproc_curlwp();
- spops.spop_unschedule();
+ rumpuser__hyp.hyp_schedule();
+ l = rumpuser__hyp.hyp_lwproc_curlwp();
+ rumpuser__hyp.hyp_unschedule();
return l;
}
@@ -234,9 +232,9 @@ lwproc_getpid(void)
{
pid_t p;
- spops.spop_schedule();
- p = spops.spop_getpid();
- spops.spop_unschedule();
+ rumpuser__hyp.hyp_schedule();
+ p = rumpuser__hyp.hyp_getpid();
+ rumpuser__hyp.hyp_unschedule();
return p;
}
@@ -245,18 +243,18 @@ static void
lwproc_execnotify(const char *comm)
{
- spops.spop_schedule();
- spops.spop_execnotify(comm);
- spops.spop_unschedule();
+ rumpuser__hyp.hyp_schedule();
+ rumpuser__hyp.hyp_execnotify(comm);
+ rumpuser__hyp.hyp_unschedule();
}
static void
lwproc_lwpexit(void)
{
- spops.spop_schedule();
- spops.spop_lwpexit();
- spops.spop_unschedule();
+ rumpuser__hyp.hyp_schedule();
+ rumpuser__hyp.hyp_lwpexit();
+ rumpuser__hyp.hyp_unschedule();
}
static int
@@ -265,9 +263,9 @@ rumpsyscall(int sysnum, void *data, regi
long retval[2] = {0, 0};
int rv;
- spops.spop_schedule();
- rv = spops.spop_syscall(sysnum, data, retval);
- spops.spop_unschedule();
+ rumpuser__hyp.hyp_schedule();
+ rv = rumpuser__hyp.hyp_syscall(sysnum, data, retval);
+ rumpuser__hyp.hyp_unschedule();
regrv[0] = retval[0];
regrv[1] = retval[1];
@@ -784,7 +782,7 @@ sp_copyin(void *arg, const void *raddr,
void *rdata = NULL; /* XXXuninit */
int rv, nlocks;
- rumpuser__unschedule(0, &nlocks, NULL);
+ rumpkern_unsched(&nlocks, NULL);
rv = copyin_req(spc, raddr, len, wantstr, &rdata);
if (rv)
@@ -794,7 +792,7 @@ sp_copyin(void *arg, const void *raddr,
free(rdata);
out:
- rumpuser__reschedule(nlocks, NULL);
+ rumpkern_sched(nlocks, NULL);
if (rv)
return EFAULT;
return 0;
@@ -820,9 +818,9 @@ sp_copyout(void *arg, const void *laddr,
struct spclient *spc = arg;
int nlocks, rv;
- rumpuser__unschedule(0, &nlocks, NULL);
+ rumpkern_unsched(&nlocks, NULL);
rv = send_copyout_req(spc, raddr, laddr, dlen);
- rumpuser__reschedule(nlocks, NULL);
+ rumpkern_sched(nlocks, NULL);
if (rv)
return EFAULT;
@@ -850,7 +848,7 @@ rumpuser_sp_anonmmap(void *arg, size_t h
void *resp, *rdata;
int nlocks, rv;
- rumpuser__unschedule(0, &nlocks, NULL);
+ rumpkern_unsched(&nlocks, NULL);
rv = anonmmap_req(spc, howmuch, &rdata);
if (rv) {
@@ -868,7 +866,7 @@ rumpuser_sp_anonmmap(void *arg, size_t h
*addr = resp;
out:
- rumpuser__reschedule(nlocks, NULL);
+ rumpkern_sched(nlocks, NULL);
if (rv)
return rv;
@@ -881,9 +879,9 @@ rumpuser_sp_raise(void *arg, int signo)
struct spclient *spc = arg;
int rv, nlocks;
- rumpuser__unschedule(0, &nlocks, NULL);
+ rumpkern_unsched(&nlocks, NULL);
rv = send_raise_req(spc, signo);
- rumpuser__reschedule(nlocks, NULL);
+ rumpkern_sched(nlocks, NULL);
return rv;
}
@@ -1298,7 +1296,7 @@ spserver(void *arg)
static unsigned cleanupidx;
static struct sockaddr *cleanupsa;
int
-rumpuser_sp_init(const char *url, const struct rumpuser_sp_ops *spopsp,
+rumpuser_sp_init(const char *url,
const char *ostype, const char *osrelease, const char *machine)
{
pthread_t pt;
@@ -1323,7 +1321,6 @@ rumpuser_sp_init(const char *url, const
if (s == -1)
return errno;
- spops = *spopsp;
sarg = malloc(sizeof(*sarg));
if (sarg == NULL) {
close(s);
Index: src/sys/rump/include/rump/rumpuser.h
diff -u src/sys/rump/include/rump/rumpuser.h:1.92 src/sys/rump/include/rump/rumpuser.h:1.93
--- src/sys/rump/include/rump/rumpuser.h:1.92 Mon Apr 29 14:07:01 2013
+++ src/sys/rump/include/rump/rumpuser.h Mon Apr 29 14:51:40 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: rumpuser.h,v 1.92 2013/04/29 14:07:01 pooka Exp $ */
+/* $NetBSD: rumpuser.h,v 1.93 2013/04/29 14:51:40 pooka Exp $ */
/*
* Copyright (c) 2007-2013 Antti Kantee. All Rights Reserved.
@@ -36,15 +36,33 @@
#if !defined(_KERNEL) && !defined(LIBRUMPUSER)
#error The rump/rumpuser.h interface is not for non-kernel consumers
#endif
+struct lwp;
/*
* init
*/
#define RUMPUSER_VERSION 16
-typedef void (*rump_reschedulefn)(int, void *);
-typedef void (*rump_unschedulefn)(int, int *, void *);
-int rumpuser_init(int, rump_reschedulefn, rump_unschedulefn);
+
+/* hypervisor upcall routines */
+struct rumpuser_hyperup {
+ void (*hyp_schedule)(void);
+ void (*hyp_unschedule)(void);
+ void (*hyp_backend_unschedule)(int, int *, void *);
+ void (*hyp_backend_schedule)(int, void *);
+ void (*hyp_lwproc_switch)(struct lwp *);
+ void (*hyp_lwproc_release)(void);
+ int (*hyp_lwproc_rfork)(void *, int, const char *);
+ int (*hyp_lwproc_newlwp)(pid_t);
+ struct lwp * (*hyp_lwproc_curlwp)(void);
+ int (*hyp_syscall)(int, void *, long *);
+ void (*hyp_lwpexit)(void);
+ void (*hyp_execnotify)(const char *);
+ pid_t (*hyp_getpid)(void);
+ void *hyp__extra[8];
+};
+int rumpuser_init(int, const struct rumpuser_hyperup *);
+void rumpuser_fini(void);
/*
* memory allocation
@@ -151,7 +169,6 @@ int rumpuser_thread_create(void *(*f)(v
void rumpuser_thread_exit(void) __dead;
int rumpuser_thread_join(void *);
-struct lwp;
void rumpuser_set_curlwp(struct lwp *);
struct lwp *rumpuser_get_curlwp(void);
@@ -210,22 +227,7 @@ int rumpuser_daemonize_done(int);
* syscall proxy
*/
-struct rumpuser_sp_ops {
- void (*spop_schedule)(void);
- void (*spop_unschedule)(void);
-
- void (*spop_lwproc_switch)(struct lwp *);
- void (*spop_lwproc_release)(void);
- int (*spop_lwproc_rfork)(void *, int, const char *);
- int (*spop_lwproc_newlwp)(pid_t);
- struct lwp * (*spop_lwproc_curlwp)(void);
- int (*spop_syscall)(int, void *, long *);
- void (*spop_lwpexit)(void);
- void (*spop_execnotify)(const char *);
- pid_t (*spop_getpid)(void);
-};
-
-int rumpuser_sp_init(const char *, const struct rumpuser_sp_ops *,
+int rumpuser_sp_init(const char *,
const char *, const char *, const char *);
int rumpuser_sp_copyin(void *, const void *, void *, size_t);
int rumpuser_sp_copyinstr(void *, const void *, void *, size_t *);
Index: src/sys/rump/librump/rumpkern/klock.c
diff -u src/sys/rump/librump/rumpkern/klock.c:1.5 src/sys/rump/librump/rumpkern/klock.c:1.6
--- src/sys/rump/librump/rumpkern/klock.c:1.5 Tue Oct 9 13:35:50 2012
+++ src/sys/rump/librump/rumpkern/klock.c Mon Apr 29 14:51:41 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: klock.c,v 1.5 2012/10/09 13:35:50 pooka Exp $ */
+/* $NetBSD: klock.c,v 1.6 2013/04/29 14:51:41 pooka Exp $ */
/*
* Copyright (c) 2007-2010 Antti Kantee. All Rights Reserved.
@@ -29,7 +29,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: klock.c,v 1.5 2012/10/09 13:35:50 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: klock.c,v 1.6 2013/04/29 14:51:41 pooka Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -166,3 +166,14 @@ rump_user_schedule(int nlocks, void *int
if (nlocks)
_kernel_lock(nlocks);
}
+
+void
+rump_user_kthread(void)
+{
+
+ KASSERT(curlwp == NULL);
+ rump_schedule();
+ if (rump_lwproc_newlwp(0) != 0)
+ panic("kthread create failed");
+ rump_unschedule();
+}
Index: src/sys/rump/librump/rumpkern/rump.c
diff -u src/sys/rump/librump/rumpkern/rump.c:1.262 src/sys/rump/librump/rumpkern/rump.c:1.263
--- src/sys/rump/librump/rumpkern/rump.c:1.262 Sun Apr 28 13:17:25 2013
+++ src/sys/rump/librump/rumpkern/rump.c Mon Apr 29 14:51:41 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: rump.c,v 1.262 2013/04/28 13:17:25 pooka Exp $ */
+/* $NetBSD: rump.c,v 1.263 2013/04/29 14:51:41 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.262 2013/04/28 13:17:25 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rump.c,v 1.263 2013/04/29 14:51:41 pooka Exp $");
#include <sys/systm.h>
#define ELFSIZE ARCH_ELFSIZE
@@ -101,10 +101,10 @@ int rump_threads = 0;
int rump_threads = 1;
#endif
-static int rump_proxy_syscall(int, void *, long *);
-static int rump_proxy_rfork(void *, int, const char *);
-static void rump_proxy_lwpexit(void);
-static void rump_proxy_execnotify(const char *);
+static int rump_hyp_syscall(int, void *, long *);
+static int rump_hyp_rfork(void *, int, const char *);
+static void rump_hyp_lwpexit(void);
+static void rump_hyp_execnotify(const char *);
static void rump_component_load(const struct rump_component *);
static struct lwp *bootlwp;
@@ -184,18 +184,20 @@ spgetpid(void)
return curproc->p_pid;
}
-static const struct rumpuser_sp_ops spops = {
- .spop_schedule = rump_schedule,
- .spop_unschedule = rump_unschedule,
- .spop_lwproc_switch = rump_lwproc_switch,
- .spop_lwproc_release = rump_lwproc_releaselwp,
- .spop_lwproc_rfork = rump_proxy_rfork,
- .spop_lwproc_newlwp = rump_lwproc_newlwp,
- .spop_lwproc_curlwp = rump_lwproc_curlwp,
- .spop_lwpexit = rump_proxy_lwpexit,
- .spop_syscall = rump_proxy_syscall,
- .spop_execnotify = rump_proxy_execnotify,
- .spop_getpid = spgetpid,
+static const struct rumpuser_hyperup hyp = {
+ .hyp_schedule = rump_schedule,
+ .hyp_unschedule = rump_unschedule,
+ .hyp_backend_unschedule = rump_user_unschedule,
+ .hyp_backend_schedule = rump_user_schedule,
+ .hyp_lwproc_switch = rump_lwproc_switch,
+ .hyp_lwproc_release = rump_lwproc_releaselwp,
+ .hyp_lwproc_rfork = rump_hyp_rfork,
+ .hyp_lwproc_newlwp = rump_lwproc_newlwp,
+ .hyp_lwproc_curlwp = rump_lwproc_curlwp,
+ .hyp_lwpexit = rump_hyp_lwpexit,
+ .hyp_syscall = rump_hyp_syscall,
+ .hyp_execnotify = rump_hyp_execnotify,
+ .hyp_getpid = spgetpid,
};
int
@@ -247,8 +249,7 @@ rump_init(void)
rump_inited = 1;
/* initialize hypervisor */
- if (rumpuser_init(RUMPUSER_VERSION,
- rump_user_schedule, rump_user_unschedule) != 0) {
+ if (rumpuser_init(RUMPUSER_VERSION, &hyp) != 0) {
rumpuser_dprintf("rumpuser init failed\n");
return EINVAL;
}
@@ -533,7 +534,7 @@ int
rump_init_server(const char *url)
{
- return rumpuser_sp_init(url, &spops, ostype, osrelease, MACHINE);
+ return rumpuser_sp_init(url, ostype, osrelease, MACHINE);
}
void
@@ -776,7 +777,7 @@ rump_kernelfsym_load(void *symtab, uint6
}
static int
-rump_proxy_syscall(int num, void *arg, long *retval)
+rump_hyp_syscall(int num, void *arg, long *retval)
{
register_t regrv[2] = {0, 0};
struct lwp *l;
@@ -796,7 +797,7 @@ rump_proxy_syscall(int num, void *arg, l
}
static int
-rump_proxy_rfork(void *priv, int flags, const char *comm)
+rump_hyp_rfork(void *priv, int flags, const char *comm)
{
struct vmspace *newspace;
struct proc *p;
@@ -825,7 +826,7 @@ rump_proxy_rfork(void *priv, int flags,
* Order all lwps in a process to exit. does *not* wait for them to drain.
*/
static void
-rump_proxy_lwpexit(void)
+rump_hyp_lwpexit(void)
{
struct proc *p = curproc;
uint64_t where;
@@ -877,7 +878,7 @@ rump_proxy_lwpexit(void)
* Notify process that all threads have been drained and exec is complete.
*/
static void
-rump_proxy_execnotify(const char *comm)
+rump_hyp_execnotify(const char *comm)
{
struct proc *p = curproc;