Module Name:    src
Committed By:   pooka
Date:           Mon Apr 29 17:31:05 UTC 2013

Modified Files:
        src/lib/librumpuser: rumpuser.c
        src/sys/rump/include/rump: rumpuser.h
        src/sys/rump/librump/rumpkern: rump.c vm.c
        src/sys/rump/librump/rumpvfs: rump_vfs.c rumpblk.c

Log Message:
Replace the various "get info from hypervisor" interfaces with one
unified rumpuser_getparam(), and make it return a plist.  The
contents can come e.g. from the env or a config file.  Make
identifiers starting with an underscore denote system identifiers
which must be implemented by hypervisor. (yea, j/k about the plist bit)


To generate a diff of this commit:
cvs rdiff -u -r1.42 -r1.43 src/lib/librumpuser/rumpuser.c
cvs rdiff -u -r1.94 -r1.95 src/sys/rump/include/rump/rumpuser.h
cvs rdiff -u -r1.263 -r1.264 src/sys/rump/librump/rumpkern/rump.c
cvs rdiff -u -r1.140 -r1.141 src/sys/rump/librump/rumpkern/vm.c
cvs rdiff -u -r1.74 -r1.75 src/sys/rump/librump/rumpvfs/rump_vfs.c
cvs rdiff -u -r1.51 -r1.52 src/sys/rump/librump/rumpvfs/rumpblk.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.42 src/lib/librumpuser/rumpuser.c:1.43
--- src/lib/librumpuser/rumpuser.c:1.42	Mon Apr 29 15:40:38 2013
+++ src/lib/librumpuser/rumpuser.c	Mon Apr 29 17:31:05 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumpuser.c,v 1.42 2013/04/29 15:40:38 pooka Exp $	*/
+/*	$NetBSD: rumpuser.c,v 1.43 2013/04/29 17:31:05 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.42 2013/04/29 15:40:38 pooka Exp $");
+__RCSID("$NetBSD: rumpuser.c,v 1.43 2013/04/29 17:31:05 pooka Exp $");
 #endif /* !lint */
 
 #include <sys/ioctl.h>
@@ -512,27 +512,71 @@ rumpuser_clock_sleep(uint64_t sec, uint6
 	return rv;
 }
 
-int
-rumpuser_getenv(const char *name, char *buf, size_t blen, int *error)
+static int
+gethostncpu(void)
 {
+	int ncpu = 1;
+
+#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__DragonFly__)
+	size_t sz = sizeof(ncpu);
+
+	sysctlbyname("hw.ncpu", &ncpu, &sz, NULL, 0);
+#elif defined(__linux__) || defined(__CYGWIN__)
+	FILE *fp;
+	char *line = NULL;
+	size_t n = 0;
 
-	DOCALL(int, getenv_r(name, buf, blen));
+	/* If anyone knows a better way, I'm all ears */
+	if ((fp = fopen("/proc/cpuinfo", "r")) != NULL) {
+		ncpu = 0;
+		while (getline(&line, &n, fp) != -1) {
+			if (strncmp(line,
+			    "processor", sizeof("processor")-1) == 0)
+			    	ncpu++;
+		}
+		if (ncpu == 0)
+			ncpu = 1;
+		free(line);
+		fclose(fp);
+	}
+#elif __sun__
+	/* XXX: this is just a rough estimate ... */
+	ncpu = sysconf(_SC_NPROCESSORS_ONLN);
+#endif
+	
+	return ncpu;
 }
 
 int
