Module Name: src Committed By: pgoyette Date: Mon Apr 27 07:51:29 UTC 2015
Modified Files: src/sys/dev/sysmon: sysmon_taskq.c sysmon_taskq.h src/sys/kern: init_main.c Log Message: Replace a home-grown run-once implementation with the real RUN_ONCE() To generate a diff of this commit: cvs rdiff -u -r1.17 -r1.18 src/sys/dev/sysmon/sysmon_taskq.c cvs rdiff -u -r1.3 -r1.4 src/sys/dev/sysmon/sysmon_taskq.h cvs rdiff -u -r1.463 -r1.464 src/sys/kern/init_main.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/dev/sysmon/sysmon_taskq.c diff -u src/sys/dev/sysmon/sysmon_taskq.c:1.17 src/sys/dev/sysmon/sysmon_taskq.c:1.18 --- src/sys/dev/sysmon/sysmon_taskq.c:1.17 Fri Apr 24 00:31:04 2015 +++ src/sys/dev/sysmon/sysmon_taskq.c Mon Apr 27 07:51:28 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: sysmon_taskq.c,v 1.17 2015/04/24 00:31:04 pgoyette Exp $ */ +/* $NetBSD: sysmon_taskq.c,v 1.18 2015/04/27 07:51:28 pgoyette Exp $ */ /* * Copyright (c) 2001, 2003 Wasabi Systems, Inc. @@ -41,7 +41,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sysmon_taskq.c,v 1.17 2015/04/24 00:31:04 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sysmon_taskq.c,v 1.18 2015/04/27 07:51:28 pgoyette Exp $"); #include <sys/param.h> #include <sys/malloc.h> @@ -50,6 +50,7 @@ __KERNEL_RCSID(0, "$NetBSD: sysmon_taskq #include <sys/kthread.h> #include <sys/systm.h> #include <sys/module.h> +#include <sys/once.h> #include <dev/sysmon/sysmon_taskq.h> @@ -88,18 +89,23 @@ MODULE(MODULE_CLASS_MISC, sysmon_taskq, */ /* - * sysmon_task_queue_preinit: + * tq_preinit: * * Early one-time initialization of task-queue */ -void -sysmon_task_queue_preinit(void) + +ONCE_DECL(once_tq); + +static int +tq_preinit(void) { mutex_init(&sysmon_task_queue_mtx, MUTEX_DEFAULT, IPL_VM); mutex_init(&sysmon_task_queue_init_mtx, MUTEX_DEFAULT, IPL_NONE); cv_init(&sysmon_task_queue_cv, "smtaskq"); sysmon_task_queue_initialized = 0; + + return 0; } /* @@ -112,6 +118,8 @@ sysmon_task_queue_init(void) { int error; + (void)RUN_ONCE(&once_tq, tq_preinit); + mutex_enter(&sysmon_task_queue_init_mtx); if (sysmon_task_queue_initialized++) { mutex_exit(&sysmon_task_queue_init_mtx); @@ -244,9 +252,6 @@ sysmon_taskq_modcmd(modcmd_t cmd, void * switch (cmd) { case MODULE_CMD_INIT: -#ifdef _MODULE - sysmon_task_queue_preinit(); -#endif sysmon_task_queue_init(); ret = 0; break; Index: src/sys/dev/sysmon/sysmon_taskq.h diff -u src/sys/dev/sysmon/sysmon_taskq.h:1.3 src/sys/dev/sysmon/sysmon_taskq.h:1.4 --- src/sys/dev/sysmon/sysmon_taskq.h:1.3 Fri Apr 24 00:31:04 2015 +++ src/sys/dev/sysmon/sysmon_taskq.h Mon Apr 27 07:51:28 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: sysmon_taskq.h,v 1.3 2015/04/24 00:31:04 pgoyette Exp $ */ +/* $NetBSD: sysmon_taskq.h,v 1.4 2015/04/27 07:51:28 pgoyette Exp $ */ /* * Copyright (c) 2003 Wasabi Systems, Inc. @@ -38,7 +38,6 @@ #ifndef _DEV_SYSMON_SYSMON_TASKQ_H_ #define _DEV_SYSMON_SYSMON_TASKQ_H_ -void sysmon_task_queue_preinit(void); void sysmon_task_queue_init(void); int sysmon_task_queue_fini(void); int sysmon_task_queue_sched(u_int, void (*)(void *), void *); Index: src/sys/kern/init_main.c diff -u src/sys/kern/init_main.c:1.463 src/sys/kern/init_main.c:1.464 --- src/sys/kern/init_main.c:1.463 Thu Apr 23 23:23:08 2015 +++ src/sys/kern/init_main.c Mon Apr 27 07:51:28 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: init_main.c,v 1.463 2015/04/23 23:23:08 pgoyette Exp $ */ +/* $NetBSD: init_main.c,v 1.464 2015/04/27 07:51:28 pgoyette 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.463 2015/04/23 23:23:08 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: init_main.c,v 1.464 2015/04/27 07:51:28 pgoyette Exp $"); #include "opt_ddb.h" #include "opt_ipsec.h" @@ -117,7 +117,6 @@ __KERNEL_RCSID(0, "$NetBSD: init_main.c, #include "drvctl.h" #include "ksyms.h" -#include "sysmon_taskq.h" #include "veriexec.h" #include <sys/param.h> @@ -218,10 +217,6 @@ __KERNEL_RCSID(0, "$NetBSD: init_main.c, #include <uvm/uvm.h> /* extern struct uvm uvm */ -#if NSYSMON_TASKQ > 0 -#include <dev/sysmon/sysmon_taskq.h> -#endif - #include <dev/cons.h> #include <net/bpf.h> @@ -460,16 +455,6 @@ main(void) /* Initialize kqueue. */ kqueue_init(); - /* - * Initialize sysmon's task queue. It is used by at - * least one non-modularized component (dev/acpica) - * and needs to be available early, before the rest - * of the module(9) subsystem is ready. - */ -#if NSYSMON_TASKQ > 0 - sysmon_task_queue_preinit(); -#endif - inittimecounter(); ntp_init();