Module Name:    src
Committed By:   pooka
Date:           Wed Sep  1 19:40:35 UTC 2010

Modified Files:
        src/lib/libp2k: p2k.c
        src/lib/libukfs: ukfs.c

Log Message:
update to new rump proc/lwp interfaces


To generate a diff of this commit:
cvs rdiff -u -r1.41 -r1.42 src/lib/libp2k/p2k.c
cvs rdiff -u -r1.52 -r1.53 src/lib/libukfs/ukfs.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/libp2k/p2k.c
diff -u src/lib/libp2k/p2k.c:1.41 src/lib/libp2k/p2k.c:1.42
--- src/lib/libp2k/p2k.c:1.41	Thu Jun 24 13:03:05 2010
+++ src/lib/libp2k/p2k.c	Wed Sep  1 19:40:35 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: p2k.c,v 1.41 2010/06/24 13:03:05 hannken Exp $	*/
+/*	$NetBSD: p2k.c,v 1.42 2010/09/01 19:40:35 pooka Exp $	*/
 
 /*
  * Copyright (c) 2007, 2008, 2009  Antti Kantee.  All Rights Reserved.
@@ -141,7 +141,7 @@
 	cred = cred_create(pcn->pcn_cred);
 	/* LINTED: prehistoric types in first two args */
 	return rump_pub_makecn(pcn->pcn_nameiop, pcn->pcn_flags | myflags,
-	    pcn->pcn_name, pcn->pcn_namelen, cred, rump_pub_lwp_curlwp());
+	    pcn->pcn_name, pcn->pcn_namelen, cred, rump_pub_lwproc_curlwp());
 }
 
 static __inline void
@@ -158,15 +158,7 @@
 	lwpid_t lid;
 
 	puffs_cc_getcaller(puffs_cc_getcc(pu), &pid, &lid);
-	rump_pub_lwp_alloc_and_switch(pid, lid);
-}
-
-/*ARGSUSED*/
-static void
-clearlwp(struct puffs_usermount *pu)
-{
-
-	rump_pub_lwp_release(rump_pub_lwp_curlwp());
+	rump_pub_allbetsareoff_setid(pid, lid);
 }
 
 static __inline struct p2k_vp_hash *
@@ -372,6 +364,8 @@
 	if (p2m)
 		rump_init();
 
+	rump_pub_lwproc_newproc();
+
 	return p2m;
 }
 
@@ -463,7 +457,7 @@
 	puffs_setfhsize(pu, 0, PUFFS_FHFLAG_PASSTHROUGH);
 	puffs_setstacksize(pu, PUFFS_STACKSIZE_MIN);
 	puffs_fakecc = 1;
-	puffs_set_prepost(pu, makelwp, clearlwp);
+	puffs_set_prepost(pu, makelwp, NULL);
 	puffs_set_errnotify(pu, p2k_errcatcher);
 
 	puffs_setspecific(pu, p2m);
@@ -568,11 +562,14 @@
 {
 	struct p2k_mount *p2m = puffs_getspecific(pu);
 	struct ukfs *fs = p2m->p2m_ukfs;
+	struct lwp *l;
 	int error = 0;
 
-	rump_pub_lwp_release(rump_pub_lwp_curlwp()); /* ukfs & curlwp tricks */
-
 	rump_pub_vp_rele(p2m->p2m_rvp);
+
+	l = rump_pub_lwproc_curlwp();
+	rump_pub_lwproc_switch(NULL); /* ukfs & curlwp tricks */
+
 	if (fs) {
 		if (ukfs_release(fs, 0) != 0) {
 			ukfs_release(fs, UKFS_RELFLAG_FORCE);
@@ -580,6 +577,7 @@
 		}
 	}
 	p2m->p2m_ukfs = NULL;
+	rump_pub_lwproc_switch(l);
 
 	if (p2m->p2m_hasdebug) {
 		printf("-- rump kernel event counters --\n");
@@ -587,7 +585,6 @@
 		printf("-- end of event counters --\n");
 	}
 
-	rump_pub_lwp_alloc_and_switch(0, 0);
 	return error;
 }
 

