commit 4ea3d99c2267fbcbcfac889f5ab55de8759d8269 Author: Mateusz Guzik Date: Fri Sep 11 20:06:20 2020 +0200 convert thread to static event handler diff --git a/sys/cddl/contrib/opensolaris/uts/common/dtrace/fasttrap.c b/sys/cddl/contrib/opensolaris/uts/common/dtrace/fasttrap.c index 4771a67a9f0..a40a93bd1dd 100644 --- a/sys/cddl/contrib/opensolaris/uts/common/dtrace/fasttrap.c +++ b/sys/cddl/contrib/opensolaris/uts/common/dtrace/fasttrap.c @@ -222,7 +222,7 @@ static fasttrap_proc_t *fasttrap_proc_lookup(pid_t); static void fasttrap_proc_release(fasttrap_proc_t *); #ifndef illumos -static void fasttrap_thread_dtor(void *, struct thread *); +static void fasttrap_thread_dtor(struct thread *); #endif #define FASTTRAP_PROVS_INDEX(pid, name) \ @@ -232,7 +232,6 @@ static void fasttrap_thread_dtor(void *, struct thread *); #ifndef illumos struct rmlock fasttrap_tp_lock; -static eventhandler_tag fasttrap_thread_dtor_tag; #endif static unsigned long tpoints_hash_size = FASTTRAP_TPOINTS_DEFAULT_SIZE; @@ -382,7 +381,7 @@ fasttrap_scraddr(struct thread *td, fasttrap_proc_t *fprc) * free list. */ static void -fasttrap_thread_dtor(void *arg __unused, struct thread *td) +fasttrap_thread_dtor(struct thread *td) { fasttrap_bucket_t *bucket; fasttrap_proc_t *fprc; @@ -2499,8 +2498,7 @@ fasttrap_load(void) * This event handler must run before kdtrace_thread_dtor() since it * accesses the thread's struct kdtrace_thread. */ - fasttrap_thread_dtor_tag = EVENTHANDLER_REGISTER(thread_dtor, - fasttrap_thread_dtor, NULL, EVENTHANDLER_PRI_FIRST); + STATIC_EVENTHANDLER_REGISTER(thread_dtor, fasttrap_thread_dtor, FIRST); #endif /* @@ -2602,7 +2600,7 @@ fasttrap_unload(void) #endif #ifndef illumos - EVENTHANDLER_DEREGISTER(thread_dtor, fasttrap_thread_dtor_tag); + STATIC_EVENTHANDLER_DEREGISTER(thread_dtor, fasttrap_thread_dtor); for (i = 0; i < fasttrap_tpoints.fth_nent; i++) mutex_destroy(&fasttrap_tpoints.fth_table[i].ftb_mtx); diff --git a/sys/compat/linux/linux_common.c b/sys/compat/linux/linux_common.c index bc4fd2d41a3..05bad285d6d 100644 --- a/sys/compat/linux/linux_common.c +++ b/sys/compat/linux/linux_common.c @@ -34,6 +34,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -72,7 +73,6 @@ struct sx linux_ioctl_sx; SX_SYSINIT(linux_ioctl, &linux_ioctl_sx, "Linux ioctl handlers"); static eventhandler_tag linux_exec_tag; -static eventhandler_tag linux_thread_dtor_tag; static eventhandler_tag linux_exit_tag; static int @@ -91,8 +91,7 @@ linux_common_modevent(module_t mod, int type, void *data) linux_proc_exit, NULL, 1000); linux_exec_tag = EVENTHANDLER_REGISTER(process_exec, linux_proc_exec, NULL, 1000); - linux_thread_dtor_tag = EVENTHANDLER_REGISTER(thread_dtor, - linux_thread_dtor, NULL, EVENTHANDLER_PRI_ANY); + STATIC_EVENTHANDLER_REGISTER(thread_dtor, linux_thread_dtor, ANY); SET_FOREACH(ldhp, linux_device_handler_set) linux_device_register_handler(*ldhp); LIST_INIT(&futex_list); @@ -106,7 +105,7 @@ linux_common_modevent(module_t mod, int type, void *data) mtx_destroy(&futex_mtx); EVENTHANDLER_DEREGISTER(process_exit, linux_exit_tag); EVENTHANDLER_DEREGISTER(process_exec, linux_exec_tag); - EVENTHANDLER_DEREGISTER(thread_dtor, linux_thread_dtor_tag); + STATIC_EVENTHANDLER_DEREGISTER(thread_dtor, linux_thread_dtor); break; default: return (EOPNOTSUPP); diff --git a/sys/compat/linux/linux_emul.c b/sys/compat/linux/linux_emul.c index 605abfaacbf..9ec0beb020a 100644 --- a/sys/compat/linux/linux_emul.c +++ b/sys/compat/linux/linux_emul.c @@ -370,7 +370,7 @@ linux_proc_exec(void *arg __unused, struct proc *p, struct image_params *imgp) } void -linux_thread_dtor(void *arg __unused, struct thread *td) +linux_thread_dtor(struct thread *td) { struct linux_emuldata *em; diff --git a/sys/compat/linux/linux_emul.h b/sys/compat/linux/linux_emul.h index 9104892885b..b152f7da0ae 100644 --- a/sys/compat/linux/linux_emul.h +++ b/sys/compat/linux/linux_emul.h @@ -55,7 +55,7 @@ void linux_proc_init(struct thread *, struct thread *, int); void linux_proc_exit(void *, struct proc *); void linux_schedtail(struct thread *); void linux_proc_exec(void *, struct proc *, struct image_params *); -void linux_thread_dtor(void *arg __unused, struct thread *); +void linux_thread_dtor(struct thread *); void linux_thread_detach(struct thread *); int linux_common_execve(struct thread *, struct image_args *); diff --git a/sys/compat/linuxkpi/common/src/linux_current.c b/sys/compat/linuxkpi/common/src/linux_current.c index 611d10df338..18f432e03e2 100644 --- a/sys/compat/linuxkpi/common/src/linux_current.c +++ b/sys/compat/linuxkpi/common/src/linux_current.c @@ -36,8 +36,6 @@ __FBSDID("$FreeBSD$"); #include #include -static eventhandler_tag linuxkpi_thread_dtor_tag; - static MALLOC_DEFINE(M_LINUX_CURRENT, "linuxcurrent", "LinuxKPI task structure"); int @@ -143,7 +141,7 @@ linux_free_current(struct task_struct *ts) } static void -linuxkpi_thread_dtor(void *arg __unused, struct thread *td) +linuxkpi_thread_dtor(struct thread *td) { struct task_struct *ts; @@ -233,8 +231,7 @@ static void linux_current_init(void *arg __unused) { lkpi_alloc_current = linux_alloc_current; - linuxkpi_thread_dtor_tag = EVENTHANDLER_REGISTER(thread_dtor, - linuxkpi_thread_dtor, NULL, EVENTHANDLER_PRI_ANY); + STATIC_EVENTHANDLER_REGISTER(thread_dtor, linuxkpi_thread_dtor, ANY); } SYSINIT(linux_current, SI_SUB_EVENTHANDLER, SI_ORDER_SECOND, linux_current_init, NULL); @@ -257,7 +254,7 @@ linux_current_uninit(void *arg __unused) PROC_UNLOCK(p); } sx_sunlock(&allproc_lock); - EVENTHANDLER_DEREGISTER(thread_dtor, linuxkpi_thread_dtor_tag); + STATIC_EVENTHANDLER_DEREGISTER(thread_dtor, linuxkpi_thread_dtor); lkpi_alloc_current = linux_alloc_current_noop; } SYSUNINIT(linux_current, SI_SUB_EVENTHANDLER, SI_ORDER_SECOND, linux_current_uninit, NULL); diff --git a/sys/i386/linux/linux_sysvec.c b/sys/i386/linux/linux_sysvec.c index f660e9028ff..5b288b88e54 100644 --- a/sys/i386/linux/linux_sysvec.c +++ b/sys/i386/linux/linux_sysvec.c @@ -106,7 +106,6 @@ const char *linux_kplatform; static eventhandler_tag linux_exit_tag; static eventhandler_tag linux_exec_tag; -static eventhandler_tag linux_thread_dtor_tag; #define LINUX_T_UNKNOWN 255 static int _bsd_to_linux_trapcode[] = { @@ -1044,8 +1043,7 @@ linux_elf_modevent(module_t mod, int type, void *data) NULL, 1000); linux_exec_tag = EVENTHANDLER_REGISTER(process_exec, linux_proc_exec, NULL, 1000); - linux_thread_dtor_tag = EVENTHANDLER_REGISTER(thread_dtor, - linux_thread_dtor, NULL, EVENTHANDLER_PRI_ANY); + STATIC_EVENTHANDLER_REGISTER(thread_dtor, linux_thread_dtor, ANY); linux_get_machine(&linux_kplatform); linux_szplatform = roundup(strlen(linux_kplatform) + 1, sizeof(char *)); @@ -1074,7 +1072,7 @@ linux_elf_modevent(module_t mod, int type, void *data) mtx_destroy(&futex_mtx); EVENTHANDLER_DEREGISTER(process_exit, linux_exit_tag); EVENTHANDLER_DEREGISTER(process_exec, linux_exec_tag); - EVENTHANDLER_DEREGISTER(thread_dtor, linux_thread_dtor_tag); + STATIC_EVENTHANDLER_DEREGISTER(thread_dtor, linux_thread_dtor); linux_dev_shm_destroy(); linux_osd_jail_deregister(); if (bootverbose) diff --git a/sys/kern/init_main.c b/sys/kern/init_main.c index 627a53cc74b..0eea97ab2a0 100644 --- a/sys/kern/init_main.c +++ b/sys/kern/init_main.c @@ -606,9 +606,9 @@ proc0_init(void *dummy __unused) * to do this until all other structures are fairly sane. */ EVENTHANDLER_DIRECT_INVOKE(process_init, p); - EVENTHANDLER_DIRECT_INVOKE(thread_init, td); + STATIC_EVENTHANDLER_INVOKE(thread_init, td); EVENTHANDLER_DIRECT_INVOKE(process_ctor, p); - EVENTHANDLER_DIRECT_INVOKE(thread_ctor, td); + STATIC_EVENTHANDLER_INVOKE(thread_ctor, td); /* * Charge root for one process. diff --git a/sys/kern/kern_dtrace.c b/sys/kern/kern_dtrace.c index cbe6bdf15fd..5d215f5575c 100644 --- a/sys/kern/kern_dtrace.c +++ b/sys/kern/kern_dtrace.c @@ -93,14 +93,14 @@ kdtrace_thread_size() } static void -kdtrace_thread_ctor(void *arg __unused, struct thread *td) +kdtrace_thread_ctor(struct thread *td) { td->td_dtrace = malloc(KDTRACE_THREAD_SIZE, M_KDTRACE, M_WAITOK|M_ZERO); } static void -kdtrace_thread_dtor(void *arg __unused, struct thread *td) +kdtrace_thread_dtor(struct thread *td) { if (td->td_dtrace != NULL) { @@ -120,10 +120,8 @@ init_dtrace(void *dummy __unused) EVENTHANDLER_PRI_ANY); EVENTHANDLER_REGISTER(process_dtor, kdtrace_proc_dtor, NULL, EVENTHANDLER_PRI_ANY); - EVENTHANDLER_REGISTER(thread_ctor, kdtrace_thread_ctor, NULL, - EVENTHANDLER_PRI_ANY); - EVENTHANDLER_REGISTER(thread_dtor, kdtrace_thread_dtor, NULL, - EVENTHANDLER_PRI_ANY); + STATIC_EVENTHANDLER_REGISTER(thread_ctor, kdtrace_thread_ctor, ANY); + STATIC_EVENTHANDLER_REGISTER(thread_dtor, kdtrace_thread_dtor, ANY); } SYSINIT(kdtrace, SI_SUB_KDTRACE, SI_ORDER_FIRST, init_dtrace, NULL); diff --git a/sys/kern/kern_kcov.c b/sys/kern/kern_kcov.c index cedfa2c081b..8a68ee8d8ab 100644 --- a/sys/kern/kern_kcov.c +++ b/sys/kern/kern_kcov.c @@ -515,7 +515,7 @@ kcov_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag __unused, } static void -kcov_thread_dtor(void *arg __unused, struct thread *td) +kcov_thread_dtor(struct thread *td) { struct kcov_info *info; @@ -574,8 +574,7 @@ kcov_init(const void *unused) return; } - EVENTHANDLER_REGISTER(thread_dtor, kcov_thread_dtor, NULL, - EVENTHANDLER_PRI_ANY); + STATIC_EVENTHANDLER_REGISTER(thread_dtor, kcov_thread_dtor, ANY); } SYSINIT(kcovdev, SI_SUB_LAST, SI_ORDER_ANY, kcov_init, NULL); diff --git a/sys/kern/kern_proc.c b/sys/kern/kern_proc.c index 7231c34cb8c..61a4f78188c 100644 --- a/sys/kern/kern_proc.c +++ b/sys/kern/kern_proc.c @@ -211,7 +211,7 @@ proc_ctor(void *mem, int size, void *arg, int flags) td = FIRST_THREAD_IN_PROC(p); if (td != NULL) { /* Make sure all thread constructors are executed */ - EVENTHANDLER_DIRECT_INVOKE(thread_ctor, td); + STATIC_EVENTHANDLER_INVOKE(thread_ctor, td); } return (0); } @@ -240,7 +240,7 @@ proc_dtor(void *mem, int size, void *arg) MPASS(td->td_su == NULL); /* Make sure all thread destructors are executed */ - EVENTHANDLER_DIRECT_INVOKE(thread_dtor, td); + STATIC_EVENTHANDLER_INVOKE(thread_dtor, td); } EVENTHANDLER_DIRECT_INVOKE(process_dtor, p); if (p->p_ksi != NULL) diff --git a/sys/kern/kern_thread.c b/sys/kern/kern_thread.c index 3cab9554b4e..7a4c56571c6 100644 --- a/sys/kern/kern_thread.c +++ b/sys/kern/kern_thread.c @@ -167,10 +167,10 @@ static struct rwlock *tidhashtbl_lock; #define TIDHASH(tid) (&tidhashtbl[(tid) & tidhash]) #define TIDHASHLOCK(tid) (&tidhashtbl_lock[(tid) & tidhashlock]) -EVENTHANDLER_LIST_DEFINE(thread_ctor); -EVENTHANDLER_LIST_DEFINE(thread_dtor); -EVENTHANDLER_LIST_DEFINE(thread_init); -EVENTHANDLER_LIST_DEFINE(thread_fini); +STATIC_EVENTHANDLER_DEFINE(thread_ctor); +STATIC_EVENTHANDLER_DEFINE(thread_dtor); +STATIC_EVENTHANDLER_DEFINE(thread_init); +STATIC_EVENTHANDLER_DEFINE(thread_fini); static bool thread_count_inc_try(void) @@ -415,7 +415,7 @@ thread_init(void *mem, int size, int flags) td->td_sleepqueue = sleepq_alloc(); td->td_turnstile = turnstile_alloc(); td->td_rlqe = NULL; - EVENTHANDLER_DIRECT_INVOKE(thread_init, td); + STATIC_EVENTHANDLER_INVOKE(thread_init, td); umtx_thread_init(td); td->td_kstack = 0; td->td_sel = NULL; @@ -431,7 +431,7 @@ thread_fini(void *mem, int size) struct thread *td; td = (struct thread *)mem; - EVENTHANDLER_DIRECT_INVOKE(thread_fini, td); + STATIC_EVENTHANDLER_INVOKE(thread_fini, td); rlqentry_free(td->td_rlqe); turnstile_free(td->td_turnstile); sleepq_free(td->td_sleepqueue); @@ -604,7 +604,7 @@ thread_reap_domain(struct thread_domain_data *tdd) while (itd != NULL) { ntd = itd->td_zombie; - EVENTHANDLER_DIRECT_INVOKE(thread_dtor, itd); + STATIC_EVENTHANDLER_INVOKE(thread_dtor, itd); tidbatch_add(&tidbatch, itd); credbatch_add(&credbatch, itd); MPASS(itd->td_limit != NULL); @@ -722,7 +722,7 @@ thread_alloc(int pages) } td->td_tid = tid; cpu_thread_alloc(td); - EVENTHANDLER_DIRECT_INVOKE(thread_ctor, td); + STATIC_EVENTHANDLER_INVOKE(thread_ctor, td); return (td); } @@ -765,7 +765,7 @@ thread_free(struct thread *td) { lwpid_t tid; - EVENTHANDLER_DIRECT_INVOKE(thread_dtor, td); + STATIC_EVENTHANDLER_INVOKE(thread_dtor, td); tid = td->td_tid; thread_free_batched(td); tid_free(tid); diff --git a/sys/sys/eventhandler.h b/sys/sys/eventhandler.h index 016a19fd827..d5e05858e25 100644 --- a/sys/sys/eventhandler.h +++ b/sys/sys/eventhandler.h @@ -257,15 +257,6 @@ EVENTHANDLER_DECLARE(app_coredump_progress, app_coredump_progress_fn); EVENTHANDLER_DECLARE(app_coredump_finish, app_coredump_finish_fn); EVENTHANDLER_DECLARE(app_coredump_error, app_coredump_error_fn); -typedef void (*thread_ctor_fn)(void *, struct thread *); -typedef void (*thread_dtor_fn)(void *, struct thread *); -typedef void (*thread_fini_fn)(void *, struct thread *); -typedef void (*thread_init_fn)(void *, struct thread *); -EVENTHANDLER_DECLARE(thread_ctor, thread_ctor_fn); -EVENTHANDLER_DECLARE(thread_dtor, thread_dtor_fn); -EVENTHANDLER_DECLARE(thread_init, thread_init_fn); -EVENTHANDLER_DECLARE(thread_fini, thread_fini_fn); - typedef void (*uma_zone_chfn)(void *); EVENTHANDLER_DECLARE(nmbclusters_change, uma_zone_chfn); EVENTHANDLER_DECLARE(nmbufs_change, uma_zone_chfn); diff --git a/sys/sys/proc.h b/sys/sys/proc.h index c593b500599..7d7b0bf2729 100644 --- a/sys/sys/proc.h +++ b/sys/sys/proc.h @@ -1231,9 +1231,9 @@ EVENTHANDLER_LIST_DECLARE(process_exit); EVENTHANDLER_LIST_DECLARE(process_fork); EVENTHANDLER_LIST_DECLARE(process_exec); -EVENTHANDLER_LIST_DECLARE(thread_ctor); -EVENTHANDLER_LIST_DECLARE(thread_dtor); -EVENTHANDLER_LIST_DECLARE(thread_init); +STATIC_EVENTHANDLER_DECLARE(thread_ctor); +STATIC_EVENTHANDLER_DECLARE(thread_dtor); +STATIC_EVENTHANDLER_DECLARE(thread_init); #endif /* _KERNEL */