Index | Thread | Search

From:
Miod Vallat <miod@online.fr>
Subject:
kernel: more compile-time initializers
To:
tech@openbsd.org
Date:
Mon, 2 Nov 2026 18:35:59 +0000

Download raw body.

Thread
In the early years of <sys/queue.h>, there were no compile-time
initializer macros, so there had to be WHATEVER_INIT() calls at runtime.

The WHATEVER_INITIALIZER macros for compile-time initialization have
been introduced in 1996, but code which was written before had not
necessarily been updated.

The mostly mechanical diff below uses compile-time initializer for
global variables, allowing a few routines to be removed as a result.

Index: sys/arch/alpha/alpha/pmap.c
===================================================================
RCS file: /OpenBSD/src/sys/arch/alpha/alpha/pmap.c,v
diff -u -p -r1.97 pmap.c
--- sys/arch/alpha/alpha/pmap.c	8 Mar 2026 23:00:43 -0000	1.97
+++ sys/arch/alpha/alpha/pmap.c	2 Nov 2026 16:23:14 -0000
@@ -239,7 +239,7 @@ int		pmap_pv_lowat = PMAP_PV_LOWAT;
  * page tables are allocated.  This list is kept LRU-ordered by
  * pmap_activate().
  */
-TAILQ_HEAD(, pmap) pmap_all_pmaps;
+TAILQ_HEAD(, pmap) pmap_all_pmaps = TAILQ_HEAD_INITIALIZER(pmap_all_pmaps);
 
 /*
  * The pools from which pmap structures and sub-structures are allocated.
@@ -819,8 +819,6 @@ pmap_bootstrap(paddr_t ptaddr, u_int max
 	    "l1ptpl", &pmap_l1pt_allocator);
 	pool_init(&pmap_pv_pool, sizeof(struct pv_entry), 0, IPL_VM, 0,
 	    "pvpl", &pmap_pv_page_allocator);
-
-	TAILQ_INIT(&pmap_all_pmaps);
 
 	/*
 	 * Initialize the ASN logic.
Index: sys/arch/amd64/stand/efiboot/efiboot.c
===================================================================
RCS file: /OpenBSD/src/sys/arch/amd64/stand/efiboot/efiboot.c,v
diff -u -p -r1.44 efiboot.c
--- sys/arch/amd64/stand/efiboot/efiboot.c	16 Sep 2025 05:07:33 -0000	1.44
+++ sys/arch/amd64/stand/efiboot/efiboot.c	2 Nov 2026 16:23:14 -0000
@@ -172,7 +172,7 @@ efi_cleanup(void)
 /***********************************************************************
  * Disk
  ***********************************************************************/
-struct disklist_lh efi_disklist;
+struct disklist_lh efi_disklist = TAILQ_HEAD_INITIALIZER(efi_disklist);
 
 void
 efi_diskprobe(void)
@@ -185,8 +185,6 @@ efi_diskprobe(void)
 	EFI_BLOCK_IO_MEDIA	*media;
 	struct diskinfo		*di;
 	EFI_DEVICE_PATH		*dp;
-
-	TAILQ_INIT(&efi_disklist);
 
 	sz = 0;
 	status = BS->LocateHandle(ByProtocol, &blkio_guid, 0, &sz, 0);
Index: sys/arch/amd64/stand/libsa/softraid_amd64.c
===================================================================
RCS file: /OpenBSD/src/sys/arch/amd64/stand/libsa/softraid_amd64.c,v
diff -u -p -r1.11 softraid_amd64.c
--- sys/arch/amd64/stand/libsa/softraid_amd64.c	18 Nov 2025 15:24:09 -0000	1.11
+++ sys/arch/amd64/stand/libsa/softraid_amd64.c	2 Nov 2026 16:23:14 -0000
@@ -136,9 +136,6 @@ srprobe(void)
 	daddr_t off;
 
 	/* Probe for softraid volumes. */
