Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/rump PR/55781: Ruslan Nikolaev: rump_init() does differe...



details:   https://anonhg.NetBSD.org/src/rev/2a87fd9993e9
branches:  trunk
changeset: 977917:2a87fd9993e9
user:      christos <christos%NetBSD.org@localhost>
date:      Wed Nov 04 22:06:38 2020 +0000

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

diffstat:

 sys/rump/include/rump/rump.h     |   3 ++-
 sys/rump/librump/rumpkern/rump.c |  33 +++++++++++++++++++++++----------
 2 files changed, 25 insertions(+), 11 deletions(-)

diffs (122 lines):

diff -r a3ea791338df -r 2a87fd9993e9 sys/rump/include/rump/rump.h
--- a/sys/rump/include/rump/rump.h      Wed Nov 04 20:54:20 2020 +0000
+++ b/sys/rump/include/rump/rump.h      Wed Nov 04 22:06:38 2020 +0000
@@ -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_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);
diff -r a3ea791338df -r 2a87fd9993e9 sys/rump/librump/rumpkern/rump.c
--- a/sys/rump/librump/rumpkern/rump.c  Wed Nov 04 20:54:20 2020 +0000
+++ b/sys/rump/librump/rumpkern/rump.c  Wed Nov 04 22:06:38 2020 +0000
@@ -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 @@
 #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 @@
        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 @@
        }
 
        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 @@
 
        mp_online = true;
 
+       if (cpuinit_callback)
+               (*cpuinit_callback)();
+
        /* CPUs are up.  allow kernel threads to run */
        rump_thread_allow(NULL);
 
@@ -415,7 +419,7 @@
        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 @@
 
        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 @@
        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 @@
 
        return 0;
 }
+
+int
+rump_init(void)
+{
+       return rump_init_callback(NULL);
+}
+
 /* historic compat */
 __strong_alias(rump__init,rump_init);
 



Home | Main Index | Thread Index | Old Index