Source-Changes-HG archive

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

[src/trunk]: src/sys Rather than performing lazy initialization, statically i...



details:   https://anonhg.NetBSD.org/src/rev/4bf9ec820518
branches:  trunk
changeset: 446965:4bf9ec820518
user:      thorpej <thorpej%NetBSD.org@localhost>
date:      Wed Dec 26 22:16:26 2018 +0000

description:
Rather than performing lazy initialization, statically initialize early
in the respective kernel startup routines.

diffstat:

 sys/kern/init_main.c             |   8 ++++++--
 sys/kern/kern_threadpool.c       |  28 +++-------------------------
 sys/rump/librump/rumpkern/rump.c |   7 +++++--
 sys/sys/threadpool.h             |   4 +++-
 4 files changed, 17 insertions(+), 30 deletions(-)

diffs (180 lines):

diff -r e9ba907aa6f3 -r 4bf9ec820518 sys/kern/init_main.c
--- a/sys/kern/init_main.c      Wed Dec 26 21:48:55 2018 +0000
+++ b/sys/kern/init_main.c      Wed Dec 26 22:16:26 2018 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: init_main.c,v 1.500 2018/10/30 19:40:35 kre Exp $      */
+/*     $NetBSD: init_main.c,v 1.501 2018/12/26 22:16:26 thorpej Exp $  */
 
 /*-
  * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -97,7 +97,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: init_main.c,v 1.500 2018/10/30 19:40:35 kre Exp $");
+__KERNEL_RCSID(0, "$NetBSD: init_main.c,v 1.501 2018/12/26 22:16:26 thorpej Exp $");
 
 #include "opt_ddb.h"
 #include "opt_inet.h"
@@ -178,6 +178,7 @@
 #include <sys/uidinfo.h>
 #include <sys/kprintf.h>
 #include <sys/bufq.h>
+#include <sys/threadpool.h>
 #ifdef IPSEC
 #include <netipsec/ipsec.h>
 #endif
@@ -405,6 +406,9 @@
        /* Disable preemption during boot. */
        kpreempt_disable();
 
+       /* Initialize the threadpool system. */
+       threadpools_init();
+
        /* Initialize the UID hash table. */
        uid_init();
 
diff -r e9ba907aa6f3 -r 4bf9ec820518 sys/kern/kern_threadpool.c
--- a/sys/kern/kern_threadpool.c        Wed Dec 26 21:48:55 2018 +0000
+++ b/sys/kern/kern_threadpool.c        Wed Dec 26 22:16:26 2018 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: kern_threadpool.c,v 1.10 2018/12/26 21:43:39 thorpej Exp $     */
+/*     $NetBSD: kern_threadpool.c,v 1.11 2018/12/26 22:16:26 thorpej Exp $     */
 
 /*-
  * Copyright (c) 2014, 2018 The NetBSD Foundation, Inc.
@@ -81,7 +81,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_threadpool.c,v 1.10 2018/12/26 21:43:39 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_threadpool.c,v 1.11 2018/12/26 22:16:26 thorpej Exp $");
 
 #include <sys/types.h>
 #include <sys/param.h>
@@ -100,15 +100,6 @@
 #include <sys/systm.h>
 #include <sys/threadpool.h>
 
-static ONCE_DECL(threadpool_init_once)
-
-#define        THREADPOOL_INIT()                                       \
-do {                                                           \
-       int threadpool_init_error __diagused =                  \
-           RUN_ONCE(&threadpool_init_once, threadpools_init);  \
-       KASSERT(threadpool_init_error == 0);                    \
-} while (/*CONSTCOND*/0)
-
 /* Data structures */
 
 TAILQ_HEAD(job_head, threadpool_job);
@@ -234,7 +225,7 @@
 #define        TP_LOG(x)               /* nothing */
 #endif /* THREADPOOL_VERBOSE */
 
-static int
+void
 threadpools_init(void)
 {
 
@@ -245,11 +236,6 @@
        LIST_INIT(&unbound_threadpools);
        LIST_INIT(&percpu_threadpools);
        mutex_init(&threadpools_lock, MUTEX_DEFAULT, IPL_NONE);
-
-       TP_LOG(("%s: sizeof(threadpool_job) = %zu\n",
-           __func__, sizeof(struct threadpool_job)));
-
-       return 0;
 }
 
 /* Thread pool creation */
@@ -373,8 +359,6 @@
        struct threadpool_unbound *tpu, *tmp = NULL;
        int error;
 
-       THREADPOOL_INIT();
-
        ASSERT_SLEEPABLE();
 
        if (! threadpool_pri_is_valid(pri))
@@ -422,8 +406,6 @@
        struct threadpool_unbound *tpu =
            container_of(pool, struct threadpool_unbound, tpu_pool);
 
-       THREADPOOL_INIT();
-
        ASSERT_SLEEPABLE();
 
        KASSERT(threadpool_pri_is_valid(pri));
@@ -454,8 +436,6 @@
        struct threadpool_percpu *pool_percpu, *tmp = NULL;
        int error;
 
-       THREADPOOL_INIT();
-
        ASSERT_SLEEPABLE();
 
        if (! threadpool_pri_is_valid(pri))
@@ -497,8 +477,6 @@
 threadpool_percpu_put(struct threadpool_percpu *pool_percpu, pri_t pri)
 {
 
-       THREADPOOL_INIT();
-
        ASSERT_SLEEPABLE();
 
        KASSERT(threadpool_pri_is_valid(pri));
diff -r e9ba907aa6f3 -r 4bf9ec820518 sys/rump/librump/rumpkern/rump.c
--- a/sys/rump/librump/rumpkern/rump.c  Wed Dec 26 21:48:55 2018 +0000
+++ b/sys/rump/librump/rumpkern/rump.c  Wed Dec 26 22:16:26 2018 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: rump.c,v 1.331 2018/01/09 04:55:43 msaitoh Exp $       */
+/*     $NetBSD: rump.c,v 1.332 2018/12/26 22:16:27 thorpej 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.331 2018/01/09 04:55:43 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rump.c,v 1.332 2018/12/26 22:16:27 thorpej Exp $");
 
 #include <sys/systm.h>
 #define ELFSIZE ARCH_ELFSIZE
@@ -65,6 +65,7 @@
 #include <sys/sysctl.h>
 #include <sys/syscall.h>
 #include <sys/syscallvar.h>
+#include <sys/threadpool.h>
 #include <sys/timetc.h>
 #include <sys/tty.h>
 #include <sys/uidinfo.h>
@@ -341,6 +342,8 @@
        lwpinit_specificdata();
        lwp_initspecific(&lwp0);
 
+       threadpools_init();
+
        loginit();
 
        rump_biglock_init();
diff -r e9ba907aa6f3 -r 4bf9ec820518 sys/sys/threadpool.h
--- a/sys/sys/threadpool.h      Wed Dec 26 21:48:55 2018 +0000
+++ b/sys/sys/threadpool.h      Wed Dec 26 22:16:26 2018 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: threadpool.h,v 1.5 2018/12/26 21:43:39 thorpej Exp $   */
+/*     $NetBSD: threadpool.h,v 1.6 2018/12/26 22:16:27 thorpej Exp $   */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -58,6 +58,8 @@
        char                            job_name[MAXCOMLEN];
 };
 
+void   threadpools_init(void);
+
 int    threadpool_get(struct threadpool **, pri_t);
 void   threadpool_put(struct threadpool *, pri_t);
 



Home | Main Index | Thread Index | Old Index