diff --git a/share/man/man9/SYSINIT.9 b/share/man/man9/SYSINIT.9 --- a/share/man/man9/SYSINIT.9 +++ b/share/man/man9/SYSINIT.9 @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd December 1, 2010 +.Dd June 7, 2023 .Dt SYSINIT 9 .Os .Sh NAME @@ -34,8 +34,8 @@ .Sh SYNOPSIS .In sys/param.h .In sys/kernel.h -.Fn SYSINIT "uniquifier" "enum sysinit_sub_id subsystem" "enum sysinit_elem_order order" "sysinit_cfunc_t func" "const void *ident" -.Fn SYSUNINIT "uniquifier" "enum sysinit_sub_id subsystem" "enum sysinit_elem_order order" "sysinit_cfunc_t func" "const void *ident" +.Fn SYSINIT "uniquifier" "enum sysinit_sub_id subsystem" "enum sysinit_elem_order order" "func" "args..." +.Fn SYSUNINIT "uniquifier" "enum sysinit_sub_id subsystem" "enum sysinit_elem_order order" "func" "args..." .Sh DESCRIPTION .Nm is a mechanism for scheduling the execution of initialization and teardown @@ -47,6 +47,12 @@ .Pp The .Fn SYSINIT +and +.Fn SYSUNINIT +macros may not be used inside function blocks. +.Pp +The +.Fn SYSINIT macro creates a .Vt struct sysinit and stores it in a startup linker set. @@ -78,10 +84,9 @@ .Fa order of initialization within the subsystem, the .Fa func -function to call, -and the data specified in -.Fa ident -argument to pass the function. +function to call +and the arguments, if any, are given by the +.Fa args . .Pp The .Fn SYSUNINIT @@ -130,15 +135,24 @@ .Sy not executed during shutdown. .Sh EXAMPLES -This example shows the SYSINIT which displays the copyright notice during boot: +How to create a SYSINIT() passing no arguments to a callback function: +.Bd -literal -offset indent +static void +print_notice(void) +{ + printf("This is a 2-clause-BSD licensed system\n"); +} +SYSINIT(announce, SI_SUB_COPYRIGHT, SI_ORDER_FIRST, print_notice, NULL); +.Pp +How to create a SYSINIT() passing a single argument to a callback function: .Bd -literal -offset indent +static const char notice[] = "This is a 2-clause-BSD licensed system\n"; static void -print_caddr_t(void *data) +print_notice(const char *data) { - printf("%s", (char *)data); + printf("%s", notice); } -SYSINIT(announce, SI_SUB_COPYRIGHT, SI_ORDER_FIRST, print_caddr_t, - copyright); +SYSINIT(announce, SI_SUB_COPYRIGHT, SI_ORDER_FIRST, print_notice, notice); .Ed .Sh SEE ALSO .Xr kld 4 , @@ -146,7 +160,11 @@ .Xr DEV_MODULE 9 , .Xr DRIVER_MODULE 9 , .Xr MTX_SYSINIT 9 , -.Xr SYSCALL_MODULE 9 +.Xr RM_SYSINIT 9 , +.Xr RW_SYSINIT 9 , +.Xr SX_SYSINIT 9 , +.Xr SYSCALL_MODULE 9 , +.Xr VNET_SYSINIT 9 .Sh HISTORY The .Nm diff --git a/sys/amd64/amd64/elf_machdep.c b/sys/amd64/amd64/elf_machdep.c --- a/sys/amd64/amd64/elf_machdep.c +++ b/sys/amd64/amd64/elf_machdep.c @@ -232,7 +232,7 @@ }; SYSINIT(oelf64, SI_SUB_EXEC, SI_ORDER_ANY, - (sysinit_cfunc_t)elf64_insert_brand_entry, &freebsd_brand_oinfo); + elf64_insert_brand_entry, &freebsd_brand_oinfo); static Elf64_Brandinfo kfreebsd_brand_info = { .brand = ELFOSABI_FREEBSD, @@ -247,7 +247,7 @@ }; SYSINIT(kelf64, SI_SUB_EXEC, SI_ORDER_ANY, - (sysinit_cfunc_t)elf64_insert_brand_entry, &kfreebsd_brand_info); + elf64_insert_brand_entry, &kfreebsd_brand_info); void elf64_dump_thread(struct thread *td, void *dst, size_t *off) diff --git a/sys/arm/arm/elf_machdep.c b/sys/arm/arm/elf_machdep.c --- a/sys/arm/arm/elf_machdep.c +++ b/sys/arm/arm/elf_machdep.c @@ -122,7 +122,7 @@ }; SYSINIT(elf32, SI_SUB_EXEC, SI_ORDER_FIRST, - (sysinit_cfunc_t) elf32_insert_brand_entry, + elf32_insert_brand_entry, &freebsd_brand_info); static bool diff --git a/sys/arm/arm/pmap-v6.c b/sys/arm/arm/pmap-v6.c --- a/sys/arm/arm/pmap-v6.c +++ b/sys/arm/arm/pmap-v6.c @@ -1275,7 +1275,7 @@ pc->pc_qmap_addr = pages + (PAGE_SIZE * 2); } } -SYSINIT(rpages_init, SI_SUB_CPU, SI_ORDER_ANY, pmap_init_reserved_pages, NULL); +SYSINIT(rpages_init, SI_SUB_CPU, SI_ORDER_ANY, pmap_init_reserved_pages); /* * The function can already be use in second initialization stage. diff --git a/sys/arm/arm/vfp.c b/sys/arm/arm/vfp.c --- a/sys/arm/arm/vfp.c +++ b/sys/arm/arm/vfp.c @@ -195,7 +195,7 @@ } } -SYSINIT(vfp, SI_SUB_CPU, SI_ORDER_ANY, vfp_init, NULL); +SYSINIT(vfp, SI_SUB_CPU, SI_ORDER_ANY, vfp_init); /* start VFP unit, restore the vfp registers from the PCB and retry * the instruction diff --git a/sys/arm64/arm64/elf32_machdep.c b/sys/arm64/arm64/elf32_machdep.c --- a/sys/arm64/arm64/elf32_machdep.c +++ b/sys/arm64/arm64/elf32_machdep.c @@ -140,7 +140,7 @@ }; SYSINIT(elf32, SI_SUB_EXEC, SI_ORDER_FIRST, - (sysinit_cfunc_t)elf32_insert_brand_entry, &freebsd32_brand_info); + elf32_insert_brand_entry, &freebsd32_brand_info); static bool elf32_arm_abi_supported(struct image_params *imgp, int32_t *osrel __unused, diff --git a/sys/arm64/arm64/elf_machdep.c b/sys/arm64/arm64/elf_machdep.c --- a/sys/arm64/arm64/elf_machdep.c +++ b/sys/arm64/arm64/elf_machdep.c @@ -118,7 +118,7 @@ }; SYSINIT(elf64, SI_SUB_EXEC, SI_ORDER_FIRST, - (sysinit_cfunc_t)elf64_insert_brand_entry, &freebsd_brand_info); + elf64_insert_brand_entry, &freebsd_brand_info); static bool get_arm64_addr_mask(struct regset *rs, struct thread *td, void *buf, diff --git a/sys/arm64/arm64/vfp.c b/sys/arm64/arm64/vfp.c --- a/sys/arm64/arm64/vfp.c +++ b/sys/arm64/arm64/vfp.c @@ -296,7 +296,7 @@ thread0.td_pcb->pcb_fpusaved->vfp_fpcr = VFPCR_INIT; } -SYSINIT(vfp, SI_SUB_CPU, SI_ORDER_ANY, vfp_init, NULL); +SYSINIT(vfp, SI_SUB_CPU, SI_ORDER_ANY, vfp_init); struct fpu_kern_ctx * fpu_kern_alloc_ctx(u_int flags) diff --git a/sys/arm64/coresight/coresight.c b/sys/arm64/coresight/coresight.c --- a/sys/arm64/coresight/coresight.c +++ b/sys/arm64/coresight/coresight.c @@ -123,4 +123,4 @@ TAILQ_INIT(&cs_devs); } -SYSINIT(coresight, SI_SUB_DRIVERS, SI_ORDER_FIRST, coresight_init, NULL); +SYSINIT(coresight, SI_SUB_DRIVERS, SI_ORDER_FIRST, coresight_init); diff --git a/sys/cam/scsi/scsi_all.c b/sys/cam/scsi/scsi_all.c --- a/sys/cam/scsi/scsi_all.c +++ b/sys/cam/scsi/scsi_all.c @@ -9308,7 +9308,7 @@ set_scsi_delay(SCSI_DELAY); } } -SYSINIT(scsi_delay, SI_SUB_TUNABLES, SI_ORDER_ANY, init_scsi_delay, NULL); +SYSINIT(scsi_delay, SI_SUB_TUNABLES, SI_ORDER_ANY, init_scsi_delay); static int sysctl_scsi_delay(SYSCTL_HANDLER_ARGS) diff --git a/sys/cddl/compat/opensolaris/kern/opensolaris.c b/sys/cddl/compat/opensolaris/kern/opensolaris.c --- a/sys/cddl/compat/opensolaris/kern/opensolaris.c +++ b/sys/cddl/compat/opensolaris/kern/opensolaris.c @@ -75,7 +75,7 @@ mutex_destroy(&cpu_lock); } -SYSUNINIT(opensolaris_unregister, SI_SUB_OPENSOLARIS, SI_ORDER_FIRST, opensolaris_unload, NULL); +SYSUNINIT(opensolaris_unregister, SI_SUB_OPENSOLARIS, SI_ORDER_FIRST, opensolaris_unload); static int opensolaris_modevent(module_t mod __unused, int type, void *data __unused) diff --git a/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c b/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c --- a/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c +++ b/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c @@ -18431,7 +18431,7 @@ #include SYSINIT(dtrace_load, SI_SUB_DTRACE, SI_ORDER_FIRST, dtrace_load, NULL); -SYSUNINIT(dtrace_unload, SI_SUB_DTRACE, SI_ORDER_FIRST, dtrace_unload, NULL); +SYSUNINIT(dtrace_unload, SI_SUB_DTRACE, SI_ORDER_FIRST, dtrace_unload); SYSINIT(dtrace_anon_init, SI_SUB_DTRACE_ANON, SI_ORDER_FIRST, dtrace_anon_init, NULL); DEV_MODULE(dtrace, dtrace_modevent, NULL); diff --git a/sys/cddl/contrib/opensolaris/uts/common/dtrace/fasttrap.c b/sys/cddl/contrib/opensolaris/uts/common/dtrace/fasttrap.c --- a/sys/cddl/contrib/opensolaris/uts/common/dtrace/fasttrap.c +++ b/sys/cddl/contrib/opensolaris/uts/common/dtrace/fasttrap.c @@ -2657,10 +2657,8 @@ return (error); } -SYSINIT(fasttrap_load, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, fasttrap_load, - NULL); -SYSUNINIT(fasttrap_unload, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, - fasttrap_unload, NULL); +SYSINIT(fasttrap_load, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, fasttrap_load); +SYSUNINIT(fasttrap_unload, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, fasttrap_unload); DEV_MODULE(fasttrap, fasttrap_modevent, NULL); MODULE_VERSION(fasttrap, 1); diff --git a/sys/cddl/dev/dtmalloc/dtmalloc.c b/sys/cddl/dev/dtmalloc/dtmalloc.c --- a/sys/cddl/dev/dtmalloc/dtmalloc.c +++ b/sys/cddl/dev/dtmalloc/dtmalloc.c @@ -211,7 +211,7 @@ } SYSINIT(dtmalloc_load, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, dtmalloc_load, NULL); -SYSUNINIT(dtmalloc_unload, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, dtmalloc_unload, NULL); +SYSUNINIT(dtmalloc_unload, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, dtmalloc_unload); DEV_MODULE(dtmalloc, dtmalloc_modevent, NULL); MODULE_VERSION(dtmalloc, 1); diff --git a/sys/cddl/dev/fbt/fbt.c b/sys/cddl/dev/fbt/fbt.c --- a/sys/cddl/dev/fbt/fbt.c +++ b/sys/cddl/dev/fbt/fbt.c @@ -1316,7 +1316,7 @@ } SYSINIT(fbt_load, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, fbt_load, NULL); -SYSUNINIT(fbt_unload, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, fbt_unload, NULL); +SYSUNINIT(fbt_unload, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, fbt_unload); DEV_MODULE(fbt, fbt_modevent, NULL); MODULE_VERSION(fbt, 1); diff --git a/sys/cddl/dev/profile/profile.c b/sys/cddl/dev/profile/profile.c --- a/sys/cddl/dev/profile/profile.c +++ b/sys/cddl/dev/profile/profile.c @@ -659,7 +659,7 @@ } SYSINIT(profile_load, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, profile_load, NULL); -SYSUNINIT(profile_unload, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, profile_unload, NULL); +SYSUNINIT(profile_unload, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, profile_unload); DEV_MODULE(profile, profile_modevent, NULL); MODULE_VERSION(profile, 1); diff --git a/sys/cddl/dev/prototype.c b/sys/cddl/dev/prototype.c --- a/sys/cddl/dev/prototype.c +++ b/sys/cddl/dev/prototype.c @@ -139,7 +139,7 @@ } SYSINIT(prototype_load, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, prototype_load, NULL); -SYSUNINIT(prototype_unload, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, prototype_unload, NULL); +SYSUNINIT(prototype_unload, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, prototype_unload); DEV_MODULE(prototype, prototype_modevent, NULL); MODULE_VERSION(prototype, 1); diff --git a/sys/cddl/dev/sdt/sdt.c b/sys/cddl/dev/sdt/sdt.c --- a/sys/cddl/dev/sdt/sdt.c +++ b/sys/cddl/dev/sdt/sdt.c @@ -433,8 +433,8 @@ } } -SYSINIT(sdt_load, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, sdt_load, NULL); -SYSUNINIT(sdt_unload, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, sdt_unload, NULL); +SYSINIT(sdt_load, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, sdt_load); +SYSUNINIT(sdt_unload, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, sdt_unload); DEV_MODULE(sdt, sdt_modevent, NULL); MODULE_VERSION(sdt, 1); diff --git a/sys/compat/ia32/ia32_sysvec.c b/sys/compat/ia32/ia32_sysvec.c --- a/sys/compat/ia32/ia32_sysvec.c +++ b/sys/compat/ia32/ia32_sysvec.c @@ -160,7 +160,7 @@ }; SYSINIT(ia32, SI_SUB_EXEC, SI_ORDER_MIDDLE, - (sysinit_cfunc_t) elf32_insert_brand_entry, + elf32_insert_brand_entry, &ia32_brand_info); static Elf32_Brandinfo ia32_brand_oinfo = { @@ -176,7 +176,7 @@ }; SYSINIT(oia32, SI_SUB_EXEC, SI_ORDER_ANY, - (sysinit_cfunc_t) elf32_insert_brand_entry, + elf32_insert_brand_entry, &ia32_brand_oinfo); static Elf32_Brandinfo kia32_brand_info = { @@ -191,7 +191,7 @@ }; SYSINIT(kia32, SI_SUB_EXEC, SI_ORDER_ANY, - (sysinit_cfunc_t) elf32_insert_brand_entry, + elf32_insert_brand_entry, &kia32_brand_info); void diff --git a/sys/dev/fdt/fdt_slicer.c b/sys/dev/fdt/fdt_slicer.c --- a/sys/dev/fdt/fdt_slicer.c +++ b/sys/dev/fdt/fdt_slicer.c @@ -163,8 +163,8 @@ * i. e. after g_init() is called, due to the use of the GEOM topology_lock * in flash_register_slicer(). However, must be before SI_SUB_CONFIGURE. */ -SYSINIT(fdt_slicer, SI_SUB_DRIVERS, SI_ORDER_THIRD, fdt_slicer_init, NULL); -SYSUNINIT(fdt_slicer, SI_SUB_DRIVERS, SI_ORDER_THIRD, fdt_slicer_cleanup, NULL); +SYSINIT(fdt_slicer, SI_SUB_DRIVERS, SI_ORDER_THIRD, fdt_slicer_init); +SYSUNINIT(fdt_slicer, SI_SUB_DRIVERS, SI_ORDER_THIRD, fdt_slicer_cleanup); static int mod_handler(module_t mod, int type, void *data) diff --git a/sys/dev/iommu/iommu_gas.c b/sys/dev/iommu/iommu_gas.c --- a/sys/dev/iommu/iommu_gas.c +++ b/sys/dev/iommu/iommu_gas.c @@ -87,7 +87,7 @@ sizeof(struct iommu_map_entry), NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_NODUMP); } -SYSINIT(intel_gas, SI_SUB_DRIVERS, SI_ORDER_FIRST, intel_gas_init, NULL); +SYSINIT(intel_gas, SI_SUB_DRIVERS, SI_ORDER_FIRST, intel_gas_init); struct iommu_map_entry * iommu_gas_alloc_entry(struct iommu_domain *domain, u_int flags) diff --git a/sys/dev/mlx4/mlx4_core/mlx4_main.c b/sys/dev/mlx4/mlx4_core/mlx4_main.c --- a/sys/dev/mlx4/mlx4_core/mlx4_main.c +++ b/sys/dev/mlx4/mlx4_core/mlx4_main.c @@ -1164,6 +1164,8 @@ return err; } +static DEFINE_MUTEX(mlx4_set_port_type_mutex); + static ssize_t set_port_type(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) @@ -1172,10 +1174,9 @@ port_attr); struct mlx4_dev *mdev = info->dev; enum mlx4_port_type port_type; - static DEFINE_MUTEX(set_port_type_mutex); int err; - mutex_lock(&set_port_type_mutex); + mutex_lock(&mlx4_set_port_type_mutex); if (!strcmp(buf, "ib\n")) { port_type = MLX4_PORT_TYPE_IB; @@ -1192,7 +1193,7 @@ err = __set_port_type(info, port_type); err_out: - mutex_unlock(&set_port_type_mutex); + mutex_unlock(&mlx4_set_port_type_mutex); return err ? err : count; } diff --git a/sys/dev/nvme/nvme.c b/sys/dev/nvme/nvme.c --- a/sys/dev/nvme/nvme.c +++ b/sys/dev/nvme/nvme.c @@ -61,15 +61,13 @@ for (i = 0; i < NVME_MAX_CONSUMERS; i++) nvme_consumer[i].id = INVALID_CONSUMER_ID; } - -SYSINIT(nvme_register, SI_SUB_DRIVERS, SI_ORDER_SECOND, nvme_init, NULL); +SYSINIT(nvme_register, SI_SUB_DRIVERS, SI_ORDER_SECOND, nvme_init); static void nvme_uninit(void) { } - -SYSUNINIT(nvme_unregister, SI_SUB_DRIVERS, SI_ORDER_SECOND, nvme_uninit, NULL); +SYSUNINIT(nvme_unregister, SI_SUB_DRIVERS, SI_ORDER_SECOND, nvme_uninit); int nvme_shutdown(device_t dev) diff --git a/sys/dev/nvme/nvme_sim.c b/sys/dev/nvme/nvme_sim.c --- a/sys/dev/nvme/nvme_sim.c +++ b/sys/dev/nvme/nvme_sim.c @@ -385,7 +385,7 @@ } SYSINIT(nvme_sim_register, SI_SUB_DRIVERS, SI_ORDER_ANY, - nvme_sim_init, NULL); + nvme_sim_init); static void nvme_sim_uninit(void) @@ -398,4 +398,4 @@ } SYSUNINIT(nvme_sim_unregister, SI_SUB_DRIVERS, SI_ORDER_ANY, - nvme_sim_uninit, NULL); + nvme_sim_uninit); diff --git a/sys/dev/xdma/xdma.c b/sys/dev/xdma/xdma.c --- a/sys/dev/xdma/xdma.c +++ b/sys/dev/xdma/xdma.c @@ -563,4 +563,4 @@ mtx_init(&xdma_mtx, "xDMA", NULL, MTX_DEF); } -SYSINIT(xdma, SI_SUB_DRIVERS, SI_ORDER_FIRST, xdma_init, NULL); +SYSINIT(xdma, SI_SUB_DRIVERS, SI_ORDER_FIRST, xdma_init); diff --git a/sys/fs/nfsclient/nfs_clkdtrace.c b/sys/fs/nfsclient/nfs_clkdtrace.c --- a/sys/fs/nfsclient/nfs_clkdtrace.c +++ b/sys/fs/nfsclient/nfs_clkdtrace.c @@ -576,7 +576,7 @@ SYSINIT(dtnfsclient_load, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, dtnfsclient_load, NULL); SYSUNINIT(dtnfsclient_unload, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, - dtnfsclient_unload, NULL); + dtnfsclient_unload); DEV_MODULE(dtnfscl, dtnfsclient_modevent, NULL); MODULE_VERSION(dtnfscl, 1); diff --git a/sys/i386/i386/elan-mmcr.c b/sys/i386/i386/elan-mmcr.c --- a/sys/i386/i386/elan-mmcr.c +++ b/sys/i386/i386/elan-mmcr.c @@ -508,4 +508,4 @@ EVENTHANDLER_REGISTER(watchdog_list, elan_watchdog, NULL, 0); } -SYSINIT(elan, SI_SUB_PSEUDO, SI_ORDER_MIDDLE, elan_drvinit, NULL); +SYSINIT(elan, SI_SUB_PSEUDO, SI_ORDER_MIDDLE, elan_drvinit); diff --git a/sys/i386/i386/elf_machdep.c b/sys/i386/i386/elf_machdep.c --- a/sys/i386/i386/elf_machdep.c +++ b/sys/i386/i386/elf_machdep.c @@ -108,7 +108,7 @@ }; SYSINIT(elf32, SI_SUB_EXEC, SI_ORDER_FIRST, - (sysinit_cfunc_t) elf32_insert_brand_entry, + elf32_insert_brand_entry, &freebsd_brand_info); static Elf32_Brandinfo freebsd_brand_oinfo = { @@ -124,7 +124,7 @@ }; SYSINIT(oelf32, SI_SUB_EXEC, SI_ORDER_ANY, - (sysinit_cfunc_t) elf32_insert_brand_entry, + elf32_insert_brand_entry, &freebsd_brand_oinfo); static Elf32_Brandinfo kfreebsd_brand_info = { @@ -140,7 +140,7 @@ }; SYSINIT(kelf32, SI_SUB_EXEC, SI_ORDER_ANY, - (sysinit_cfunc_t) elf32_insert_brand_entry, + elf32_insert_brand_entry, &kfreebsd_brand_info); void diff --git a/sys/i386/i386/machdep.c b/sys/i386/i386/machdep.c --- a/sys/i386/i386/machdep.c +++ b/sys/i386/i386/machdep.c @@ -1697,7 +1697,7 @@ PCPU_SET(copyout_buf, copyout_buf); copyout_init_tramp(); } -SYSINIT(vm_mem, SI_SUB_VM, SI_ORDER_SECOND, machdep_init_trampoline, NULL); +SYSINIT(vm_mem, SI_SUB_VM, SI_ORDER_SECOND, machdep_init_trampoline); #ifdef COMPAT_43 static void @@ -1722,7 +1722,7 @@ desc.sd_hibase = lcall_addr >> 24; bcopy(&desc, &ldt[LSYS5CALLS_SEL], sizeof(desc)); } -SYSINIT(elf32, SI_SUB_EXEC, SI_ORDER_ANY, i386_setup_lcall_gate, NULL); +SYSINIT(elf32, SI_SUB_EXEC, SI_ORDER_ANY, i386_setup_lcall_gate); #endif void diff --git a/sys/i386/i386/pmap.c b/sys/i386/i386/pmap.c --- a/sys/i386/i386/pmap.c +++ b/sys/i386/i386/pmap.c @@ -788,7 +788,7 @@ } } -SYSINIT(rpages_init, SI_SUB_CPU, SI_ORDER_ANY, pmap_init_reserved_pages, NULL); +SYSINIT(rpages_init, SI_SUB_CPU, SI_ORDER_ANY, pmap_init_reserved_pages); /* * Setup the PAT MSR. diff --git a/sys/kern/init_main.c b/sys/kern/init_main.c --- a/sys/kern/init_main.c +++ b/sys/kern/init_main.c @@ -153,7 +153,11 @@ * symbol is not undefined. A sybsystem ID of SI_SUB_DUMMY is never * executed. */ -SYSINIT(placeholder, SI_SUB_DUMMY, SI_ORDER_ANY, NULL, NULL); +static void +placeholder(void) +{ +} +SYSINIT(placeholder, SI_SUB_DUMMY, SI_ORDER_ANY, placeholder); /* * The sysinit table itself. Items are checked off as the are run. @@ -359,7 +363,7 @@ } static void -print_version(void *data __unused) +print_version(void) { int len; @@ -375,7 +379,7 @@ copyright); SYSINIT(trademark, SI_SUB_COPYRIGHT, SI_ORDER_SECOND, print_caddr_t, trademark); -SYSINIT(version, SI_SUB_COPYRIGHT, SI_ORDER_THIRD, print_version, NULL); +SYSINIT(version, SI_SUB_COPYRIGHT, SI_ORDER_THIRD, print_version); #ifdef WITNESS static char wit_warn[] = @@ -456,7 +460,7 @@ */ /* ARGSUSED*/ static void -proc0_init(void *dummy __unused) +proc0_init(void) { struct proc *p; struct thread *td; @@ -640,11 +644,11 @@ racct_add_force(p, RACCT_NPROC, 1); PROC_UNLOCK(p); } -SYSINIT(p0init, SI_SUB_INTRINSIC, SI_ORDER_FIRST, proc0_init, NULL); +SYSINIT(p0init, SI_SUB_INTRINSIC, SI_ORDER_FIRST, proc0_init); /* ARGSUSED*/ static void -proc0_post(void *dummy __unused) +proc0_post(void) { struct proc *p; struct rusage ru; @@ -678,7 +682,7 @@ PCPU_SET(switchtime, cpu_ticks()); PCPU_SET(switchticks, ticks); } -SYSINIT(p0post, SI_SUB_INTRINSIC_POST, SI_ORDER_FIRST, proc0_post, NULL); +SYSINIT(p0post, SI_SUB_INTRINSIC_POST, SI_ORDER_FIRST, proc0_post); /* *************************************************************************** @@ -806,7 +810,7 @@ * runnable yet, init execution is started when userspace can be served. */ static void -create_init(const void *udata __unused) +create_init(void) { struct fork_req fr; struct ucred *newcred, *oldcred; @@ -845,13 +849,13 @@ cpu_fork_kthread_handler(FIRST_THREAD_IN_PROC(initproc), start_init, NULL); } -SYSINIT(init, SI_SUB_CREATE_INIT, SI_ORDER_FIRST, create_init, NULL); +SYSINIT(init, SI_SUB_CREATE_INIT, SI_ORDER_FIRST, create_init); /* * Make it runnable now. */ static void -kick_init(const void *udata __unused) +kick_init(void) { struct thread *td; @@ -860,7 +864,7 @@ TD_SET_CAN_RUN(td); sched_add(td, SRQ_BORING); } -SYSINIT(kickinit, SI_SUB_KTHREAD_INIT, SI_ORDER_MIDDLE, kick_init, NULL); +SYSINIT(kickinit, SI_SUB_KTHREAD_INIT, SI_ORDER_MIDDLE, kick_init); /* * DDB(4). diff --git a/sys/kern/kern_boottrace.c b/sys/kern/kern_boottrace.c --- a/sys/kern/kern_boottrace.c +++ b/sys/kern/kern_boottrace.c @@ -609,4 +609,4 @@ st.table = malloc(st.size * sizeof(struct bt_event), M_BOOTTRACE, M_WAITOK | M_ZERO); } -SYSINIT(boottrace, SI_SUB_CPU, SI_ORDER_ANY, boottrace_init, 0); +SYSINIT(boottrace, SI_SUB_CPU, SI_ORDER_ANY, boottrace_init); diff --git a/sys/kern/kern_devctl.c b/sys/kern/kern_devctl.c --- a/sys/kern/kern_devctl.c +++ b/sys/kern/kern_devctl.c @@ -170,7 +170,7 @@ EVENTHANDLER_REGISTER(device_nomatch, devctl_nomatch_handler, NULL, EVENTHANDLER_PRI_LAST); } -SYSINIT(devctl_init, SI_SUB_DRIVERS, SI_ORDER_SECOND, devctl_init, NULL); +SYSINIT(devctl_init, SI_SUB_DRIVERS, SI_ORDER_SECOND, devctl_init); /* * A device was added to the tree. We are called just after it successfully diff --git a/sys/kern/kern_event.c b/sys/kern/kern_event.c --- a/sys/kern/kern_event.c +++ b/sys/kern/kern_event.c @@ -2790,7 +2790,7 @@ NULL, NULL, UMA_ALIGN_PTR, 0); ast_register(TDA_KQUEUE, ASTR_ASTF_REQUIRED, 0, ast_kqueue); } -SYSINIT(knote, SI_SUB_PSEUDO, SI_ORDER_ANY, knote_init, NULL); +SYSINIT(knote, SI_SUB_PSEUDO, SI_ORDER_ANY, knote_init); static struct knote * knote_alloc(int mflag) diff --git a/sys/kern/kern_linker.c b/sys/kern/kern_linker.c --- a/sys/kern/kern_linker.c +++ b/sys/kern/kern_linker.c @@ -423,9 +423,7 @@ linker_file_register_modules(linker_kernel_file); sx_xunlock(&kld_sx); } - -SYSINIT(linker_kernel, SI_SUB_KLD, SI_ORDER_ANY, linker_init_kernel_modules, - NULL); +SYSINIT(linker_kernel, SI_SUB_KLD, SI_ORDER_ANY, linker_init_kernel_modules); static int linker_load_file(const char *filename, linker_file_t *result) diff --git a/sys/kern/kern_malloc.c b/sys/kern/kern_malloc.c --- a/sys/kern/kern_malloc.c +++ b/sys/kern/kern_malloc.c @@ -309,7 +309,7 @@ if (numzones > MALLOC_DEBUG_MAXZONES) numzones = MALLOC_DEBUG_MAXZONES; } -SYSINIT(numzones, SI_SUB_TUNABLES, SI_ORDER_ANY, tunable_set_numzones, NULL); +SYSINIT(numzones, SI_SUB_TUNABLES, SI_ORDER_ANY, tunable_set_numzones); SYSCTL_INT(_debug_malloc, OID_AUTO, numzones, CTLFLAG_RDTUN | CTLFLAG_NOFETCH, &numzones, 0, "Number of malloc uma subzones"); diff --git a/sys/kern/kern_poll.c b/sys/kern/kern_poll.c --- a/sys/kern/kern_poll.c +++ b/sys/kern/kern_poll.c @@ -276,7 +276,7 @@ EVENTHANDLER_REGISTER(shutdown_post_sync, poll_shutdown, NULL, SHUTDOWN_PRI_LAST); } -SYSINIT(device_poll, SI_SUB_SOFTINTR, SI_ORDER_MIDDLE, init_device_poll, NULL); +SYSINIT(device_poll, SI_SUB_SOFTINTR, SI_ORDER_MIDDLE, init_device_poll); /* * Hook from hardclock. Tries to schedule a netisr, but keeps track diff --git a/sys/kern/kern_racct.c b/sys/kern/kern_racct.c --- a/sys/kern/kern_racct.c +++ b/sys/kern/kern_racct.c @@ -1350,7 +1350,7 @@ kproc_start(&racctd_kp); } -SYSINIT(racctd, SI_SUB_RACCTD, SI_ORDER_FIRST, racctd_init, NULL); +SYSINIT(racctd, SI_SUB_RACCTD, SI_ORDER_FIRST, racctd_init); static void racct_init(void) @@ -1367,6 +1367,6 @@ */ prison0.pr_prison_racct = prison_racct_find("0"); } -SYSINIT(racct, SI_SUB_RACCT, SI_ORDER_FIRST, racct_init, NULL); +SYSINIT(racct, SI_SUB_RACCT, SI_ORDER_FIRST, racct_init); #endif /* !RACCT */ diff --git a/sys/kern/kern_rangelock.c b/sys/kern/kern_rangelock.c --- a/sys/kern/kern_rangelock.c +++ b/sys/kern/kern_rangelock.c @@ -54,7 +54,7 @@ rl_entry_zone = uma_zcreate("rl_entry", sizeof(struct rl_q_entry), NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, 0); } -SYSINIT(vfs, SI_SUB_LOCK, SI_ORDER_ANY, rangelock_sys_init, NULL); +SYSINIT(vfs, SI_SUB_LOCK, SI_ORDER_ANY, rangelock_sys_init); static struct rl_q_entry * rlqentry_alloc(void) diff --git a/sys/kern/kern_rctl.c b/sys/kern/kern_rctl.c --- a/sys/kern/kern_rctl.c +++ b/sys/kern/kern_rctl.c @@ -213,7 +213,7 @@ { NULL, -1 }}; static void rctl_init(void); -SYSINIT(rctl, SI_SUB_RACCT, SI_ORDER_FIRST, rctl_init, NULL); +SYSINIT(rctl, SI_SUB_RACCT, SI_ORDER_FIRST, rctl_init); static uma_zone_t rctl_rule_zone; static uma_zone_t rctl_rule_link_zone; diff --git a/sys/kern/kern_sharedpage.c b/sys/kern/kern_sharedpage.c --- a/sys/kern/kern_sharedpage.c +++ b/sys/kern/kern_sharedpage.c @@ -114,7 +114,7 @@ } static void -shared_page_init(void *dummy __unused) +shared_page_init(void) { vm_page_t m; vm_offset_t addr; @@ -132,8 +132,7 @@ shared_page_mapping = (char *)addr; } -SYSINIT(shp, SI_SUB_EXEC, SI_ORDER_FIRST, (sysinit_cfunc_t)shared_page_init, - NULL); +SYSINIT(shp, SI_SUB_EXEC, SI_ORDER_FIRST, shared_page_init); /* * Push the timehands update to the shared page. diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c --- a/sys/kern/kern_sig.c +++ b/sys/kern/kern_sig.c @@ -174,7 +174,7 @@ "Discard ignored signals on delivery, otherwise queue them to " "the target queue"); -SYSINIT(signal, SI_SUB_P1003_1B, SI_ORDER_FIRST+3, sigqueue_start, NULL); +SYSINIT(signal, SI_SUB_P1003_1B, SI_ORDER_FIRST+3, sigqueue_start); /* * Policy -- Can ucred cr1 send SIGIO to process cr2? diff --git a/sys/kern/kern_time.c b/sys/kern/kern_time.c --- a/sys/kern/kern_time.c +++ b/sys/kern/kern_time.c @@ -117,7 +117,7 @@ #define CLOCK_CALL(clock, call, arglist) \ ((*posix_clocks[clock].call) arglist) -SYSINIT(posix_timer, SI_SUB_P1003_1B, SI_ORDER_FIRST+4, itimer_start, NULL); +SYSINIT(posix_timer, SI_SUB_P1003_1B, SI_ORDER_FIRST+4, itimer_start); static int settime(struct thread *td, struct timeval *tv) diff --git a/sys/kern/subr_pcpu.c b/sys/kern/subr_pcpu.c --- a/sys/kern/subr_pcpu.c +++ b/sys/kern/subr_pcpu.c @@ -118,7 +118,7 @@ } static void -dpcpu_startup(void *dummy __unused) +dpcpu_startup(void) { struct dpcpu_free *df; @@ -128,7 +128,7 @@ TAILQ_INSERT_HEAD(&dpcpu_head, df, df_link); sx_init(&dpcpu_lock, "dpcpu alloc lock"); } -SYSINIT(dpcpu, SI_SUB_KLD, SI_ORDER_FIRST, dpcpu_startup, NULL); +SYSINIT(dpcpu, SI_SUB_KLD, SI_ORDER_FIRST, dpcpu_startup); /* * UMA_ZONE_PCPU zones for general kernel use. @@ -154,7 +154,7 @@ pcpu_zone_64 = uma_zcreate("pcpu-64", 64, NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_PCPU); } -SYSINIT(pcpu_zones, SI_SUB_COUNTER, SI_ORDER_FIRST, pcpu_zones_startup, NULL); +SYSINIT(pcpu_zones, SI_SUB_COUNTER, SI_ORDER_FIRST, pcpu_zones_startup); /* * First-fit extent based allocator for allocating space in the per-cpu diff --git a/sys/kern/subr_sleepqueue.c b/sys/kern/subr_sleepqueue.c --- a/sys/kern/subr_sleepqueue.c +++ b/sys/kern/subr_sleepqueue.c @@ -208,7 +208,7 @@ } SYSINIT(sleepqueue_profiling, SI_SUB_LOCK, SI_ORDER_ANY, - init_sleepqueue_profiling, NULL); + init_sleepqueue_profiling); #endif /* diff --git a/sys/kern/sys_socket.c b/sys/kern/sys_socket.c --- a/sys/kern/sys_socket.c +++ b/sys/kern/sys_socket.c @@ -581,7 +581,7 @@ soaio_kproc_unr = new_unrhdr(1, INT_MAX, NULL); TASK_INIT(&soaio_kproc_task, 0, soaio_kproc_create, NULL); } -SYSINIT(soaio, SI_SUB_VFS, SI_ORDER_ANY, soaio_init, NULL); +SYSINIT(soaio, SI_SUB_VFS, SI_ORDER_ANY, soaio_init); static __inline int soaio_ready(struct socket *so, struct sockbuf *sb) diff --git a/sys/libkern/arc4random.c b/sys/libkern/arc4random.c --- a/sys/libkern/arc4random.c +++ b/sys/libkern/arc4random.c @@ -175,7 +175,7 @@ explicit_bzero(&chacha20->ctx, sizeof(chacha20->ctx)); } } -SYSINIT(chacha20, SI_SUB_LOCK, SI_ORDER_ANY, chacha20_init, NULL); +SYSINIT(chacha20, SI_SUB_LOCK, SI_ORDER_ANY, chacha20_init); static void @@ -187,7 +187,7 @@ mtx_destroy(&chacha20->mtx); free(chacha20inst, M_CHACHA20RANDOM); } -SYSUNINIT(chacha20, SI_SUB_LOCK, SI_ORDER_ANY, chacha20_uninit, NULL); +SYSUNINIT(chacha20, SI_SUB_LOCK, SI_ORDER_ANY, chacha20_uninit); /* diff --git a/sys/libkern/x86/crc32_sse42.c b/sys/libkern/x86/crc32_sse42.c --- a/sys/libkern/x86/crc32_sse42.c +++ b/sys/libkern/x86/crc32_sse42.c @@ -210,7 +210,7 @@ crc32c_zeros(crc32c_2short, 2 * SHORT); } #ifdef _KERNEL -SYSINIT(crc32c_sse42, SI_SUB_LOCK, SI_ORDER_ANY, crc32c_init_hw, NULL); +SYSINIT(crc32c_sse42, SI_SUB_LOCK, SI_ORDER_ANY, crc32c_init_hw); #endif /* Compute CRC-32C using the Intel hardware instruction. */ diff --git a/sys/net/route.c b/sys/net/route.c --- a/sys/net/route.c +++ b/sys/net/route.c @@ -93,7 +93,7 @@ nhops_init(); } -SYSINIT(route_init, SI_SUB_PROTO_DOMAIN, SI_ORDER_THIRD, route_init, NULL); +SYSINIT(route_init, SI_SUB_PROTO_DOMAIN, SI_ORDER_THIRD, route_init); struct rib_head * rt_table_init(int offset, int family, u_int fibnum) diff --git a/sys/net/route/route_tables.c b/sys/net/route/route_tables.c --- a/sys/net/route/route_tables.c +++ b/sys/net/route/route_tables.c @@ -194,7 +194,7 @@ }; osd_jail_register(rtables_prison_destructor, methods); } -SYSINIT(rtables_init, SI_SUB_PROTO_DOMAIN, SI_ORDER_THIRD, rtables_init, NULL); +SYSINIT(rtables_init, SI_SUB_PROTO_DOMAIN, SI_ORDER_THIRD, rtables_init); /* diff --git a/sys/net/rtsock.c b/sys/net/rtsock.c --- a/sys/net/rtsock.c +++ b/sys/net/rtsock.c @@ -315,7 +315,7 @@ rtsbridge_orig_p = rtsock_callback_p; rtsock_callback_p = &rtsbridge; } -SYSINIT(rtsock_init, SI_SUB_PROTO_DOMAIN, SI_ORDER_THIRD, rtsock_init, NULL); +SYSINIT(rtsock_init, SI_SUB_PROTO_DOMAIN, SI_ORDER_THIRD, rtsock_init); static void rts_handle_ifnet_arrival(void *arg __unused, struct ifnet *ifp) diff --git a/sys/net80211/ieee80211_ht.c b/sys/net80211/ieee80211_ht.c --- a/sys/net80211/ieee80211_ht.c +++ b/sys/net80211/ieee80211_ht.c @@ -204,7 +204,7 @@ ieee80211_send_action_register(IEEE80211_ACTION_CAT_HT, IEEE80211_ACTION_HT_TXCHWIDTH, ht_send_action_ht_txchwidth); } -SYSINIT(wlan_ht, SI_SUB_DRIVERS, SI_ORDER_FIRST, ieee80211_ht_init, NULL); +SYSINIT(wlan_ht, SI_SUB_DRIVERS, SI_ORDER_FIRST, ieee80211_ht_init); static int ieee80211_ampdu_enable(struct ieee80211_node *ni, struct ieee80211_tx_ampdu *tap); diff --git a/sys/net80211/ieee80211_hwmp.c b/sys/net80211/ieee80211_hwmp.c --- a/sys/net80211/ieee80211_hwmp.c +++ b/sys/net80211/ieee80211_hwmp.c @@ -252,7 +252,7 @@ */ ieee80211_mesh_register_proto_path(&mesh_proto_hwmp); } -SYSINIT(wlan_hwmp, SI_SUB_DRIVERS, SI_ORDER_SECOND, ieee80211_hwmp_init, NULL); +SYSINIT(wlan_hwmp, SI_SUB_DRIVERS, SI_ORDER_SECOND, ieee80211_hwmp_init); static void hwmp_vattach(struct ieee80211vap *vap) diff --git a/sys/net80211/ieee80211_mesh.c b/sys/net80211/ieee80211_mesh.c --- a/sys/net80211/ieee80211_mesh.c +++ b/sys/net80211/ieee80211_mesh.c @@ -607,7 +607,7 @@ ieee80211_mesh_register_proto_metric(&mesh_metric_airtime); } -SYSINIT(wlan_mesh, SI_SUB_DRIVERS, SI_ORDER_FIRST, ieee80211_mesh_init, NULL); +SYSINIT(wlan_mesh, SI_SUB_DRIVERS, SI_ORDER_FIRST, ieee80211_mesh_init); void ieee80211_mesh_attach(struct ieee80211com *ic) diff --git a/sys/net80211/ieee80211_phy.c b/sys/net80211/ieee80211_phy.c --- a/sys/net80211/ieee80211_phy.c +++ b/sys/net80211/ieee80211_phy.c @@ -369,7 +369,7 @@ ieee80211_setup_ratetable(ratetables[i]); } -SYSINIT(wlan_phy, SI_SUB_DRIVERS, SI_ORDER_FIRST, ieee80211_phy_init, NULL); +SYSINIT(wlan_phy, SI_SUB_DRIVERS, SI_ORDER_FIRST, ieee80211_phy_init); const struct ieee80211_rate_table * ieee80211_get_ratetable(struct ieee80211_channel *c) diff --git a/sys/net80211/ieee80211_proto.c b/sys/net80211/ieee80211_proto.c --- a/sys/net80211/ieee80211_proto.c +++ b/sys/net80211/ieee80211_proto.c @@ -466,7 +466,7 @@ ieee80211_authenticator_register(IEEE80211_AUTH_SHARED, &auth_internal); ieee80211_authenticator_register(IEEE80211_AUTH_AUTO, &auth_internal); } -SYSINIT(wlan_auth, SI_SUB_DRIVERS, SI_ORDER_FIRST, ieee80211_auth_setup, NULL); +SYSINIT(wlan_auth, SI_SUB_DRIVERS, SI_ORDER_FIRST, ieee80211_auth_setup); const struct ieee80211_authenticator * ieee80211_authenticator_get(int auth) diff --git a/sys/net80211/ieee80211_vht.c b/sys/net80211/ieee80211_vht.c --- a/sys/net80211/ieee80211_vht.c +++ b/sys/net80211/ieee80211_vht.c @@ -125,7 +125,7 @@ WLAN_ACTION_VHT_OPMODE_NOTIF, vht_send_action_placeholder); } -SYSINIT(wlan_vht, SI_SUB_DRIVERS, SI_ORDER_FIRST, ieee80211_vht_init, NULL); +SYSINIT(wlan_vht, SI_SUB_DRIVERS, SI_ORDER_FIRST, ieee80211_vht_init); void ieee80211_vht_attach(struct ieee80211com *ic) diff --git a/sys/netinet/cc/cc.c b/sys/netinet/cc/cc.c --- a/sys/netinet/cc/cc.c +++ b/sys/netinet/cc/cc.c @@ -651,7 +651,7 @@ return (err); } -SYSINIT(cc, SI_SUB_PROTO_IFATTACHDOMAIN, SI_ORDER_FIRST, cc_init, NULL); +SYSINIT(cc, SI_SUB_PROTO_IFATTACHDOMAIN, SI_ORDER_FIRST, cc_init); /* Declare sysctl tree and populate it. */ SYSCTL_NODE(_net_inet_tcp, OID_AUTO, cc, CTLFLAG_RW | CTLFLAG_MPSAFE, NULL, diff --git a/sys/netinet/in_fib_algo.c b/sys/netinet/in_fib_algo.c --- a/sys/netinet/in_fib_algo.c +++ b/sys/netinet/in_fib_algo.c @@ -775,4 +775,4 @@ fib_module_register(&flm_radix4_lockless); fib_module_register(&flm_radix4); } -SYSINIT(fib4_algo_init, SI_SUB_PROTO_DOMAIN, SI_ORDER_THIRD, fib4_algo_init, NULL); +SYSINIT(fib4_algo_init, SI_SUB_PROTO_DOMAIN, SI_ORDER_THIRD, fib4_algo_init); diff --git a/sys/netinet/sctp_syscalls.c b/sys/netinet/sctp_syscalls.c --- a/sys/netinet/sctp_syscalls.c +++ b/sys/netinet/sctp_syscalls.c @@ -116,7 +116,7 @@ } #ifdef SCTP -SYSINIT(sctp_syscalls, SI_SUB_SYSCALLS, SI_ORDER_ANY, sctp_syscalls_init, NULL); +SYSINIT(sctp_syscalls, SI_SUB_SYSCALLS, SI_ORDER_ANY, sctp_syscalls_init); #endif int diff --git a/sys/netinet6/in6_fib_algo.c b/sys/netinet6/in6_fib_algo.c --- a/sys/netinet6/in6_fib_algo.c +++ b/sys/netinet6/in6_fib_algo.c @@ -358,4 +358,4 @@ fib_module_register(&flm_radix6_lockless); fib_module_register(&flm_radix6); } -SYSINIT(fib6_algo_init, SI_SUB_PROTO_DOMAIN, SI_ORDER_THIRD, fib6_algo_init, NULL); +SYSINIT(fib6_algo_init, SI_SUB_PROTO_DOMAIN, SI_ORDER_THIRD, fib6_algo_init); diff --git a/sys/netipsec/xform_ipcomp.c b/sys/netipsec/xform_ipcomp.c --- a/sys/netipsec/xform_ipcomp.c +++ b/sys/netipsec/xform_ipcomp.c @@ -776,7 +776,5 @@ xform_detach(&ipcomp_xformsw); } -SYSINIT(ipcomp_xform_init, SI_SUB_PROTO_DOMAIN, SI_ORDER_MIDDLE, - ipcomp_attach, NULL); -SYSUNINIT(ipcomp_xform_uninit, SI_SUB_PROTO_DOMAIN, SI_ORDER_MIDDLE, - ipcomp_detach, NULL); +SYSINIT(ipcomp_xform_init, SI_SUB_PROTO_DOMAIN, SI_ORDER_MIDDLE, ipcomp_attach); +SYSUNINIT(ipcomp_xform_uninit, SI_SUB_PROTO_DOMAIN, SI_ORDER_MIDDLE, ipcomp_detach); diff --git a/sys/netpfil/ipfw/ip_fw2.c b/sys/netpfil/ipfw/ip_fw2.c --- a/sys/netpfil/ipfw/ip_fw2.c +++ b/sys/netpfil/ipfw/ip_fw2.c @@ -3685,8 +3685,7 @@ * Starting up. Done in order after ipfwmod() has been called. * VNET_SYSINIT is also called for each existing vnet and each new vnet. */ -SYSINIT(ipfw_init, IPFW_SI_SUB_FIREWALL, IPFW_MODULE_ORDER, - ipfw_init, NULL); +SYSINIT(ipfw_init, IPFW_SI_SUB_FIREWALL, IPFW_MODULE_ORDER, ipfw_init); VNET_SYSINIT(vnet_ipfw_init, IPFW_SI_SUB_FIREWALL, IPFW_VNET_ORDER, vnet_ipfw_init, NULL); @@ -3697,7 +3696,7 @@ * or when the module is unloaded. */ SYSUNINIT(ipfw_destroy, IPFW_SI_SUB_FIREWALL, IPFW_MODULE_ORDER, - ipfw_destroy, NULL); + ipfw_destroy); VNET_SYSUNINIT(vnet_ipfw_uninit, IPFW_SI_SUB_FIREWALL, IPFW_VNET_ORDER, vnet_ipfw_uninit, NULL); /* end of file */ diff --git a/sys/netpfil/ipfw/ip_fw_nat.c b/sys/netpfil/ipfw/ip_fw_nat.c --- a/sys/netpfil/ipfw/ip_fw_nat.c +++ b/sys/netpfil/ipfw/ip_fw_nat.c @@ -1237,12 +1237,12 @@ MODULE_VERSION(ipfw_nat, 1); SYSINIT(ipfw_nat_init, IPFW_NAT_SI_SUB_FIREWALL, IPFW_NAT_MODULE_ORDER, - ipfw_nat_init, NULL); + ipfw_nat_init); VNET_SYSINIT(vnet_ipfw_nat_init, IPFW_NAT_SI_SUB_FIREWALL, IPFW_NAT_VNET_ORDER, vnet_ipfw_nat_init, NULL); SYSUNINIT(ipfw_nat_destroy, IPFW_NAT_SI_SUB_FIREWALL, IPFW_NAT_MODULE_ORDER, - ipfw_nat_destroy, NULL); + ipfw_nat_destroy); VNET_SYSUNINIT(vnet_ipfw_nat_uninit, IPFW_NAT_SI_SUB_FIREWALL, IPFW_NAT_VNET_ORDER, vnet_ipfw_nat_uninit, NULL); diff --git a/sys/netpfil/pf/pf_ioctl.c b/sys/netpfil/pf/pf_ioctl.c --- a/sys/netpfil/pf/pf_ioctl.c +++ b/sys/netpfil/pf/pf_ioctl.c @@ -6857,7 +6857,7 @@ pf_unload_vnet(); } -SYSUNINIT(pf_unload, SI_SUB_PROTO_FIREWALL, SI_ORDER_SECOND, pf_unload, NULL); +SYSUNINIT(pf_unload, SI_SUB_PROTO_FIREWALL, SI_ORDER_SECOND, pf_unload); VNET_SYSUNINIT(vnet_pf_uninit, SI_SUB_PROTO_FIREWALL, SI_ORDER_THIRD, vnet_pf_uninit, NULL); diff --git a/sys/nfs/bootp_subr.c b/sys/nfs/bootp_subr.c --- a/sys/nfs/bootp_subr.c +++ b/sys/nfs/bootp_subr.c @@ -1848,4 +1848,4 @@ return error; } -SYSINIT(bootp_rootconf, SI_SUB_ROOT_CONF, SI_ORDER_FIRST, bootpc_init, NULL); +SYSINIT(bootp_rootconf, SI_SUB_ROOT_CONF, SI_ORDER_FIRST, bootpc_init); diff --git a/sys/nfs/nfs_diskless.c b/sys/nfs/nfs_diskless.c --- a/sys/nfs/nfs_diskless.c +++ b/sys/nfs/nfs_diskless.c @@ -445,5 +445,5 @@ rootdevnames[0] = "nfs:"; } -SYSINIT(cpu_rootconf, SI_SUB_ROOT_CONF, SI_ORDER_FIRST, nfs_rootconf, NULL); +SYSINIT(cpu_rootconf, SI_SUB_ROOT_CONF, SI_ORDER_FIRST, nfs_rootconf); #endif diff --git a/sys/powerpc/aim/mmu_oea64.c b/sys/powerpc/aim/mmu_oea64.c --- a/sys/powerpc/aim/mmu_oea64.c +++ b/sys/powerpc/aim/mmu_oea64.c @@ -1301,7 +1301,7 @@ } } -SYSINIT(qpages_init, SI_SUB_CPU, SI_ORDER_ANY, moea64_pmap_init_qpages, NULL); +SYSINIT(qpages_init, SI_SUB_CPU, SI_ORDER_ANY, moea64_pmap_init_qpages); /* * Activate a user pmap. This mostly involves setting some non-CPU diff --git a/sys/powerpc/powerpc/elf32_machdep.c b/sys/powerpc/powerpc/elf32_machdep.c --- a/sys/powerpc/powerpc/elf32_machdep.c +++ b/sys/powerpc/powerpc/elf32_machdep.c @@ -161,7 +161,7 @@ }; SYSINIT(elf32, SI_SUB_EXEC, SI_ORDER_FIRST, - (sysinit_cfunc_t) elf32_insert_brand_entry, + elf32_insert_brand_entry, &freebsd_brand_info); static Elf32_Brandinfo freebsd_brand_oinfo = { @@ -177,7 +177,7 @@ }; SYSINIT(oelf32, SI_SUB_EXEC, SI_ORDER_ANY, - (sysinit_cfunc_t) elf32_insert_brand_entry, + elf32_insert_brand_entry, &freebsd_brand_oinfo); void elf_reloc_self(Elf_Dyn *dynp, Elf_Addr relocbase); diff --git a/sys/riscv/riscv/elf_machdep.c b/sys/riscv/riscv/elf_machdep.c --- a/sys/riscv/riscv/elf_machdep.c +++ b/sys/riscv/riscv/elf_machdep.c @@ -129,7 +129,7 @@ .flags = BI_CAN_EXEC_DYN | BI_BRAND_NOTE }; SYSINIT(elf64, SI_SUB_EXEC, SI_ORDER_FIRST, - (sysinit_cfunc_t)elf64_insert_brand_entry, &freebsd_brand_info); + elf64_insert_brand_entry, &freebsd_brand_info); static void elf64_register_sysvec(void *arg) diff --git a/sys/security/audit/audit.c b/sys/security/audit/audit.c --- a/sys/security/audit/audit.c +++ b/sys/security/audit/audit.c @@ -386,7 +386,7 @@ audit_worker_init(); } -SYSINIT(audit_init, SI_SUB_AUDIT, SI_ORDER_FIRST, audit_init, NULL); +SYSINIT(audit_init, SI_SUB_AUDIT, SI_ORDER_FIRST, audit_init); /* * Drain the audit queue and close the log at shutdown. Note that this can diff --git a/sys/security/audit/audit_dtrace.c b/sys/security/audit/audit_dtrace.c --- a/sys/security/audit/audit_dtrace.c +++ b/sys/security/audit/audit_dtrace.c @@ -528,7 +528,7 @@ SYSINIT(dtaudit_load, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, dtaudit_load, NULL); SYSUNINIT(dtaudit_unload, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, - dtaudit_unload, NULL); + dtaudit_unload); DEV_MODULE(dtaudit, dtaudit_modevent, NULL); MODULE_VERSION(dtaudit, 1); diff --git a/sys/security/mac/mac_framework.c b/sys/security/mac/mac_framework.c --- a/sys/security/mac/mac_framework.c +++ b/sys/security/mac/mac_framework.c @@ -738,5 +738,5 @@ return (0); } -SYSINIT(mac, SI_SUB_MAC, SI_ORDER_FIRST, mac_init, NULL); -SYSINIT(mac_late, SI_SUB_MAC_LATE, SI_ORDER_FIRST, mac_late_init, NULL); +SYSINIT(mac, SI_SUB_MAC, SI_ORDER_FIRST, mac_init); +SYSINIT(mac_late, SI_SUB_MAC_LATE, SI_ORDER_FIRST, mac_late_init); diff --git a/sys/security/mac_veriexec/veriexec_fingerprint.c b/sys/security/mac_veriexec/veriexec_fingerprint.c --- a/sys/security/mac_veriexec/veriexec_fingerprint.c +++ b/sys/security/mac_veriexec/veriexec_fingerprint.c @@ -464,4 +464,4 @@ } SYSINIT(mac_veriexec_late, SI_SUB_MAC_LATE, SI_ORDER_ANY, - mac_veriexec_late_init, NULL); + mac_veriexec_late_init); diff --git a/sys/sys/kernel.h b/sys/sys/kernel.h --- a/sys/sys/kernel.h +++ b/sys/sys/kernel.h @@ -226,75 +226,66 @@ }; /* - * Default: no special processing - * - * The C_ version of SYSINIT is for data pointers to const - * data ( and functions taking data pointers to const data ). - * At the moment it is no different from SYSINIT and thus - * still results in warnings. - * - * The casts are necessary to have the compiler produce the - * correct warnings when -Wcast-qual is used. - * + * All macros prefixed by double underscore are internal to the + * sysinit implementation and should not be used outside the scope of + * the implementation and may be subject to change! */ + #ifdef TSLOG -struct sysinit_tslog { - sysinit_cfunc_t func; - const void * data; - const char * name; -}; -static inline void -sysinit_tslog_shim(const void * data) -{ - const struct sysinit_tslog * x = data; - - TSRAW(curthread, TS_ENTER, "SYSINIT", x->name); - (x->func)(x->data); - TSRAW(curthread, TS_EXIT, "SYSINIT", x->name); -} -#define C_SYSINIT(uniquifier, subsystem, order, func, ident) \ - static struct sysinit_tslog uniquifier ## _sys_init_tslog = { \ - func, \ - (ident), \ - #uniquifier \ - }; \ - static struct sysinit uniquifier ## _sys_init = { \ - subsystem, \ - order, \ - sysinit_tslog_shim, \ - &uniquifier ## _sys_init_tslog \ - }; \ - DATA_WSET(sysinit_set,uniquifier ## _sys_init) +#define __SI_FUNCTION_PRE(type, name) \ + TSRAW(curthread, TS_ENTER, #type, #name) +#define __SI_FUNCTION_POST(type, name) \ + TSRAW(curthread, TS_EXIT, #type, #name) #else -#define C_SYSINIT(uniquifier, subsystem, order, func, ident) \ - static struct sysinit uniquifier ## _sys_init = { \ - subsystem, \ - order, \ - func, \ - (ident) \ - }; \ - DATA_WSET(sysinit_set,uniquifier ## _sys_init) +#define __SI_FUNCTION_PRE(type, name) \ + do { } while (0) +#define __SI_FUNCTION_POST(type, name) \ + do { } while (0) #endif -#define SYSINIT(uniquifier, subsystem, order, func, ident) \ - C_SYSINIT(uniquifier, subsystem, order, \ - (sysinit_cfunc_t)(sysinit_nfunc_t)func, (void *)(ident)) +/* + * Explanation of arguments for the __SI_REGISTER() macro: + * + * @param uniq An identifier for the needed functions and structures. + * @param type sysinit_set or sysuninit_set, depending on use case. + * @param _sub SI_SUB_XXX enum. + * @param _order SI_ORDER_XXX enum. + * @param _func Pointer to callback function. + * @param ... Arguments for callback function, if any. + * + * This macro create two functions. The first function calls the given + * function and passes the given argument, also called shim function. + * The second function is the actual constructor function. This way + * pointer casting between types is avoided entirely. + */ +#define __SI_REGISTER(uniq, type, _sub, _order, _func, ...) \ +static void \ +type##_##uniq##_shim(const void *arg __unused) \ +{ \ + __SI_FUNCTION_PRE(type, _func); \ + (_func)(__VA_ARGS__); \ + __SI_FUNCTION_POST(type, _func); \ +} \ +static struct sysinit type##_##uniq = { \ + .subsystem = _sub, \ + .order = _order, \ + .func = &type##_##uniq##_shim, \ + .udata = NULL, \ +}; \ +DATA_WSET(type, type##_##uniq); \ +struct __hack /* - * Called on module unload: no special processing + * Sysinit API macro, called on kernel or module load: */ -#define C_SYSUNINIT(uniquifier, subsystem, order, func, ident) \ - static struct sysinit uniquifier ## _sys_uninit = { \ - subsystem, \ - order, \ - func, \ - (ident) \ - }; \ - DATA_WSET(sysuninit_set,uniquifier ## _sys_uninit) +#define SYSINIT(uniq, sub, order, ...) \ + __SI_REGISTER(uniq, sysinit_set, sub, order, __VA_ARGS__) -#define SYSUNINIT(uniquifier, subsystem, order, func, ident) \ - C_SYSUNINIT(uniquifier, subsystem, order, \ - (sysinit_cfunc_t)(sysinit_nfunc_t)func, (void *)(ident)) +/* + * Sysuninit API macros, called on module unload: + */ +#define SYSUNINIT(uniq, sub, order, ...) \ + __SI_REGISTER(uniq, sysuinit_set, sub, order, __VA_ARGS__) void sysinit_add(struct sysinit **set, struct sysinit **set_end); diff --git a/sys/sys/sysent.h b/sys/sys/sysent.h --- a/sys/sys/sysent.h +++ b/sys/sys/sysent.h @@ -336,9 +336,8 @@ void exec_free_abi_mappings(struct proc *p); void exec_onexec_old(struct thread *td); -#define INIT_SYSENTVEC(name, sv) \ - SYSINIT(name, SI_SUB_EXEC, SI_ORDER_ANY, \ - (sysinit_cfunc_t)exec_sysvec_init, sv); +#define INIT_SYSENTVEC(name, sv) \ + SYSINIT(name, SI_SUB_EXEC, SI_ORDER_ANY, exec_sysvec_init, sv) #endif /* _KERNEL */ diff --git a/sys/vm/memguard.c b/sys/vm/memguard.c --- a/sys/vm/memguard.c +++ b/sys/vm/memguard.c @@ -240,7 +240,7 @@ CTLFLAG_RD | CTLFLAG_MPSAFE | CTLTYPE_ULONG, NULL, 0, memguard_sysctl_mapused, "LU", "MemGuard KVA used"); } -SYSINIT(memguard, SI_SUB_KLD, SI_ORDER_ANY, memguard_sysinit, NULL); +SYSINIT(memguard, SI_SUB_KLD, SI_ORDER_ANY, memguard_sysinit); /* * v2sizep() converts a virtual address of the first page allocated for diff --git a/sys/vm/vm_meter.c b/sys/vm/vm_meter.c --- a/sys/vm/vm_meter.c +++ b/sys/vm/vm_meter.c @@ -106,7 +106,7 @@ COUNTER_ARRAY_ALLOC(cnt, VM_METER_NCOUNTERS, M_WAITOK); } -SYSINIT(counter, SI_SUB_KMEM, SI_ORDER_FIRST, vmcounter_startup, NULL); +SYSINIT(counter, SI_SUB_KMEM, SI_ORDER_FIRST, vmcounter_startup); SYSCTL_UINT(_vm, VM_V_FREE_MIN, v_free_min, CTLFLAG_RW, &vm_cnt.v_free_min, 0, "Minimum low-free-pages threshold"); diff --git a/sys/vm/vm_pageout.c b/sys/vm/vm_pageout.c --- a/sys/vm/vm_pageout.c +++ b/sys/vm/vm_pageout.c @@ -128,8 +128,7 @@ static void vm_pageout_mightbe_oom(struct vm_domain *vmd, int page_shortage, int starting_page_shortage); -SYSINIT(pagedaemon_init, SI_SUB_KTHREAD_PAGE, SI_ORDER_FIRST, vm_pageout_init, - NULL); +SYSINIT(pagedaemon_init, SI_SUB_KTHREAD_PAGE, SI_ORDER_FIRST, vm_pageout_init); struct proc *pageproc; diff --git a/sys/x86/x86/tsc.c b/sys/x86/x86/tsc.c --- a/sys/x86/x86/tsc.c +++ b/sys/x86/x86/tsc.c @@ -745,7 +745,7 @@ */ } } -SYSINIT(tsc_tc, SI_SUB_SMP, SI_ORDER_ANY, init_TSC_tc, NULL); +SYSINIT(tsc_tc, SI_SUB_SMP, SI_ORDER_ANY, init_TSC_tc); static void tsc_update_freq(uint64_t new_freq) diff --git a/sys/x86/xen/hvm.c b/sys/x86/xen/hvm.c --- a/sys/x86/xen/hvm.c +++ b/sys/x86/xen/hvm.c @@ -477,7 +477,7 @@ else DPCPU_SET(vcpu_info, vcpu_info); } -SYSINIT(xen_hvm_cpu_init, SI_SUB_INTR, SI_ORDER_FIRST, xen_hvm_cpu_init, NULL); +SYSINIT(xen_hvm_cpu_init, SI_SUB_INTR, SI_ORDER_FIRST, xen_hvm_cpu_init); bool xen_has_iommu_maps(void) diff --git a/sys/x86/xen/xen_apic.c b/sys/x86/xen/xen_apic.c --- a/sys/x86/xen/xen_apic.c +++ b/sys/x86/xen/xen_apic.c @@ -364,4 +364,4 @@ } /* Switch to using PV IPIs as soon as the vcpu_id is set. */ -SYSINIT(xen_setup_cpus, SI_SUB_SMP, SI_ORDER_SECOND, xen_setup_cpus, NULL); +SYSINIT(xen_setup_cpus, SI_SUB_SMP, SI_ORDER_SECOND, xen_setup_cpus);