Module Name: src Committed By: pooka Date: Mon Apr 29 15:20:05 UTC 2013
Modified Files: src/lib/librumpuser: rumpuser_component.c rumpuser_component.h Log Message: Give private hypercalls the ability to meddle with kthread contexts too. To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/lib/librumpuser/rumpuser_component.c cvs rdiff -u -r1.1 -r1.2 src/lib/librumpuser/rumpuser_component.h 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_component.c diff -u src/lib/librumpuser/rumpuser_component.c:1.3 src/lib/librumpuser/rumpuser_component.c:1.4 --- src/lib/librumpuser/rumpuser_component.c:1.3 Mon Apr 29 14:51:39 2013 +++ src/lib/librumpuser/rumpuser_component.c Mon Apr 29 15:20:05 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: rumpuser_component.c,v 1.3 2013/04/29 14:51:39 pooka Exp $ */ +/* $NetBSD: rumpuser_component.c,v 1.4 2013/04/29 15:20:05 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.3 2013/04/29 14:51:39 pooka Exp $"); +__RCSID("$NetBSD: rumpuser_component.c,v 1.4 2013/04/29 15:20:05 pooka Exp $"); #endif /* !lint */ /* @@ -58,3 +58,42 @@ rumpuser_component_schedule(void *cookie rumpkern_sched(nlocks, NULL); } + +void +rumpuser_component_kthread(void) +{ + + rumpuser__hyp.hyp_schedule(); + rumpuser__hyp.hyp_lwproc_newlwp(0); + rumpuser__hyp.hyp_unschedule(); +} + +struct lwp * +rumpuser_component_curlwp(void) +{ + struct lwp *l; + + rumpuser__hyp.hyp_schedule(); + l = rumpuser__hyp.hyp_lwproc_curlwp(); + rumpuser__hyp.hyp_unschedule(); + + return l; +} + +void +rumpuser_component_switchlwp(struct lwp *l) +{ + + rumpuser__hyp.hyp_schedule(); + rumpuser__hyp.hyp_lwproc_switch(l); + rumpuser__hyp.hyp_unschedule(); +} + +void +rumpuser_component_kthread_release(void) +{ + + rumpuser__hyp.hyp_schedule(); + rumpuser__hyp.hyp_lwproc_release(); + rumpuser__hyp.hyp_unschedule(); +} Index: src/lib/librumpuser/rumpuser_component.h diff -u src/lib/librumpuser/rumpuser_component.h:1.1 src/lib/librumpuser/rumpuser_component.h:1.2 --- src/lib/librumpuser/rumpuser_component.h:1.1 Fri Mar 1 18:15:36 2013 +++ src/lib/librumpuser/rumpuser_component.h Mon Apr 29 15:20:05 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: rumpuser_component.h,v 1.1 2013/03/01 18:15:36 pooka Exp $ */ +/* $NetBSD: rumpuser_component.h,v 1.2 2013/04/29 15:20:05 pooka Exp $ */ /* * Copyright (c) 2013 Antti Kantee. All Rights Reserved. @@ -31,4 +31,9 @@ void * rumpuser_component_unschedule(void); void rumpuser_component_schedule(void *); +void rumpuser_component_kthread(void); +struct lwp *rumpuser_component_curlwp(void); +void rumpuser_component_switchlwp(struct lwp *); +void rumpuser_component_kthread_release(void); + #endif /* _RUMP_RUMPUSER_COMPONENT_H_ */