Module Name:    src
Committed By:   christos
Date:           Wed Nov  4 22:06:39 UTC 2020

Modified Files:
        src/sys/rump/include/rump: rump.h
        src/sys/rump/librump/rumpkern: rump.c

Log Message:
PR/55781: Ruslan Nikolaev: rump_init() does differentiate when all CPUs are
initialized


To generate a diff of this commit:
cvs rdiff -u -r1.72 -r1.73 src/sys/rump/include/rump/rump.h
cvs rdiff -u -r1.349 -r1.350 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/sys/rump/include/rump/rump.h
diff -u src/sys/rump/include/rump/rump.h:1.72 src/sys/rump/include/rump/rump.h:1.73
--- src/sys/rump/include/rump/rump.h:1.72	Sun Jun 14 19:38:25 2020
+++ src/sys/rump/include/rump/rump.h	Wed Nov  4 17:06:38 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: rump.h,v 1.72 2020/06/14 23:38:25 kamil Exp $	*/
+/*	$NetBSD: rump.h,v 1.73 2020/11/04 22:06:38 christos Exp $	*/
 
 /*
  * Copyright (c) 2007-2011 Antti Kantee.  All Rights Reserved.
@@ -118,6 +118,7 @@ void	rump_unschedule(void);
 void	rump_printevcnts(void);
 
 int	rump_daemonize_begin(void);
+int	rump_init_callback(void (*)(void));
 int	rump_init(void);
 int	rump_init_server(const char *);
 int	rump_daemonize_done(int);

Index: src/sys/rump/librump/rumpkern/rump.c
diff -u src/sys/rump/librump/rumpkern/rump.c:1.349 src/sys/rump/librump/rumpkern/rump.c:1.350
--- src/sys/rump/librump/rumpkern/rump.c:1.349	Wed Jun 10 20:33:30 2020
+++ src/sys/rump/librump/rumpkern/rump.c	Wed Nov  4 17:06:39 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: rump.c,v 1.349 2020/06/11 00:33:30 kamil Exp $	*/
+/*	$NetBSD: rump.c,v 1.350 2020/11/04 22:06:39 christos 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.349 2020/06/11 00:33:30 kamil Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rump.c,v 1.350 2020/11/04 22:06:39 christos Exp $");
 
 #include <sys/systm.h>
 #define ELFSIZE ARCH_ELFSIZE
@@ -218,7 +218,7 @@ RUMP_COMPONENT(RUMP_COMPONENT_POSTINIT)
 #endif /* RUMP_USE_CTOR */
 
 int
-rump_init(void)
+rump_init_callback(void (*cpuinit_callback) (void))
 {
 	char buf[256];
 	struct timespec bts;
@@ -231,7 +231,7 @@ rump_init(void)
 	if (rump_inited)
 		return 0;
 	else if (rump_inited == -1)
-		panic("rump_init: host process restart required");
+		panic("%s: host process restart required", __func__);
 	else
 		rump_inited = 1;
 
@@ -257,11 +257,12 @@ rump_init(void)
 	}
 
 	if (rumpuser_getparam(RUMPUSER_PARAM_NCPU, buf, sizeof(buf)) != 0)
-		panic("mandatory hypervisor configuration (NCPU) missing");
+		panic("%s: mandatory hypervisor configuration (NCPU) missing",
+		    __func__);
 	numcpu = strtoll(buf, NULL, 10);
 	if (numcpu < 1) {
-		panic("rump kernels are not lightweight enough for \"%d\" CPUs",
-		    numcpu);
+		panic("%s: rump kernels are not lightweight enough for %d CPUs",
+		    __func__, numcpu);
 	}
 
 	rump_thread_init();
@@ -393,6 +394,9 @@ rump_init(void)
 
 	mp_online = true;
 
+	if (cpuinit_callback)
+		(*cpuinit_callback)();
+
 	/* CPUs are up.  allow kernel threads to run */
 	rump_thread_allow(NULL);
 
@@ -415,7 +419,7 @@ rump_init(void)
 	if (rump_threads) {
 		if (kthread_create(PRI_PGDAEMON, KTHREAD_MPSAFE, NULL,
 		    uvm_pageout, NULL, &uvm.pagedaemon_lwp, "pdaemon") != 0)
-			panic("pagedaemon create failed");
+			panic("%s: pagedaemon create failed", __func__);
 	} else
 		uvm.pagedaemon_lwp = NULL; /* doesn't match curlwp */
 
@@ -456,7 +460,9 @@ rump_init(void)
 
 	if (rumpuser_getparam(RUMPUSER_PARAM_HOSTNAME,
 	    hostname, MAXHOSTNAMELEN) != 0) {
-		panic("mandatory hypervisor configuration (HOSTNAME) missing");
+		panic(
+		    "%s: mandatory hypervisor configuration (HOSTNAME) missing",
+		    __func__);
 	}
 	hostnamelen = strlen(hostname);
 
@@ -474,7 +480,7 @@ rump_init(void)
 	initproc = proc_find_raw(1);
 	mutex_exit(&proc_lock);
 	if (initproc == NULL)
-		panic("where in the world is initproc?");
+		panic("%s: where in the world is initproc?", __func__);
 	strlcpy(initproc->p_comm, "rumplocal", sizeof(initproc->p_comm));
 
 	rump_component_init(RUMP_COMPONENT_POSTINIT);
@@ -496,6 +502,13 @@ rump_init(void)
 
 	return 0;
 }
+
+int
+rump_init(void)
+{
+	return rump_init_callback(NULL);
+}
+
 /* historic compat */
 __strong_alias(rump__init,rump_init);
 

Reply via email to