-rumpuser_gethostname(char *name, size_t namelen, int *error)
+rumpuser_getparam(const char *name, void *buf, size_t blen)
 {
-	char tmp[MAXHOSTNAMELEN];
 
-	if (gethostname(tmp, sizeof(tmp)) == -1) {
-		snprintf(name, namelen, "rump-%05d.rumpdomain", (int)getpid());
+	if (strcmp(name, RUMPUSER_PARAM_NCPU) == 0) {
+		int ncpu;
+
+		if (getenv_r("RUMP_NCPU", buf, blen) == -1) {
+			ncpu = gethostncpu();
+			snprintf(buf, blen, "%d", ncpu);
+		}
+		return 0;
+	} else if (strcmp(name, RUMPUSER_PARAM_HOSTNAME) == 0) {
+		char tmp[MAXHOSTNAMELEN];
+
+		if (gethostname(tmp, sizeof(tmp)) == -1) {
+			snprintf(buf, blen, "rump-%05d", (int)getpid());
+		} else {
+			snprintf(buf, blen, "rump-%05d.%s",
+			    (int)getpid(), tmp);
+		}
+		return 0;
+	} else if (*name == '_') {
+		return EINVAL;
 	} else {
-		snprintf(name, namelen, "rump-%05d.%s.rumpdomain",
-		    (int)getpid(), tmp);
+		if (getenv_r(name, buf, blen) == -1)
+			return errno;
+		else
+			return 0;
 	}
-
-	*error = 0;
-	return 0;
 }
 
 int
@@ -592,41 +636,6 @@ rumpuser_kill(int64_t pid, int sig, int 
 #endif
 }
 
-int
-rumpuser_getnhostcpu(void)
-{
-	int ncpu = 1;
-
-#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__DragonFly__)
-	size_t sz = sizeof(ncpu);
-
-	sysctlbyname("hw.ncpu", &ncpu, &sz, NULL, 0);
-#elif defined(__linux__) || defined(__CYGWIN__)
-	FILE *fp;
-	char *line = NULL;
-	size_t n = 0;
-
-	/* If anyone knows a better way, I'm all ears */
-	if ((fp = fopen("/proc/cpuinfo", "r")) != NULL) {
-		ncpu = 0;
-		while (getline(&line, &n, fp) != -1) {
-			if (strncmp(line,
-			    "processor", sizeof("processor")-1) == 0)
-			    	ncpu++;
-		}
-		if (ncpu == 0)
-			ncpu = 1;
-		free(line);
-		fclose(fp);
-	}
-#elif __sun__
-	/* XXX: this is just a rough estimate ... */
-	ncpu = sysconf(_SC_NPROCESSORS_ONLN);
-#endif
-	
-	return ncpu;
-}
-
 size_t
 rumpuser_getrandom(void *buf, size_t buflen, int flags)
 {

Index: src/sys/rump/include/rump/rumpuser.h
diff -u src/sys/rump/include/rump/rumpuser.h:1.94 src/sys/rump/include/rump/rumpuser.h:1.95
--- src/sys/rump/include/rump/rumpuser.h:1.94	Mon Apr 29 15:40:38 2013
+++ src/sys/rump/include/rump/rumpuser.h	Mon Apr 29 17:31:05 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumpuser.h,v 1.94 2013/04/29 15:40:38 pooka Exp $	*/
+/*	$NetBSD: rumpuser.h,v 1.95 2013/04/29 17:31:05 pooka Exp $	*/
 
 /*
  * Copyright (c) 2007-2013 Antti Kantee.  All Rights Reserved.
@@ -124,9 +124,9 @@ int rumpuser_clock_sleep(uint64_t, uint6
  * host information retrieval
  */
 
-int rumpuser_getenv(const char *, char *, size_t, int *);
-int rumpuser_getnhostcpu(void);
-int rumpuser_gethostname(char *, size_t, int *);
+#define RUMPUSER_PARAM_NCPU "_RUMPUSER_NCPU"
+#define RUMPUSER_PARAM_HOSTNAME "_RUMPUSER_HOSTNAME"
+int rumpuser_getparam(const char *, void *, size_t);
 
 /*
  * system call emulation, set errno is TLS

Index: src/sys/rump/librump/rumpkern/rump.c
diff -u src/sys/rump/librump/rumpkern/rump.c:1.263 src/sys/rump/librump/rumpkern/rump.c:1.264
--- src/sys/rump/librump/rumpkern/rump.c:1.263	Mon Apr 29 14:51:41 2013
+++ src/sys/rump/librump/rumpkern/rump.c	Mon Apr 29 17:31:05 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: rump.c,v 1.263 2013/04/29 14:51:41 pooka Exp $	*/
+/*	$NetBSD: rump.c,v 1.264 2013/04/29 17:31:05 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.263 2013/04/29 14:51:41 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rump.c,v 1.264 2013/04/29 17:31:05 pooka Exp $");
 
 #include <sys/systm.h>
 #define ELFSIZE ARCH_ELFSIZE
@@ -238,7 +238,6 @@ rump_init(void)
 	uint64_t sec, nsec;
 	struct lwp *l;
 	int i, numcpu;
-	int error;
 
 	/* not reentrant */
 	if (rump_inited)
@@ -255,21 +254,20 @@ rump_init(void)
 	}
 
 	/* retrieve env vars which affect the early stage of bootstrap */
-	if (rumpuser_getenv("RUMP_THREADS", buf, sizeof(buf), &error) == 0) {
+	if (rumpuser_getparam("RUMP_THREADS", buf, sizeof(buf)) == 0) {
 		rump_threads = *buf != '0';
 	}
-	if (rumpuser_getenv("RUMP_VERBOSE", buf, sizeof(buf), &error) == 0) {
+	if (rumpuser_getparam("RUMP_VERBOSE", buf, sizeof(buf)) == 0) {
 		if (*buf != '0')
 			boothowto = AB_VERBOSE;
 	}
-	if (rumpuser_getenv("RUMP_NCPU", buf, sizeof(buf), &error) == 0)
-		error = 0;
-	if (error == 0) {
-		numcpu = strtoll(buf, NULL, 10);
-		if (numcpu < 1)
-			numcpu = 1;
-	} else {
-		numcpu = rumpuser_getnhostcpu();
+
+	if (rumpuser_getparam(RUMPUSER_PARAM_NCPU, buf, sizeof(buf)) != 0)
+		panic("mandatory hypervisor configuration (NCPU) missing");
+	numcpu = strtoll(buf, NULL, 10);
+	if (numcpu < 1) {
+		panic("rump kernels are not lightweight enough for \"%d\" CPUs",
+		    numcpu);
 	}
 
 	rump_thread_init();
@@ -441,7 +439,10 @@ rump_init(void)
 
 	module_init_class(MODULE_CLASS_ANY);
 
-	rumpuser_gethostname(hostname, MAXHOSTNAMELEN, &error);
+	if (rumpuser_getparam(RUMPUSER_PARAM_HOSTNAME,
+	    hostname, MAXHOSTNAMELEN) != 0) {
+		panic("mandatory hypervisor configuration (HOSTNAME) missing");
+	}
 	hostnamelen = strlen(hostname);
 
 	sigemptyset(&sigcantmask);

Index: src/sys/rump/librump/rumpkern/vm.c
diff -u src/sys/rump/librump/rumpkern/vm.c:1.140 src/sys/rump/librump/rumpkern/vm.c:1.141
--- src/sys/rump/librump/rumpkern/vm.c:1.140	Sun Apr 28 23:21:00 2013
+++ src/sys/rump/librump/rumpkern/vm.c	Mon Apr 29 17:31:05 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: vm.c,v 1.140 2013/04/28 23:21:00 pooka Exp $	*/
+/*	$NetBSD: vm.c,v 1.141 2013/04/29 17:31:05 pooka Exp $	*/
 
 /*
  * Copyright (c) 2007-2011 Antti Kantee.  All Rights Reserved.
@@ -41,7 +41,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vm.c,v 1.140 2013/04/28 23:21:00 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vm.c,v 1.141 2013/04/29 17:31:05 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -273,9 +273,8 @@ void
 uvm_init(void)
 {
 	char buf[64];
-	int error;
 
-	if (rumpuser_getenv("RUMP_MEMLIMIT", buf, sizeof(buf), &error) == 0) {
+	if (rumpuser_getparam("RUMP_MEMLIMIT", buf, sizeof(buf)) == 0) {
 		unsigned long tmp;
 		char *ep;
 		int mult;

Index: src/sys/rump/librump/rumpvfs/rump_vfs.c
diff -u src/sys/rump/librump/rumpvfs/rump_vfs.c:1.74 src/sys/rump/librump/rumpvfs/rump_vfs.c:1.75
--- src/sys/rump/librump/rumpvfs/rump_vfs.c:1.74	Mon Apr 29 12:56:03 2013
+++ src/sys/rump/librump/rumpvfs/rump_vfs.c	Mon Apr 29 17:31:05 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: rump_vfs.c,v 1.74 2013/04/29 12:56:03 pooka Exp $	*/
+/*	$NetBSD: rump_vfs.c,v 1.75 2013/04/29 17:31:05 pooka Exp $	*/
 
 /*
  * Copyright (c) 2008 Antti Kantee.  All Rights Reserved.
@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rump_vfs.c,v 1.74 2013/04/29 12:56:03 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rump_vfs.c,v 1.75 2013/04/29 17:31:05 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/buf.h>
@@ -100,7 +100,7 @@ RUMP_COMPONENT(RUMP__FACTION_VFS)
 	rump_vfs_fini = fini;
 	rump_vfs_drainbufs = drainbufs;
 
-	if (rumpuser_getenv("RUMP_NVNODES", buf, sizeof(buf), &error) == 0) {
+	if (rumpuser_getparam("RUMP_NVNODES", buf, sizeof(buf)) == 0) {
 		desiredvnodes = strtoul(buf, NULL, 10);
 	} else {
 		desiredvnodes = 1<<10;
@@ -158,7 +158,7 @@ RUMP_COMPONENT(RUMP__FACTION_VFS)
 	{
 	char *mbase;
 
-	if (rumpuser_getenv("RUMP_MODULEBASE", buf, sizeof(buf), &error) == 0)
+	if (rumpuser_getparam("RUMP_MODULEBASE", buf, sizeof(buf)) == 0)
 		mbase = buf;
 	else
 		mbase = module_base;

Index: src/sys/rump/librump/rumpvfs/rumpblk.c
diff -u src/sys/rump/librump/rumpvfs/rumpblk.c:1.51 src/sys/rump/librump/rumpvfs/rumpblk.c:1.52
--- src/sys/rump/librump/rumpvfs/rumpblk.c:1.51	Mon Apr 29 15:40:39 2013
+++ src/sys/rump/librump/rumpvfs/rumpblk.c	Mon Apr 29 17:31:05 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumpblk.c,v 1.51 2013/04/29 15:40:39 pooka Exp $	*/
+/*	$NetBSD: rumpblk.c,v 1.52 2013/04/29 17:31:05 pooka Exp $	*/
 
 /*
  * Copyright (c) 2009 Antti Kantee.  All Rights Reserved.
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rumpblk.c,v 1.51 2013/04/29 15:40:39 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rumpblk.c,v 1.52 2013/04/29 17:31:05 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/buf.h>
@@ -165,13 +165,13 @@ rumpblk_init(void)
 
 	mutex_init(&rumpblk_lock, MUTEX_DEFAULT, IPL_NONE);
 
-	if (rumpuser_getenv("RUMP_BLKFAIL", buf, sizeof(buf), &error) == 0) {
+	if (rumpuser_getparam("RUMP_BLKFAIL", buf, sizeof(buf)) == 0) {
 		blkfail = strtoul(buf, NULL, 10);
 		/* fail everything */
 		if (blkfail > BLKFAIL_MAX)
 			blkfail = BLKFAIL_MAX;
-		if (rumpuser_getenv("RUMP_BLKFAIL_SEED", buf, sizeof(buf),
-		    &error) == 0) {
+		if (rumpuser_getparam("RUMP_BLKFAIL_SEED",
+		    buf, sizeof(buf)) == 0) {
 			randstate = strtoul(buf, NULL, 10);
 		} else {
 			randstate = cprng_fast32();
@@ -182,7 +182,7 @@ rumpblk_init(void)
 		blkfail = 0;
 	}
 
-	if (rumpuser_getenv("RUMP_BLKSECTSHIFT", buf, sizeof(buf), &error)==0){
+	if (rumpuser_getparam("RUMP_BLKSECTSHIFT", buf, sizeof(buf)) == 0) {
 		printf("rumpblk: ");
 		tmp = strtoul(buf, NULL, 10);
 		if (tmp >= DEV_BSHIFT)

Reply via email to