-	SLIST_INIT(&sr_volumes);
-	SLIST_INIT(&sr_keydisks);
-
 	md = alloc(SR_META_SIZE * DEV_BSIZE);
 
 	TAILQ_FOREACH(dip, &disklist, list) {
Index: sys/arch/arm/arm/pmap7.c
===================================================================
RCS file: /OpenBSD/src/sys/arch/arm/arm/pmap7.c,v
diff -u -p -r1.70 pmap7.c
--- sys/arch/arm/arm/pmap7.c	24 Sep 2026 17:57:24 -0000	1.70
+++ sys/arch/arm/arm/pmap7.c	2 Nov 2026 16:23:14 -0000
@@ -318,7 +318,7 @@ pd_entry_t l1_c_pxn;
 /*
  * A list of all L1 tables
  */
-TAILQ_HEAD(, l1_ttable) l1_list;
+TAILQ_HEAD(, l1_ttable) l1_list = TAILQ_HEAD_INITIALIZER(l1_list);
 
 /*
  * The l2_dtable tracks L2_BUCKET_SIZE worth of L1 slots.
@@ -2371,7 +2371,6 @@ pmap_bootstrap(pd_entry_t *kernel_l1pt, 
 	/*
 	 * We can now initialise the first L1's metadata.
 	 */
-	TAILQ_INIT(&l1_list);
 	pmap_init_l1(l1, kernel_l1pt);
 
 	/*
Index: sys/arch/arm64/stand/efiboot/softraid_arm64.c
===================================================================
RCS file: /OpenBSD/src/sys/arch/arm64/stand/efiboot/softraid_arm64.c,v
diff -u -p -r1.7 softraid_arm64.c
--- sys/arch/arm64/stand/efiboot/softraid_arm64.c	18 Nov 2025 15:24:09 -0000	1.7
+++ sys/arch/arm64/stand/efiboot/softraid_arm64.c	2 Nov 2026 16:23:14 -0000
@@ -138,9 +138,6 @@ srprobe(void)
 	daddr_t off;
 
 	/* Probe for softraid volumes. */
-	SLIST_INIT(&sr_volumes);
-	SLIST_INIT(&sr_keydisks);
-
 	md = alloc(SR_META_SIZE * DEV_BSIZE);
 
 	TAILQ_FOREACH(dip, &disklist, list) {
Index: sys/arch/i386/isa/ahc_isa.c
===================================================================
RCS file: /OpenBSD/src/sys/arch/i386/isa/ahc_isa.c,v
diff -u -p -r1.21 ahc_isa.c
--- sys/arch/i386/isa/ahc_isa.c	21 Feb 2022 12:53:39 -0000	1.21
+++ sys/arch/i386/isa/ahc_isa.c	2 Nov 2026 16:23:14 -0000
@@ -138,8 +138,8 @@ struct ahc_isa_slot {
 	int				bus;
 	int				slot;
 };
-static LIST_HEAD(, ahc_isa_slot) ahc_isa_all_slots;
-static int ahc_isa_slot_initialized;
+static LIST_HEAD(, ahc_isa_slot) ahc_isa_all_slots =
+    LIST_HEAD_INITALIZER(ahc_isa_all_slots);
 
 /*
  * Return irq setting of the board, otherwise -1.
@@ -287,11 +287,6 @@ ahc_isa_probe(struct device *parent, voi
 {       
 	struct isa_attach_args *ia = aux;
 	struct ahc_isa_slot *as;
-
-	if (ahc_isa_slot_initialized == 0) {
-		LIST_INIT(&ahc_isa_all_slots);
-		ahc_isa_slot_initialized = 1;
-	}
 
 	if (ia->ia_iobase != IOBASEUNK)
 		return (ahc_isa_match(ia, ia->ia_iobase));
Index: sys/arch/i386/pci/pci_intr_fixup.c
===================================================================
RCS file: /OpenBSD/src/sys/arch/i386/pci/pci_intr_fixup.c,v
diff -u -p -r1.64 pci_intr_fixup.c
--- sys/arch/i386/pci/pci_intr_fixup.c	30 Jan 2023 10:49:05 -0000	1.64
+++ sys/arch/i386/pci/pci_intr_fixup.c	2 Nov 2026 16:23:14 -0000
@@ -117,7 +117,8 @@ struct pciintr_link_map *pciintr_link_lo
 struct pcibios_intr_routing *pciintr_pir_lookup(int, int);
 int	pciintr_bitmap_count_irq(int, int *);
 
-SIMPLEQ_HEAD(, pciintr_link_map) pciintr_link_map_list;
+SIMPLEQ_HEAD(, pciintr_link_map) pciintr_link_map_list =
+    SIMPLEQ_HEAD_INITIALIZER(pciintr_link_map_list);
 
 const struct pciintr_icu_table {
 	pci_vendor_id_t	piit_vendor;
@@ -375,8 +376,6 @@ pciintr_link_init(pci_chipset_tag_t pc)
 		printf("pciintr_link_init: no PIR table\n");
 		return (1);
 	}
-
-	SIMPLEQ_INIT(&pciintr_link_map_list);
 
 	for (entry = 0; entry < pcibios_pir_table_nentries; entry++) {
 		pir = &pcibios_pir_table[entry];
Index: sys/arch/i386/stand/libsa/softraid_i386.c
===================================================================
RCS file: /OpenBSD/src/sys/arch/i386/stand/libsa/softraid_i386.c,v
diff -u -p -r1.7 softraid_i386.c
--- sys/arch/i386/stand/libsa/softraid_i386.c	18 Nov 2025 15:24:09 -0000	1.7
+++ sys/arch/i386/stand/libsa/softraid_i386.c	2 Nov 2026 16:23:14 -0000
@@ -132,9 +132,6 @@ srprobe(void)
 	daddr_t off;
 
 	/* Probe for softraid volumes. */
-	SLIST_INIT(&sr_volumes);
-	SLIST_INIT(&sr_keydisks);
-
 	md = alloc(SR_META_SIZE * DEV_BSIZE);
 
 	TAILQ_FOREACH(dip, &disklist, list) {
Index: sys/arch/riscv64/stand/efiboot/softraid_riscv64.c
===================================================================
RCS file: /OpenBSD/src/sys/arch/riscv64/stand/efiboot/softraid_riscv64.c,v
diff -u -p -r1.6 softraid_riscv64.c
--- sys/arch/riscv64/stand/efiboot/softraid_riscv64.c	18 Nov 2025 15:24:09 -0000	1.6
+++ sys/arch/riscv64/stand/efiboot/softraid_riscv64.c	2 Nov 2026 16:23:15 -0000
@@ -138,9 +138,6 @@ srprobe(void)
 	daddr_t off;
 
 	/* Probe for softraid volumes. */
-	SLIST_INIT(&sr_volumes);
-	SLIST_INIT(&sr_keydisks);
-
 	md = alloc(SR_META_SIZE * DEV_BSIZE);
 
 	TAILQ_FOREACH(dip, &disklist, list) {
Index: sys/arch/sparc64/stand/ofwboot/softraid_sparc64.c
===================================================================
RCS file: /OpenBSD/src/sys/arch/sparc64/stand/ofwboot/softraid_sparc64.c,v
diff -u -p -r1.9 softraid_sparc64.c
--- sys/arch/sparc64/stand/ofwboot/softraid_sparc64.c	17 Oct 2025 16:54:04 -0000	1.9
+++ sys/arch/sparc64/stand/ofwboot/softraid_sparc64.c	2 Nov 2026 16:23:15 -0000
@@ -135,9 +135,6 @@ srprobe(void)
 	dev_t bsd_dev;
 
 	/* Probe for softraid volumes. */
-	SLIST_INIT(&sr_volumes);
-	SLIST_INIT(&sr_keydisks);
-
 	md = alloc(SR_META_SIZE * DEV_BSIZE);
 	diskno = 0;
 	ihandle = -1;
Index: sys/dev/softraid.c
===================================================================
RCS file: /OpenBSD/src/sys/dev/softraid.c,v
diff -u -p -r1.440 softraid.c
--- sys/dev/softraid.c	29 Sep 2026 22:49:58 -0000	1.440
+++ sys/dev/softraid.c	2 Nov 2026 16:23:15 -0000
@@ -172,7 +172,8 @@ struct sr_hotplug_list {
 };
 SLIST_HEAD(sr_hotplug_list_head, sr_hotplug_list);
 
-struct			sr_hotplug_list_head	sr_hotplug_callbacks;
+struct			sr_hotplug_list_head	sr_hotplug_callbacks =
+    SLIST_HEAD_INITIALIZER(sr_hotplug_callbacks);
 extern void		(*softraid_disk_attach)(struct disk *, int);
 
 /* scsi glue */
Index: sys/dev/dt/dt_dev.c
===================================================================
RCS file: /OpenBSD/src/sys/dev/dt/dt_dev.c,v
diff -u -p -r1.49 dt_dev.c
--- sys/dev/dt/dt_dev.c	16 May 2026 12:59:37 -0000	1.49
+++ sys/dev/dt/dt_dev.c	2 Nov 2026 16:23:15 -0000
@@ -138,14 +138,16 @@ struct dt_softc {
 	unsigned int		 ds_lastcpu;	/* [r] last CPU ring read(2). */
 };
 
-SLIST_HEAD(, dt_softc) dtdev_list;	/* [K] list of open /dev/dt nodes */
+SLIST_HEAD(, dt_softc) dtdev_list =	/* [K] list of open /dev/dt nodes */
+    SLIST_HEAD_INITIALIZER(dtdev_list);
 
 /*
  * Probes are created during dt_attach() and never modified/freed during
  * the lifetime of the system.  That's why we consider them as [I]mmutable.
  */
 unsigned int			dt_nprobes;	/* [I] # of probes available */
-SIMPLEQ_HEAD(, dt_probe)	dt_probe_list;	/* [I] list of probes */
+SIMPLEQ_HEAD(, dt_probe)	dt_probe_list =	/* [I] list of probes */
+    SIMPLEQ_HEAD_INITIALIZER(dt_probe_list);
 
 struct rwlock			dt_lock = RWLOCK_INITIALIZER("dtlk");
 volatile uint32_t		dt_tracing = 0;	/* [D] # of processes tracing */
@@ -179,9 +181,6 @@ void	dt_deferred_wakeup(void *);
 void
 dtattach(int count)
 {
-	SLIST_INIT(&dtdev_list);
-	SIMPLEQ_INIT(&dt_probe_list);
-
 	/* Init providers */
 	dt_nprobes += dt_prov_profile_init();
 	dt_nprobes += dt_prov_syscall_init();
Index: sys/dev/isa/elink.c
===================================================================
RCS file: /OpenBSD/src/sys/dev/isa/elink.c,v
diff -u -p -r1.7 elink.c
--- sys/dev/isa/elink.c	29 Jun 2007 15:17:02 -0000	1.7
+++ sys/dev/isa/elink.c	2 Nov 2026 16:23:15 -0000
@@ -51,8 +51,8 @@ struct elink_done_reset {
 	LIST_ENTRY(elink_done_reset)	er_link;
 	int				er_bus;
 };
-static LIST_HEAD(, elink_done_reset) elink_all_resets;
-static int elink_all_resets_initialized;
+static LIST_HEAD(, elink_done_reset) elink_all_resets =
+    LIST_HEAD_INITIALIZER(elink_all_resets);
 
 /*
  * Issue a `global reset' to all cards, and reset the ID state machines.  We
@@ -68,11 +68,6 @@ void
 elink_reset(bus_space_tag_t iot, bus_space_handle_t ioh, int bus)
 {
 	struct elink_done_reset *er;
-
-	if (elink_all_resets_initialized == 0) {
-		LIST_INIT(&elink_all_resets);
-		elink_all_resets_initialized = 1;
-	}
 
 	/*
 	 * Reset these cards if we haven't done so already.
Index: sys/dev/isa/if_ep_isa.c
===================================================================
RCS file: /OpenBSD/src/sys/dev/isa/if_ep_isa.c,v
diff -u -p -r1.33 if_ep_isa.c
--- sys/dev/isa/if_ep_isa.c	11 Sep 2023 08:41:26 -0000	1.33
+++ sys/dev/isa/if_ep_isa.c	2 Nov 2026 16:23:15 -0000
@@ -93,8 +93,8 @@ struct ep_isa_done_probe {
 	LIST_ENTRY(ep_isa_done_probe)	er_link;
 	int				er_bus;
 };
-static LIST_HEAD(, ep_isa_done_probe) ep_isa_all_probes;
-static int ep_isa_probes_initialized;
+static LIST_HEAD(, ep_isa_done_probe) ep_isa_all_probes =
+    LIST_HEAD_INITIALIZER(ep_isa_probes);
 
 #define MAXEPCARDS	20	/* if you have more than 20, you lose */
 
@@ -137,11 +137,6 @@ ep_isa_probe(struct device *parent, void
 	u_int16_t vendor, model;
 	struct ep_isa_done_probe *er;
 	int bus = parent->dv_unit;
-
-	if (ep_isa_probes_initialized == 0) {
-		LIST_INIT(&ep_isa_all_probes);
-		ep_isa_probes_initialized = 1;
-	}
 
 	/*
 	 * Probe this bus if we haven't done so already.
Index: sys/dev/isa/wds.c
===================================================================
RCS file: /OpenBSD/src/sys/dev/isa/wds.c,v
diff -u -p -r1.59 wds.c
--- sys/dev/isa/wds.c	16 Apr 2022 19:19:59 -0000	1.59
+++ sys/dev/isa/wds.c	2 Nov 2026 16:23:15 -0000
@@ -135,7 +135,7 @@ struct wds_buf {
 	TAILQ_ENTRY(wds_buf) chain;
 } wds_buffer[BUFCNT];
 
-TAILQ_HEAD(, wds_buf) wds_free_buffer;
+TAILQ_HEAD(, wds_buf) wds_free_buffer = TAILQ_HEAD_INITIALIZER(wds_free_buffer);
 
 #ifdef WDSDEBUG
 int wds_debug = WDSDEBUG;
@@ -787,7 +787,6 @@ wds_init(struct wds_softc *sc)
 	sc->sc_mbofull = 0;
 
 	/* Clear the buffers. */
-	TAILQ_INIT(&wds_free_buffer);
 	for (i = 0; i < BUFCNT; i++) {
 		wds_buffer[i].busy = 0;
 		TAILQ_INSERT_HEAD(&wds_free_buffer, &wds_buffer[i], chain);
Index: sys/dev/usb/usb.c
===================================================================
RCS file: /OpenBSD/src/sys/dev/usb/usb.c,v
diff -u -p -r1.134 usb.c
--- sys/dev/usb/usb.c	22 Dec 2024 22:36:23 -0000	1.134
+++ sys/dev/usb/usb.c	2 Nov 2026 16:23:17 -0000
@@ -95,9 +95,12 @@ struct usb_softc {
 
 struct rwlock usbpalock;
 
-TAILQ_HEAD(, usb_task) usb_abort_tasks;
-TAILQ_HEAD(, usb_task) usb_explore_tasks;
-TAILQ_HEAD(, usb_task) usb_generic_tasks;
+TAILQ_HEAD(, usb_task) usb_abort_tasks =
+    TAILQ_HEAD_INITIALIZER(usb_abort_tasks);
+TAILQ_HEAD(, usb_task) usb_explore_tasks =
+    TAILQ_HEAD_INITIALIZER(usb_explore_tasks);
+TAILQ_HEAD(, usb_task) usb_generic_tasks =
+    TAILQ_HEAD_INITIALIZER(usb_generic_tasks);
 
 static int usb_nbuses = 0;
 static int usb_run_tasks, usb_run_abort_tasks;
@@ -145,9 +148,6 @@ usb_attach(struct device *parent, struct
 
 	if (usb_nbuses == 0) {
 		rw_init(&usbpalock, "usbpalock");
-		TAILQ_INIT(&usb_abort_tasks);
-		TAILQ_INIT(&usb_explore_tasks);
-		TAILQ_INIT(&usb_generic_tasks);
 		usb_run_tasks = usb_run_abort_tasks = 1;
 		kthread_create_deferred(usb_create_task_threads, NULL);
 	}
Index: sys/dev/wsfont/wsfont.c
===================================================================
RCS file: /OpenBSD/src/sys/dev/wsfont/wsfont.c,v
diff -u -p -r1.65 wsfont.c
--- sys/dev/wsfont/wsfont.c	24 Oct 2023 13:52:49 -0000	1.65
+++ sys/dev/wsfont/wsfont.c	2 Nov 2026 16:23:17 -0000
@@ -132,7 +132,7 @@ struct font {
 	u_short	cookie;
 	u_short	flg;
 };
-TAILQ_HEAD(, font) fontlist;
+TAILQ_HEAD(, font) fontlist = TAILQ_HEAD_INITIALIZER(fontlist);
 
 /* Our list of built-in fonts */
 static struct font builtin_fonts[] = {
@@ -425,8 +425,6 @@ wsfont_init(void)
 	if (again != 0)
 		return;
 	again = 1;
-
-	TAILQ_INIT(&fontlist);
 
 	for (i = 0; i < nitems(builtin_fonts); i++) {
 		TAILQ_INSERT_TAIL(&fontlist, &builtin_fonts[i], chain);
Index: sys/kern/init_main.c
===================================================================
RCS file: /OpenBSD/src/sys/kern/init_main.c,v
diff -u -p -r1.331 init_main.c
--- sys/kern/init_main.c	1 Jan 2026 07:00:57 -0000	1.331
+++ sys/kern/init_main.c	2 Nov 2026 16:23:17 -0000
@@ -164,7 +164,6 @@ main(void *framep)
 	struct process *pr;
 	struct pdevinit *pdev;
 	extern struct pdevinit pdevinit[];
-	extern void disk_init(void);
 
 	/*
 	 * Initialize the current process pointer (curproc) before
@@ -182,7 +181,6 @@ main(void *framep)
 	 * Attempt to find console and initialize
 	 * in case of early panic or other messages.
 	 */
-	config_init();		/* init autoconfiguration data structures */
 	consinit();
 
 	printf("%s\n", copyright);
@@ -199,8 +197,6 @@ main(void *framep)
 
 	rw_obj_init();
 	uvm_init();
-	disk_init();		/* must come before autoconfiguration */
-	tty_init();		/* initialise tty's */
 	cpu_startup();
 
 	random_start(boothowto & RB_GOODRANDOM);	/* Start the flow */
Index: sys/kern/subr_autoconf.c
===================================================================
RCS file: /OpenBSD/src/sys/kern/subr_autoconf.c,v
diff -u -p -r1.98 subr_autoconf.c
--- sys/kern/subr_autoconf.c	16 Sep 2025 12:18:10 -0000	1.98
+++ sys/kern/subr_autoconf.c	2 Nov 2026 16:23:17 -0000
@@ -88,13 +88,16 @@ struct deferred_config {
 	void (*dc_func)(struct device *);
 };
 
-TAILQ_HEAD(, deferred_config) deferred_config_queue;
-TAILQ_HEAD(, deferred_config) mountroot_config_queue;
+TAILQ_HEAD(, deferred_config) deferred_config_queue =
+    TAILQ_HEAD_INITIALIZER(deferred_config_queue);
+TAILQ_HEAD(, deferred_config) mountroot_config_queue =
+    TAILQ_HEAD_INITIALIZER(mountroot_config_queue);
 
 void *config_rootsearch(cfmatch_t, char *, void *);
 void config_process_deferred_children(struct device *);
 
-struct devicelist alldevs;		/* list of all devices */
+struct devicelist alldevs =		/* list of all devices */
+    TAILQ_HEAD_INITIALIZER(alldevs);
 
 volatile int config_pending;		/* semaphore for mountroot */
 
@@ -110,19 +113,6 @@ int	autoconf_attdet;
  * Versioned state of the devices tree so that changes can be detected.
  */
 unsigned int autoconf_serial = 0;
-
-/*
- * Initialize autoconfiguration data structures.  This occurs before console
- * initialization as that might require use of this subsystem.  Furthermore
- * this means that malloc et al. isn't yet available.
- */
-void
-config_init(void)
-{
-	TAILQ_INIT(&deferred_config_queue);
-	TAILQ_INIT(&mountroot_config_queue);
-	TAILQ_INIT(&alldevs);
-}
 
 /*
  * Apply the matching function and choose the best.  This is used
Index: sys/kern/subr_disk.c
===================================================================
RCS file: /OpenBSD/src/sys/kern/subr_disk.c,v
diff -u -p -r1.287 subr_disk.c
--- sys/kern/subr_disk.c	9 Aug 2026 19:22:49 -0000	1.287
+++ sys/kern/subr_disk.c	2 Nov 2026 16:23:17 -0000
@@ -76,9 +76,9 @@
  * A global list of all disks attached to the system.  May grow or
  * shrink over time.
  */
-struct	disklist_head disklist;	/* TAILQ_HEAD */
-int	disk_count;		/* number of drives in global disklist */
-int	disk_change;		/* set if a disk has been attached/detached
+struct	disklist_head disklist = TAILQ_HEAD_INITIALIZER(disklist);
+int	disk_count = 0;		/* number of drives in global disklist */
+int	disk_change = 0;	/* set if a disk has been attached/detached
 				 * since last we looked at this variable. This
 				 * is reset by hw_sysctl()
 				 */
@@ -1031,17 +1031,6 @@ diskerr(struct buf *bp, char *dname, cha
 		    (long long)(sn / DL_SECTOBLK(lp, lp->d_nsectors)),
 		    (long long)(sn % DL_SECTOBLK(lp, lp->d_nsectors)));
 	}
-}
-
-/*
- * Initialize the disklist.  Called by main() before autoconfiguration.
- */
-void
-disk_init(void)
-{
-
-	TAILQ_INIT(&disklist);
-	disk_count = disk_change = 0;
 }
 
 int
Index: sys/kern/subr_extent.c
===================================================================
RCS file: /OpenBSD/src/sys/kern/subr_extent.c,v
diff -u -p -r1.65 subr_extent.c
--- sys/kern/subr_extent.c	19 Jan 2024 22:12:24 -0000	1.65
+++ sys/kern/subr_extent.c	2 Nov 2026 16:23:17 -0000
@@ -100,7 +100,8 @@ extent_align(u_long start, u_long align,
  * Register the extent on a doubly linked list.
  * Should work, no?
  */
-static LIST_HEAD(listhead, extent) ext_list;
+static LIST_HEAD(listhead, extent) ext_list =
+    LIST_HEAD_INITIALIZER(ext_list);
 static	void extent_register(struct extent *);
 
 static void
@@ -108,15 +109,7 @@ extent_register(struct extent *ex)
 {
 #ifdef DIAGNOSTIC
 	struct extent *ep;
-#endif
-	static int initialized;
 
-	if (!initialized){
-		LIST_INIT(&ext_list);
-		initialized = 1;
-	}
-
-#ifdef DIAGNOSTIC
 	LIST_FOREACH(ep, &ext_list, ex_link) {
 		if (ep == ex)
 			panic("%s: already registered", __func__);
Index: sys/kern/sysv_msg.c
===================================================================
RCS file: /OpenBSD/src/sys/kern/sysv_msg.c,v
diff -u -p -r1.51 sysv_msg.c
--- sys/kern/sysv_msg.c	12 Jul 2026 22:06:01 -0000	1.51
+++ sys/kern/sysv_msg.c	2 Nov 2026 16:23:17 -0000
@@ -70,7 +70,7 @@ const struct msginfo msginfo = {
 	.msgseg = MSGSEG,
 };
 
-TAILQ_HEAD(, que) msg_queues;
+TAILQ_HEAD(, que) msg_queues = TAILQ_HEAD_INITIALIZER(msg_queues);
 
 int num_ques;
 int num_msgs;
@@ -82,8 +82,6 @@ msginit(void)
 {
 	pool_init(&sysvmsgpl, sizeof(struct msg), 0, IPL_NONE, PR_WAITOK,
 	    "sysvmsgpl", NULL);
-
-	TAILQ_INIT(&msg_queues);
 
 	num_ques = 0;
 	num_msgs = 0;
Index: sys/kern/sysv_sem.c
===================================================================
RCS file: /OpenBSD/src/sys/kern/sysv_sem.c,v
diff -u -p -r1.72 sysv_sem.c
--- sys/kern/sysv_sem.c	21 Sep 2026 04:26:47 -0000	1.72
+++ sys/kern/sysv_sem.c	2 Nov 2026 16:23:17 -0000
@@ -52,7 +52,8 @@ struct	rwlock sysvsem_lock = RWLOCK_INIT
 int	semtot = 0;
 int	semutot = 0;
 struct	semid_ds_kern **sema;	/* semaphore id list */
-SLIST_HEAD(, sem_undo) semu_list; /* list of undo structures */
+SLIST_HEAD(, sem_undo) semu_list = /* list of undo structures */
+    SLIST_HEAD_INITIALIZER(semu_list);
 struct	pool sema_pool;		/* pool for struct semid_ds_kern */
 struct	pool semu_pool;		/* pool for struct sem_undo (SEMUSZ) */
 unsigned short *semseqs;	/* array of sem sequence numbers */
@@ -73,7 +74,6 @@ seminit(void)
 	    M_SEM, M_WAITOK|M_ZERO);
 	semseqs = mallocarray(seminfo.semmni, sizeof(unsigned short),
 	    M_SEM, M_WAITOK|M_ZERO);
-	SLIST_INIT(&semu_list);
 }
 
 static inline void
Index: sys/kern/tty.c
===================================================================
RCS file: /OpenBSD/src/sys/kern/tty.c,v
diff -u -p -r1.186 tty.c
--- sys/kern/tty.c	19 Aug 2026 22:56:24 -0000	1.186
+++ sys/kern/tty.c	2 Nov 2026 16:23:17 -0000
@@ -166,8 +166,8 @@ u_char const char_type[] = {
 #define	tolower(c)	((c) - 'A' + 'a')
 #define	toupper(c)	((c) - 'a' + 'A')
 
-struct ttylist_head ttylist;	/* TAILQ_HEAD */
-int tty_count;
+struct ttylist_head ttylist = TAILQ_HEAD_INITIALIZER(ttylist);
+int tty_count = 0;
 struct rwlock ttylist_lock = RWLOCK_INITIALIZER("ttylist");
 
 int64_t tk_cancc, tk_nin, tk_nout, tk_rawcc;
@@ -2327,17 +2327,6 @@ ttysleep_nsec(struct tty *tp, void *chan
 	if ((error = tsleep_nsec(chan, pri, wmesg, nsecs)) != 0)
 		return (error);
 	return (tp->t_gen == gen ? 0 : ERESTART);
-}
-
-/*
- * Initialise the global tty list.
- */
-void
-tty_init(void)
-{
-
-	TAILQ_INIT(&ttylist);
-	tty_count = 0;
 }
 
 /*
Index: sys/kern/vfs_bio.c
===================================================================
RCS file: /OpenBSD/src/sys/kern/vfs_bio.c,v
diff -u -p -r1.220 vfs_bio.c
--- sys/kern/vfs_bio.c	9 Oct 2026 16:35:28 -0000	1.220
+++ sys/kern/vfs_bio.c	2 Nov 2026 16:23:17 -0000
@@ -93,7 +93,7 @@ struct proc *cleanerproc;
 int bd_req;			/* Sleep point for cleaner daemon. */
 
 struct bufcache cleancache;
-struct bufqueue dirtyqueue;
+struct bufqueue dirtyqueue = TAILQ_HEAD_INITIALIZER(dirtyqueue);
 
 void
 buf_put(struct buf *bp)
@@ -1288,7 +1288,6 @@ bufcache_init(void)
 	TAILQ_INIT(&cleancache.hotqueue);
 	TAILQ_INIT(&cleancache.coldqueue);
 	TAILQ_INIT(&cleancache.warmqueue);
-	TAILQ_INIT(&dirtyqueue);
 }
 
 /*
Index: sys/kern/vfs_biomem.c
===================================================================
RCS file: /OpenBSD/src/sys/kern/vfs_biomem.c,v
diff -u -p -r1.55 vfs_biomem.c
--- sys/kern/vfs_biomem.c	10 Jun 2026 00:04:38 -0000	1.55
+++ sys/kern/vfs_biomem.c	2 Nov 2026 16:23:17 -0000
@@ -29,7 +29,7 @@
 
 vaddr_t buf_kva_start, buf_kva_end;
 int buf_needva;
-TAILQ_HEAD(,buf) buf_valist;
+TAILQ_HEAD(,buf) buf_valist = TAILQ_HEAD_INITIALIZER(buf_valist);
 
 extern struct bcachestats bcstats;
 
@@ -38,8 +38,6 @@ vaddr_t buf_unmap(struct buf *);
 void
 buf_mem_init(vsize_t size)
 {
-	TAILQ_INIT(&buf_valist);
-
 	buf_kva_start = vm_map_min(kernel_map);
 	if (uvm_map(kernel_map, &buf_kva_start, size, NULL,
 	    UVM_UNKNOWN_OFFSET, PAGE_SIZE, UVM_MAPFLAG(PROT_NONE,
Index: sys/kern/vfs_cache.c
===================================================================
RCS file: /OpenBSD/src/sys/kern/vfs_cache.c,v
diff -u -p -r1.58 vfs_cache.c
--- sys/kern/vfs_cache.c	14 Aug 2022 01:58:28 -0000	1.58
+++ sys/kern/vfs_cache.c	2 Nov 2026 16:23:17 -0000
@@ -60,8 +60,10 @@
 long	numcache;	/* total number of cache entries allocated */
 long	numneg;		/* number of negative cache entries */
 
-TAILQ_HEAD(, namecache) nclruhead;	/* Regular Entry LRU chain */
-TAILQ_HEAD(, namecache) nclruneghead;	/* Negative Entry LRU chain */
+TAILQ_HEAD(, namecache) nclruhead =	/* Regular Entry LRU chain */
+    TAILQ_HEAD_INITIALIZER(nclruhead);
+TAILQ_HEAD(, namecache) nclruneghead =	/* Negative Entry LRU chain */
+    TAILQ_HEAD_INITIALIZER(nclruneghead);
 struct	nchstats nchstats;		/* cache effectiveness statistics */
 
 int doingcache = 1;			/* 1 => enable the cache */
@@ -417,8 +419,6 @@ done:
 void
 nchinit(void)
 {
-	TAILQ_INIT(&nclruhead);
-	TAILQ_INIT(&nclruneghead);
 	pool_init(&nch_pool, sizeof(struct namecache), 0, IPL_NONE, PR_WAITOK,
 	    "nchpl", NULL);
 }
Index: sys/kern/vfs_subr.c
===================================================================
RCS file: /OpenBSD/src/sys/kern/vfs_subr.c,v
diff -u -p -r1.335 vfs_subr.c
--- sys/kern/vfs_subr.c	30 Jun 2026 14:04:03 -0000	1.335
+++ sys/kern/vfs_subr.c	2 Nov 2026 16:23:17 -0000
@@ -100,10 +100,13 @@ int prtactive = 0;	/* 1 => print out rec
 }
 
 TAILQ_HEAD(freelst, vnode);
-struct freelst vnode_hold_list;	/* list of vnodes referencing buffers */
-struct freelst vnode_free_list;	/* vnode free list */
+struct freelst vnode_hold_list =	/* list of vnodes referencing buffers */
+    TAILQ_HEAD_INITIALIZER(vnode_hold_list);
+struct freelst vnode_free_list =	/* vnode free list */
+    TAILQ_HEAD_INITIALIZER(vnode_free_list);
 
-struct mntlist mountlist;	/* mounted filesystem list */
+struct mntlist mountlist =		/* mounted filesystem list */
+    TAILQ_HEAD_INITIALIZER(mountlist);
 
 void	vclean(struct vnode *, int, struct proc *);
 
@@ -152,9 +155,6 @@ vntblinit(void)
 	maxvnodes = 2 * initialvnodes;
 	pool_init(&vnode_pool, sizeof(struct vnode), 0, IPL_NONE,
 	    PR_WAITOK, "vnodes", NULL);
-	TAILQ_INIT(&vnode_hold_list);
-	TAILQ_INIT(&vnode_free_list);
-	TAILQ_INIT(&mountlist);
 	/*
 	 * Initialize the filesystem syncer.
 	 */
Index: sys/lib/libsa/softraid.c
===================================================================
RCS file: /OpenBSD/src/sys/lib/libsa/softraid.c,v
diff -u -p -r1.7 softraid.c
--- sys/lib/libsa/softraid.c	25 Apr 2024 18:31:49 -0000	1.7
+++ sys/lib/libsa/softraid.c	2 Nov 2026 16:23:17 -0000
@@ -36,10 +36,10 @@
 #define SR_CRYPTO_KEYBLOCK_BYTES SR_CRYPTO_MAXKEYS * SR_CRYPTO_KEYBYTES
 
 /* List of softraid volumes. */
-struct sr_boot_volume_head sr_volumes;
+struct sr_boot_volume_head sr_volumes = SLIST_HEAD_INITIALIZER(sr_volumes);
 
 /* List of softraid keydisks. */
-struct sr_boot_keydisk_head sr_keydisks;
+struct sr_boot_keydisk_head sr_keydisks = SLIST_HEAD_INITIALIZER(sr_keydisks);
 
 #ifdef DEBUG
 void
Index: sys/miscfs/fuse/fuse_device.c
===================================================================
RCS file: /OpenBSD/src/sys/miscfs/fuse/fuse_device.c,v
diff -u -p -r1.51 fuse_device.c
--- sys/miscfs/fuse/fuse_device.c	20 Jun 2026 13:45:13 -0000	1.51
+++ sys/miscfs/fuse/fuse_device.c	2 Nov 2026 16:23:17 -0000
@@ -57,7 +57,7 @@ int stat_fbufs_in = 0;
 int stat_fbufs_wait = 0;
 int stat_opened_fusedev = 0;
 
-LIST_HEAD(, fuse_d) fuse_d_list;
+LIST_HEAD(, fuse_d) fuse_d_list = LIST_HEAD_INITIALIZER(fuse_d_list);
 struct fuse_d *fuse_lookup(int);
 
 void	fuseattach(int);
@@ -191,7 +191,6 @@ fuse_device_set_fmp(struct fusefs_mnt *f
 void
 fuseattach(int num)
 {
-	LIST_INIT(&fuse_d_list);
 }
 
 int
Index: sys/net/bfd.c
===================================================================
RCS file: /OpenBSD/src/sys/net/bfd.c,v
diff -u -p -r1.81 bfd.c
--- sys/net/bfd.c	24 Jul 2025 00:49:22 -0000	1.81
+++ sys/net/bfd.c	2 Nov 2026 16:23:17 -0000
@@ -169,7 +169,8 @@ void	 bfd_set_uptime(struct bfd_config *
 
 void	 bfd_debug(struct bfd_config *);
 
-TAILQ_HEAD(bfd_queue, bfd_config)  bfd_queue;
+TAILQ_HEAD(bfd_queue, bfd_config)  bfd_queue =
+    TAILQ_HEAD_INITIALIZER(bfd_queue);
 
 /*
  * allocate a new bfd session
@@ -285,8 +286,6 @@ bfdinit(void)
 	bfdtq = taskq_create("bfd", 1, IPL_SOFTNET, 0);
 	if (bfdtq == NULL)
 		panic("unable to create BFD taskq");
-
-	TAILQ_INIT(&bfd_queue);
 }
 
 /*
Index: sys/net/if_pflow.c
===================================================================
RCS file: /OpenBSD/src/sys/net/if_pflow.c,v
diff -u -p -r1.112 if_pflow.c
--- sys/net/if_pflow.c	13 Nov 2025 17:12:30 -0000	1.112
+++ sys/net/if_pflow.c	2 Nov 2026 16:23:17 -0000
@@ -56,7 +56,8 @@
 #define DPRINTF(x)
 #endif
 
-SMR_SLIST_HEAD(, pflow_softc) pflowif_list;
+SMR_SLIST_HEAD(, pflow_softc) pflowif_list =
+    SMR_SLIST_HEAD_INITIALIZER(pflowif_list);
 
 enum pflowstat_counters {
 	pflow_flows,
@@ -127,7 +128,6 @@ struct if_clone	pflow_cloner =
 void
 pflowattach(int npflow)
 {
-	SMR_SLIST_INIT(&pflowif_list);
 	pflow_counters = counters_alloc(pflow_ncounters);
 	if_clone_attach(&pflow_cloner);
 }
Index: sys/net/if_ppp.c
===================================================================
RCS file: /OpenBSD/src/sys/net/if_ppp.c,v
diff -u -p -r1.124 if_ppp.c
--- sys/net/if_ppp.c	10 Sep 2026 18:31:39 -0000	1.124
+++ sys/net/if_ppp.c	2 Nov 2026 16:23:17 -0000
@@ -184,7 +184,7 @@ struct compressor *ppp_compressors[] = {
 };
 #endif /* PPP_COMPRESS */
 
-LIST_HEAD(, ppp_softc) ppp_softc_list;
+LIST_HEAD(, ppp_softc) ppp_softc_list = LIST_HEAD_INITIALIZER(ppp_softc_list);
 struct if_clone ppp_cloner =
     IF_CLONE_INITIALIZER("ppp", ppp_clone_create, ppp_clone_destroy);
 
@@ -194,7 +194,6 @@ struct if_clone ppp_cloner =
 void
 pppattach(int count)
 {
-	LIST_INIT(&ppp_softc_list);
 	if_clone_attach(&ppp_cloner);
 }
 
Index: sys/net/if_pppoe.c
===================================================================
RCS file: /OpenBSD/src/sys/net/if_pppoe.c,v
diff -u -p -r1.92 if_pppoe.c
--- sys/net/if_pppoe.c	16 Oct 2026 05:35:11 -0000	1.92
+++ sys/net/if_pppoe.c	2 Nov 2026 16:23:17 -0000
@@ -176,8 +176,10 @@ static struct pppoe_softc *pppoe_find_so
 static struct pppoe_softc *pppoe_find_softc_by_hunique(u_int8_t *, size_t, u_int);
 static struct mbuf	  *pppoe_get_mbuf(size_t len);
 
-LIST_HEAD(pppoe_softc_head, pppoe_softc) pppoe_softc_list;
-SMR_LIST_HEAD(pppoe_softc_sessions, pppoe_softc) pppoe_sessions; /* [K] */
+LIST_HEAD(pppoe_softc_head, pppoe_softc) pppoe_softc_list =
+    LIST_HEAD_INITIALIZER(pppoe_softc_list);
+SMR_LIST_HEAD(pppoe_softc_sessions, pppoe_softc) pppoe_sessions = /* [K] */
+    SMR_LIST_HEAD_INITIALIZER(pppoe_sessions);
 
 /* interface cloning */
 int pppoe_clone_create(struct if_clone *, int);
@@ -211,8 +213,6 @@ pppoeintr(void)
 void
 pppoeattach(int count)
 {
-	LIST_INIT(&pppoe_softc_list);
-	SMR_LIST_INIT(&pppoe_sessions);
 	if_clone_attach(&pppoe_cloner);
 }
 
Index: sys/net/if_trunk.c
===================================================================
RCS file: /OpenBSD/src/sys/net/if_trunk.c,v
diff -u -p -r1.161 if_trunk.c
--- sys/net/if_trunk.c	27 Jun 2026 06:29:15 -0000	1.161
+++ sys/net/if_trunk.c	2 Nov 2026 16:23:17 -0000
@@ -48,7 +48,8 @@
 #include <net/bpf.h>
 #endif
 
-SLIST_HEAD(__trhead, trunk_softc) trunk_list;	/* list of trunks */
+SLIST_HEAD(__trhead, trunk_softc) trunk_list =	/* list of trunks */
+    SLIST_HEAD_INITIALIZER(trunk_list);
 
 void	 trunkattach(int);
 int	 trunk_clone_create(struct if_clone *, int);
@@ -139,7 +140,6 @@ static const struct {
 void
 trunkattach(int count)
 {
-	SLIST_INIT(&trunk_list);
 	if_clone_attach(&trunk_cloner);
 }
 
Index: sys/net/pf.c
===================================================================
RCS file: /OpenBSD/src/sys/net/pf.c,v
diff -u -p -r1.1247 pf.c
--- sys/net/pf.c	29 Oct 2026 16:50:23 -0000	1.1247
+++ sys/net/pf.c	2 Nov 2026 16:23:17 -0000
@@ -579,7 +579,7 @@ pf_source_find(struct pf_sourcelim *srli
 	return (RBT_FIND(pf_source_tree, &srlim->pfsrlim_sources, key));
 }
 
-struct pf_src_tree tree_src_tracking;
+struct pf_src_tree tree_src_tracking = RB_INITIALIZER(tree_src_tracking);
 
 struct pf_state_tree_id tree_id;
 struct pf_state_list pf_state_list = PF_STATE_LIST_INITIALIZER(pf_state_list);
Index: sys/net/pf_ioctl.c
===================================================================
RCS file: /OpenBSD/src/sys/net/pf_ioctl.c,v
diff -u -p -r1.434 pf_ioctl.c
--- sys/net/pf_ioctl.c	10 Sep 2026 12:28:04 -0000	1.434
+++ sys/net/pf_ioctl.c	2 Nov 2026 16:23:17 -0000
@@ -247,8 +247,6 @@ pfattach(int num)
 		pf_pool_limits[PF_LIMIT_TABLE_ENTRIES].limit =
 		    PFR_KENTRY_HIWAT_SMALL;
 
-	RB_INIT(&tree_src_tracking);
-	RB_INIT(&pf_anchors);
 	pf_init_ruleset(&pf_main_ruleset);
 	TAILQ_INIT(&pf_queues[0]);
 	TAILQ_INIT(&pf_queues[1]);
Index: sys/net/pf_norm.c
===================================================================
RCS file: /OpenBSD/src/sys/net/pf_norm.c,v
diff -u -p -r1.240 pf_norm.c
--- sys/net/pf_norm.c	28 Oct 2026 12:08:29 -0000	1.240
+++ sys/net/pf_norm.c	2 Nov 2026 16:23:17 -0000
@@ -105,7 +105,8 @@ struct pf_fragment_tag {
 	u_int16_t	 ft_maxlen;	/* maximum fragment payload length */
 };
 
-TAILQ_HEAD(pf_fragqueue, pf_fragment)	pf_fragqueue;
+TAILQ_HEAD(pf_fragqueue, pf_fragment)	pf_fragqueue =
+    TAILQ_HEAD_INITIALIZER(pf_fragqueue);
 
 static __inline int	 pf_frnode_compare(struct pf_frnode *,
 			    struct pf_frnode *);
@@ -163,8 +164,6 @@ pf_normalize_init(void)
 
 	pool_sethiwat(&pf_frag_pl, PFFRAG_FRAG_HIWAT);
 	pool_sethardlimit(&pf_frent_pl, PFFRAG_FRENT_HIWAT);
-
-	TAILQ_INIT(&pf_fragqueue);
 
 	PF_FRAG_LOCK_INIT();
 }
Index: sys/net/pf_ruleset.c
===================================================================
RCS file: /OpenBSD/src/sys/net/pf_ruleset.c,v
diff -u -p -r1.22 pf_ruleset.c
--- sys/net/pf_ruleset.c	7 Jul 2025 02:28:50 -0000	1.22
+++ sys/net/pf_ruleset.c	2 Nov 2026 16:23:17 -0000
@@ -74,7 +74,7 @@ struct pool	pf_anchor_pl;
 #endif /* _KERNEL */
 
 
-struct pf_anchor_global	 pf_anchors;
+struct pf_anchor_global	 pf_anchors = RB_INITIALIZER(pf_anchors);
 struct pf_anchor	 pf_main_anchor;
 
 static __inline int pf_anchor_compare(struct pf_anchor *, struct pf_anchor *);
Index: sys/netinet/igmp.c
===================================================================
RCS file: /OpenBSD/src/sys/netinet/igmp.c,v
diff -u -p -r1.100 igmp.c
--- sys/netinet/igmp.c	30 Jul 2026 14:57:46 -0000	1.100
+++ sys/netinet/igmp.c	2 Nov 2026 16:23:17 -0000
@@ -114,7 +114,8 @@ struct router_info {
 
 int	igmp_timers_are_running;	/* [a] shortcut for fast timer */
 struct mutex igmp_mtx = MUTEX_INITIALIZER(IPL_SOFTNET);
-static LIST_HEAD(, router_info) rti_head;	/* [G] */
+static LIST_HEAD(, router_info) rti_head =	/* [G] */
+    LIST_HEAD_INITIALIZER(rti_head);
 static struct mbuf *router_alert;
 struct cpumem *igmpcounters;
 
@@ -132,7 +133,6 @@ igmp_init(void)
 	struct ipoption *ra;
 
 	igmp_timers_are_running = 0;
-	LIST_INIT(&rti_head);
 
 	igmpcounters = counters_alloc(igps_ncounters);
 	router_alert = m_get(M_WAIT, MT_DATA);
Index: sys/netinet/ip_input.c
===================================================================
RCS file: /OpenBSD/src/sys/netinet/ip_input.c,v
diff -u -p -r1.433 ip_input.c
--- sys/netinet/ip_input.c	11 Aug 2026 14:28:59 -0000	1.433
+++ sys/netinet/ip_input.c	2 Nov 2026 16:23:17 -0000
@@ -105,7 +105,8 @@ int	ip_directedbcast = 0;			/* [a] */
 struct mutex	ipq_mutex = MUTEX_INITIALIZER(IPL_SOFTNET);
 
 /* IP reassembly queue */
-LIST_HEAD(, ipq) ipq;				/* [Q] */
+LIST_HEAD(, ipq) ipq =				/* [Q] */
+    LIST_HEAD_INITIALIZER(ipq);
 
 /* Keep track of memory used for reassembly */
 int	ip_maxqueue = 300;			/* [a] */
@@ -212,7 +213,6 @@ ip_init(void)
 		    pr->pr_protocol && pr->pr_protocol != IPPROTO_RAW &&
 		    pr->pr_protocol < IPPROTO_MAX)
 			ip_protox[pr->pr_protocol] = pr - inetsw;
-	LIST_INIT(&ipq);
 
 	/* Fill in list of ports not to allocate dynamically. */
 	memset(&baddynamicports, 0, sizeof(baddynamicports));
Index: sys/netinet6/frag6.c
===================================================================
RCS file: /OpenBSD/src/sys/netinet6/frag6.c,v
diff -u -p -r1.97 frag6.c
--- sys/netinet6/frag6.c	11 Aug 2026 14:28:59 -0000	1.97
+++ sys/netinet6/frag6.c	2 Nov 2026 16:23:17 -0000
@@ -56,7 +56,8 @@ struct mutex frag6_mutex = MUTEX_INITIAL
 
 u_int frag6_nfragpackets;			/* [Q] */
 u_int frag6_nfrags;				/* [Q] */
-TAILQ_HEAD(ip6q_head, ip6q) frag6_queue;	/* [Q] ip6 reassemble queue */
+TAILQ_HEAD(ip6q_head, ip6q) frag6_queue =	/* [Q] ip6 reassemble queue */
+    TAILQ_HEAD_INITIALIZER(frag6_queue);
 
 void frag6_freef(struct ip6q *);
 void frag6_unlink(struct ip6q *, struct ip6q_head *);
@@ -74,8 +75,6 @@ frag6_init(void)
 	    0, IPL_SOFTNET, 0, "ip6af", NULL);
 	pool_init(&ip6q_pool, sizeof(struct ip6q),
 	    0, IPL_SOFTNET, 0, "ip6q", NULL);
-
-	TAILQ_INIT(&frag6_queue);
 }
 
 /*
Index: sys/nfs/nfs_bio.c
===================================================================
RCS file: /OpenBSD/src/sys/nfs/nfs_bio.c,v
diff -u -p -r1.87 nfs_bio.c
--- sys/nfs/nfs_bio.c	18 Sep 2024 05:21:19 -0000	1.87
+++ sys/nfs/nfs_bio.c	2 Nov 2026 16:23:17 -0000
@@ -53,7 +53,7 @@
 
 extern int nfs_numasync;
 extern struct nfsstats nfsstats;
-struct nfs_bufqhead nfs_bufq;
+struct nfs_bufqhead nfs_bufq = TAILQ_HEAD_INITIALIZER(nfs_bufq);
 uint32_t nfs_bufqmax, nfs_bufqlen;
 
 struct buf *nfs_getcacheblk(struct vnode *, daddr_t, int, struct proc *);
Index: sys/nfs/nfs_srvcache.c
===================================================================
RCS file: /OpenBSD/src/sys/nfs/nfs_srvcache.c,v
diff -u -p -r1.32 nfs_srvcache.c
--- sys/nfs/nfs_srvcache.c	18 Sep 2024 05:21:19 -0000	1.32
+++ sys/nfs/nfs_srvcache.c	2 Nov 2026 16:23:17 -0000
@@ -65,7 +65,8 @@ void			 nfsrv_cleanentry(struct nfsrvcac
 
 LIST_HEAD(nfsrvhash, nfsrvcache) *nfsrvhashtbl;
 SIPHASH_KEY nfsrvhashkey;
-TAILQ_HEAD(nfsrvlru, nfsrvcache) nfsrvlruhead;
+TAILQ_HEAD(nfsrvlru, nfsrvcache) nfsrvlruhead =
+    TAILQ_HEAD_INITIALIZER(nfsrvlruhead);
 u_long nfsrvhash;
 #define	NFSRCHASH(xid) \
     (&nfsrvhashtbl[SipHash24(&nfsrvhashkey, &(xid), sizeof(xid)) & nfsrvhash])
@@ -106,7 +107,6 @@ nfsrv_initcache(void)
 
 	nfsrvhashtbl = hashinit(desirednfsrvcache, M_NFSD, M_WAITOK, &nfsrvhash);
 	arc4random_buf(&nfsrvhashkey, sizeof(nfsrvhashkey));
-	TAILQ_INIT(&nfsrvlruhead);
 }
 
 /*
Index: sys/nfs/nfs_subs.c
===================================================================
RCS file: /OpenBSD/src/sys/nfs/nfs_subs.c,v
diff -u -p -r1.153 nfs_subs.c
--- sys/nfs/nfs_subs.c	1 Sep 2026 02:33:27 -0000	1.153
+++ sys/nfs/nfs_subs.c	2 Nov 2026 16:23:17 -0000
@@ -907,8 +907,6 @@ nfs_vfs_init(struct vfsconf *vfsp)
 {
 	extern struct pool nfs_node_pool;
 
-	TAILQ_INIT(&nfs_bufq);
-
 	pool_init(&nfs_node_pool, sizeof(struct nfsnode), 0, IPL_NONE,
 		  PR_WAITOK, "nfsnodepl", NULL);
 
Index: sys/sys/device.h
===================================================================
RCS file: /OpenBSD/src/sys/sys/device.h,v
diff -u -p -r1.73 device.h
--- sys/sys/device.h	14 Oct 2026 23:51:44 -0000	1.73
+++ sys/sys/device.h	2 Nov 2026 16:23:17 -0000
@@ -182,7 +182,6 @@ extern struct devicelist alldevs;	/* lis
 extern int autoconf_verbose;
 extern volatile int config_pending;	/* semaphore for mountroot */
 
-void config_init(void);
 void *config_search(cfmatch_t, struct device *, void *);
 struct device *config_found_sm(struct device *, void *, cfprint_t,
     cfmatch_t);
Index: sys/sys/disk.h
===================================================================
RCS file: /OpenBSD/src/sys/sys/disk.h,v
diff -u -p -r1.42 disk.h
--- sys/sys/disk.h	15 Sep 2025 10:33:03 -0000	1.42
+++ sys/sys/disk.h	2 Nov 2026 16:23:17 -0000
@@ -134,7 +134,6 @@ extern	struct disklist_head disklist;	/*
 extern	int disk_count;			/* number of disks in global disklist */
 extern	int disk_change;		/* disk attached/detached */
 
-void	disk_init(void);
 int	disk_construct(struct disk *);
 void	disk_attach(struct device *, struct disk *);
 void	disk_detach(struct disk *);
Index: sys/sys/tty.h
===================================================================
RCS file: /OpenBSD/src/sys/sys/tty.h,v
diff -u -p -r1.46 tty.h
--- sys/sys/tty.h	6 Aug 2026 20:38:02 -0000	1.46
+++ sys/sys/tty.h	2 Nov 2026 16:23:17 -0000
@@ -295,7 +295,6 @@ int	 ttywait(struct tty *tp);
 int	 ttywflush(struct tty *tp);
 void	 ttytstamp(struct tty *tp, int octs, int ncts, int odcd, int ndcd);
 
-void	tty_init(void);
 struct tty *ttymalloc(int);
 void	 ttyfree(struct tty *);
 
Index: sys/ufs/ufs/ufs_dirhash.c
===================================================================
RCS file: /OpenBSD/src/sys/ufs/ufs/ufs_dirhash.c,v
diff -u -p -r1.43 ufs_dirhash.c
--- sys/ufs/ufs/ufs_dirhash.c	9 Jan 2024 03:15:59 -0000	1.43
+++ sys/ufs/ufs/ufs_dirhash.c	2 Nov 2026 16:23:17 -0000
@@ -80,7 +80,7 @@ struct pool		ufsdirhash_pool;
 #define DIRHASH_ASSERT(e, m)	KASSERT((e))
 
 /* Dirhash list; recently-used entries are near the tail. */
-TAILQ_HEAD(, dirhash) ufsdirhash_list;
+TAILQ_HEAD(, dirhash) ufsdirhash_list = TAILQ_HEAD_INITIALIZER(ufsdirhash_list);
 
 /* Protects: ufsdirhash_list, `dh_list' field, ufs_dirhashmem. */
 struct rwlock		ufsdirhash_mtx;
@@ -1051,7 +1051,6 @@ ufsdirhash_init(void)
 	    PR_WAITOK, "dirhash", NULL);
 	rw_init(&ufsdirhash_mtx, "dirhash_list");
 	arc4random_buf(&ufsdirhash_key, sizeof(ufsdirhash_key));
-	TAILQ_INIT(&ufsdirhash_list);
 	ufs_dirhashmaxmem = 5 * 1024 * 1024;
 	ufs_mindirhashsize = 5 * DIRBLKSIZ;
 }
Index: sys/ufs/ufs/ufs_quota.c
===================================================================
RCS file: /OpenBSD/src/sys/ufs/ufs/ufs_quota.c,v
diff -u -p -r1.48 ufs_quota.c
--- sys/ufs/ufs/ufs_quota.c	20 Sep 2025 13:53:36 -0000	1.48
+++ sys/ufs/ufs/ufs_quota.c	2 Nov 2026 16:23:17 -0000
@@ -810,7 +810,7 @@ u_long dqhash;
  * Dquot free list.
  */
 #define	DQUOTINC	5	/* minimum free dquots desired */
-TAILQ_HEAD(dqfreelist, dquot) dqfreelist;
+TAILQ_HEAD(dqfreelist, dquot) dqfreelist = TAILQ_HEAD_INITIALIZER(dqfreelist);
 long numdquot, desireddquot = DQUOTINC;
 
 /*
@@ -821,7 +821,6 @@ ufs_quota_init(void)
 {
 	dqhashtbl = hashinit(initialvnodes, M_DQUOT, M_WAITOK, &dqhash);
 	arc4random_buf(&dqhashkey, sizeof(dqhashkey));
-	TAILQ_INIT(&dqfreelist);
 }
 
 /*
Index: sys/uvm/uvm_swap.c
===================================================================
RCS file: /OpenBSD/src/sys/uvm/uvm_swap.c,v
diff -u -p -r1.184 uvm_swap.c
--- sys/uvm/uvm_swap.c	4 Oct 2026 21:12:18 -0000	1.184
+++ sys/uvm/uvm_swap.c	2 Nov 2026 16:23:17 -0000
@@ -211,8 +211,8 @@ struct pool vndbuf_pool;
 struct extent *swapmap;		/* controls the mapping of /dev/drum */
 
 /* list of all active swap devices [by priority] */
-LIST_HEAD(swap_priority, swappri);
-struct swap_priority swap_priority;	/* [S] */
+LIST_HEAD(swap_priority, swappri) swap_priority =	/* [S] */
+    LIST_HEAD_INITIALIZER(swappri);
 
 /* locks */
 struct mutex uvm_swap_data_lock = MUTEX_INITIALIZER(IPL_MPFLOOR);
@@ -262,7 +262,6 @@ uvm_swap_init(void)
 	 * then get a handle on the vnode for /dev/drum by using
 	 * the its dev_t number ("swapdev", from MD conf.c).
 	 */
-	LIST_INIT(&swap_priority);
 	atomic_store_int(&uvmexp.nswapdev, 0);
 
 	if (!swapdev_vp && bdevvp(swapdev, &swapdev_vp))
Index: sys/uvm/uvm_vnode.c
===================================================================
RCS file: /OpenBSD/src/sys/uvm/uvm_vnode.c,v
diff -u -p -r1.152 uvm_vnode.c
--- sys/uvm/uvm_vnode.c	16 Oct 2026 04:56:21 -0000	1.152
+++ sys/uvm/uvm_vnode.c	2 Nov 2026 16:23:17 -0000
@@ -69,7 +69,8 @@
  * we keep a simpleq of vnodes that are currently being sync'd.
  */
 struct pool			uvm_vnode_pool;
-LIST_HEAD(, uvm_vnode)		uvn_wlist;	/* [K] writeable uvns */
+LIST_HEAD(, uvm_vnode)		uvn_wlist =	/* [K] writeable uvns */
+    LIST_HEAD_INITIALIZER(uvn_wlist);
 SIMPLEQ_HEAD(, uvm_vnode)	uvn_sync_q;	/* [S] sync'ing uvns */
 struct rwlock uvn_sync_lock;			/* locks sync operation */
 
@@ -116,7 +117,6 @@ uvn_init(void)
 {
 	pool_init(&uvm_vnode_pool, sizeof(struct uvm_vnode), 0, IPL_NONE,
 	    PR_WAITOK, "uvmvnodes", NULL);
-	LIST_INIT(&uvn_wlist);
 	/* note: uvn_sync_q init'd in uvm_vnp_sync() */
 	rw_init_flags(&uvn_sync_lock, "uvnsync", RWL_IS_VNODE);
 }