Index: src/lib/libukfs/ukfs.c
diff -u src/lib/libukfs/ukfs.c:1.52 src/lib/libukfs/ukfs.c:1.53
--- src/lib/libukfs/ukfs.c:1.52	Mon Jul 19 15:35:38 2010
+++ src/lib/libukfs/ukfs.c	Wed Sep  1 19:40:34 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: ukfs.c,v 1.52 2010/07/19 15:35:38 pooka Exp $	*/
+/*	$NetBSD: ukfs.c,v 1.53 2010/09/01 19:40:34 pooka Exp $	*/
 
 /*
  * Copyright (c) 2007, 2008, 2009  Antti Kantee.  All Rights Reserved.
@@ -74,7 +74,6 @@
 	void *ukfs_specific;
 
 	pthread_spinlock_t ukfs_spin;
-	pid_t ukfs_nextpid;
 	struct vnode *ukfs_cdir;
 	int ukfs_devfd;
 	char *ukfs_devpath;
@@ -124,26 +123,12 @@
 #define pthread_spin_destroy(a)
 #endif
 
-static pid_t
-nextpid(struct ukfs *ukfs)
-{
-	pid_t npid;
-
-	pthread_spin_lock(&ukfs->ukfs_spin);
-	if (ukfs->ukfs_nextpid == 0)
-		ukfs->ukfs_nextpid++;
-	npid = ukfs->ukfs_nextpid++;
-	pthread_spin_unlock(&ukfs->ukfs_spin);
-
-	return npid;
-}
-
 static void
 precall(struct ukfs *ukfs)
 {
 	struct vnode *rvp, *cvp;
 
-	rump_pub_lwp_alloc_and_switch(nextpid(ukfs), 1);
+	rump_pub_lwproc_newproc();
 	rvp = ukfs_getrvp(ukfs);
 	pthread_spin_lock(&ukfs->ukfs_spin);
 	cvp = ukfs->ukfs_cdir;
@@ -160,7 +145,8 @@
 	rvp = ukfs_getrvp(ukfs);
 	rump_pub_rcvp_set(NULL, rvp);
 	rump_pub_vp_rele(rvp);
-	rump_pub_lwp_release(rump_pub_lwp_curlwp());
+
+	rump_pub_lwproc_releaselwp();
 }
 
 struct ukfs_part {
@@ -685,19 +671,19 @@
 		mntflag = 0;
 		if (flags & UKFS_RELFLAG_FORCE)
 			mntflag = MNT_FORCE;
-		rump_pub_lwp_alloc_and_switch(nextpid(fs), 1);
+		rump_pub_lwproc_newproc();
 		rump_pub_vp_rele(fs->ukfs_rvp);
 		fs->ukfs_rvp = NULL;
 		rv = rump_sys_unmount(fs->ukfs_mountpath, mntflag);
 		if (rv == -1) {
 			error = errno;
 			rump_pub_vfs_root(fs->ukfs_mp, &fs->ukfs_rvp, 0);
-			rump_pub_lwp_release(rump_pub_lwp_curlwp());
+			rump_pub_lwproc_releaselwp();
 			ukfs_chdir(fs, fs->ukfs_mountpath);
 			errno = error;
 			return -1;
 		}
-		rump_pub_lwp_release(rump_pub_lwp_curlwp());
+		rump_pub_lwproc_releaselwp();
 	}
 
 	if (fs->ukfs_devpath) {
@@ -773,7 +759,7 @@
 	struct kauth_cred *cred;
 	
 	uio = rump_pub_uio_setup(buf, bufsize, *off, RUMPUIO_READ);
-	cred = rump_pub_cred_suserget();
+	cred = rump_pub_cred_create(0, 0, 0, NULL);
 	rv = RUMP_VOP_READDIR(vp, uio, cred, &eofflag, NULL, NULL);
 	rump_pub_cred_put(cred);
 	RUMP_VOP_UNLOCK(vp);

Reply via email to