Module Name:    src
Committed By:   pgoyette
Date:           Thu Mar 31 19:30:18 UTC 2022

Modified Files:
        src/sys/dev: cgd.c fss.c midi.c sequencer.c spkr.c vnd.c
        src/sys/dev/audio: audio.c
        src/sys/dev/dm: device-mapper.c
        src/sys/dev/dtv: dtv_device.c
        src/sys/dev/flash: flash.c
        src/sys/dev/gpio: gpio.c gpiopps.c
        src/sys/dev/i2c: sht3x.c
        src/sys/dev/ic: scmd.c
        src/sys/dev/ir: cir.c
        src/sys/dev/iscsi: iscsi_main.c
        src/sys/dev/pad: pad.c
        src/sys/dev/pci: nvme_pci.c vio9p.c
        src/sys/dev/wscons: wsbell.c
        src/sys/modules/lua: lua.c
        src/sys/net: if_tap.c
        src/sys/opencrypto: cryptodev.c
        src/sys/rump/dev/lib/libmd: md_component.c
        src/sys/rump/dev/lib/libpci: pci_at_mainbus.c
        src/sys/rump/dev/lib/libscsipi: scsipi_component.c
        src/sys/rump/dev/lib/libucom: ucom_at_usb.c
        src/sys/rump/dev/lib/libulpt: ulpt_at_usb.c
        src/sys/rump/dev/lib/libvirtio_ld: ld_at_virtio.c
        src/sys/rump/dev/lib/libwscons: wscons_component.c

Log Message:
For device modules that provide both auto-config and /dev/xxx
interfaces, make sure that initialization and destruction
follow the proper sequence.  This is triggered by the recent
changes to the devsw stuff; per riastradh@ the required call
sequence is:

        devsw_attach()
        config_init_component() or config_cf*_attach()
        ...
        config_fini_component() or config_cf*_detach()
        devsw_detach()

While here, add a few missing calls to some of the detach
routines.

Testing of these changes has been limited to:
        1. compile without build break
        2. no related test failures from atf
        3. modload/modunload work as well as
           before.

No functional device testing done, since I don't have any
of these devices.  Let me know of any damage I might cause
here!

XXX Some of the modules affected by this commit are already
XXX broken;  see kern/56772.  This commit does not break
any additional modules (as far as I know).


To generate a diff of this commit:
cvs rdiff -u -r1.142 -r1.143 src/sys/dev/cgd.c
cvs rdiff -u -r1.111 -r1.112 src/sys/dev/fss.c
cvs rdiff -u -r1.95 -r1.96 src/sys/dev/midi.c
cvs rdiff -u -r1.75 -r1.76 src/sys/dev/sequencer.c
cvs rdiff -u -r1.22 -r1.23 src/sys/dev/spkr.c
cvs rdiff -u -r1.284 -r1.285 src/sys/dev/vnd.c
cvs rdiff -u -r1.121 -r1.122 src/sys/dev/audio/audio.c
cvs rdiff -u -r1.63 -r1.64 src/sys/dev/dm/device-mapper.c
cvs rdiff -u -r1.13 -r1.14 src/sys/dev/dtv/dtv_device.c
cvs rdiff -u -r1.17 -r1.18 src/sys/dev/flash/flash.c
cvs rdiff -u -r1.69 -r1.70 src/sys/dev/gpio/gpio.c
cvs rdiff -u -r1.3 -r1.4 src/sys/dev/gpio/gpiopps.c
cvs rdiff -u -r1.5 -r1.6 src/sys/dev/i2c/sht3x.c
cvs rdiff -u -r1.1 -r1.2 src/sys/dev/ic/scmd.c
cvs rdiff -u -r1.32 -r1.33 src/sys/dev/ir/cir.c
cvs rdiff -u -r1.38 -r1.39 src/sys/dev/iscsi/iscsi_main.c
cvs rdiff -u -r1.77 -r1.78 src/sys/dev/pad/pad.c
cvs rdiff -u -r1.31 -r1.32 src/sys/dev/pci/nvme_pci.c
cvs rdiff -u -r1.4 -r1.5 src/sys/dev/pci/vio9p.c
cvs rdiff -u -r1.13 -r1.14 src/sys/dev/wscons/wsbell.c
cvs rdiff -u -r1.27 -r1.28 src/sys/modules/lua/lua.c
cvs rdiff -u -r1.125 -r1.126 src/sys/net/if_tap.c
cvs rdiff -u -r1.106 -r1.107 src/sys/opencrypto/cryptodev.c
cvs rdiff -u -r1.2 -r1.3 src/sys/rump/dev/lib/libmd/md_component.c
cvs rdiff -u -r1.10 -r1.11 src/sys/rump/dev/lib/libpci/pci_at_mainbus.c
cvs rdiff -u -r1.5 -r1.6 src/sys/rump/dev/lib/libscsipi/scsipi_component.c
cvs rdiff -u -r1.11 -r1.12 src/sys/rump/dev/lib/libucom/ucom_at_usb.c
cvs rdiff -u -r1.9 -r1.10 src/sys/rump/dev/lib/libulpt/ulpt_at_usb.c
cvs rdiff -u -r1.4 -r1.5 src/sys/rump/dev/lib/libvirtio_ld/ld_at_virtio.c
cvs rdiff -u -r1.5 -r1.6 src/sys/rump/dev/lib/libwscons/wscons_component.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/cgd.c
diff -u src/sys/dev/cgd.c:1.142 src/sys/dev/cgd.c:1.143
--- src/sys/dev/cgd.c:1.142	Mon Dec 27 22:57:19 2021
+++ src/sys/dev/cgd.c	Thu Mar 31 19:30:15 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: cgd.c,v 1.142 2021/12/27 22:57:19 riastradh Exp $ */
+/* $NetBSD: cgd.c,v 1.143 2022/03/31 19:30:15 pgoyette Exp $ */
 
 /*-
  * Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cgd.c,v 1.142 2021/12/27 22:57:19 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cgd.c,v 1.143 2022/03/31 19:30:15 pgoyette Exp $");
 
 #include <sys/types.h>
 #include <sys/param.h>
@@ -1723,7 +1723,7 @@ cgd_selftest(void)
 	aprint_debug("cgd: self-tests passed\n");
 }
 
-MODULE(MODULE_CLASS_DRIVER, cgd, "blowfish,des,dk_subr,bufq_fcfs");
+MODULE(MODULE_CLASS_DRIVER, cgd, "adiantum,blowfish,des,dk_subr,bufq_fcfs");
 
 #ifdef _MODULE
 CFDRIVER_DECL(cgd, DV_DISK, NULL);
@@ -1742,31 +1742,34 @@ cgd_modcmd(modcmd_t cmd, void *arg)
 		mutex_init(&cgd_spawning_mtx, MUTEX_DEFAULT, IPL_NONE);
 		cv_init(&cgd_spawning_cv, "cgspwn");
 
-		error = config_cfdriver_attach(&cgd_cd);
-		if (error)
-			break;
-
-		error = config_cfattach_attach(cgd_cd.cd_name, &cgd_ca);
-	        if (error) {
-			config_cfdriver_detach(&cgd_cd);
-			aprint_error("%s: unable to register cfattach for"
-			    "%s, error %d\n", __func__, cgd_cd.cd_name, error);
-			break;
-		}
 		/*
 		 * Attach the {b,c}devsw's
 		 */
 		error = devsw_attach("cgd", &cgd_bdevsw, &cgd_bmajor,
 		    &cgd_cdevsw, &cgd_cmajor);
+		if (error) {
+			aprint_error("%s: unable to attach %s devsw, "
+			    "error %d", __func__, cgd_cd.cd_name, error);
+			break;
+		}
 
 		/*
-		 * If devsw_attach fails, remove from autoconf database
+		 * Attach to autoconf database
 		 */
+		error = config_cfdriver_attach(&cgd_cd);
 		if (error) {
-			config_cfattach_detach(cgd_cd.cd_name, &cgd_ca);
+			devsw_detach(&cgd_bdevsw, &cgd_cdevsw);
+			aprint_error("%s: unable to register cfdriver for"
+			    "%s, error %d\n", __func__, cgd_cd.cd_name, error);
+			break;
+		}
+
+		error = config_cfattach_attach(cgd_cd.cd_name, &cgd_ca);
+	        if (error) {
 			config_cfdriver_detach(&cgd_cd);
-			aprint_error("%s: unable to attach %s devsw, "
-			    "error %d", __func__, cgd_cd.cd_name, error);
+			devsw_detach(&cgd_bdevsw, &cgd_cdevsw);
+			aprint_error("%s: unable to register cfattach for"
+			    "%s, error %d\n", __func__, cgd_cd.cd_name, error);
 			break;
 		}
 #endif
@@ -1775,17 +1778,10 @@ cgd_modcmd(modcmd_t cmd, void *arg)
 	case MODULE_CMD_FINI:
 #ifdef _MODULE
 		/*
-		 * Remove {b,c}devsw's
-		 */
-		devsw_detach(&cgd_bdevsw, &cgd_cdevsw);
-
-		/*
-		 * Now remove device from autoconf database
+		 * Remove device from autoconf database
 		 */
 		error = config_cfattach_detach(cgd_cd.cd_name, &cgd_ca);
 		if (error) {
-			(void)devsw_attach("cgd", &cgd_bdevsw, &cgd_bmajor,
-			    &cgd_cdevsw, &cgd_cmajor);
 			aprint_error("%s: failed to detach %s cfattach, "
 			    "error %d\n", __func__, cgd_cd.cd_name, error);
  			break;
@@ -1793,13 +1789,16 @@ cgd_modcmd(modcmd_t cmd, void *arg)
 		error = config_cfdriver_detach(&cgd_cd);
 		if (error) {
 			(void)config_cfattach_attach(cgd_cd.cd_name, &cgd_ca);
-			(void)devsw_attach("cgd", &cgd_bdevsw, &cgd_bmajor,
-			    &cgd_cdevsw, &cgd_cmajor);
 			aprint_error("%s: failed to detach %s cfdriver, "
 			    "error %d\n", __func__, cgd_cd.cd_name, error);
 			break;
 		}
 
+		/*
+		 * Remove {b,c}devsw's
+		 */
+		devsw_detach(&cgd_bdevsw, &cgd_cdevsw);
+
 		cv_destroy(&cgd_spawning_cv);
 		mutex_destroy(&cgd_spawning_mtx);
 #endif

Index: src/sys/dev/fss.c
diff -u src/sys/dev/fss.c:1.111 src/sys/dev/fss.c:1.112
--- src/sys/dev/fss.c:1.111	Tue Jun 29 22:40:53 2021
+++ src/sys/dev/fss.c	Thu Mar 31 19:30:15 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: fss.c,v 1.111 2021/06/29 22:40:53 dholland Exp $	*/
+/*	$NetBSD: fss.c,v 1.112 2022/03/31 19:30:15 pgoyette Exp $	*/
 
 /*-
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -36,7 +36,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fss.c,v 1.111 2021/06/29 22:40:53 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fss.c,v 1.112 2022/03/31 19:30:15 pgoyette Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1387,44 +1387,42 @@ fss_modcmd(modcmd_t cmd, void *arg)
 	case MODULE_CMD_INIT:
 		mutex_init(&fss_device_lock, MUTEX_DEFAULT, IPL_NONE);
 		cv_init(&fss_device_cv, "snapwait");
-		error = config_cfdriver_attach(&fss_cd);
+
+		error = devsw_attach(fss_cd.cd_name,
+		    &fss_bdevsw, &fss_bmajor, &fss_cdevsw, &fss_cmajor);
 		if (error) {
 			mutex_destroy(&fss_device_lock);
 			break;
 		}
-		error = config_cfattach_attach(fss_cd.cd_name, &fss_ca);
+
+		error = config_cfdriver_attach(&fss_cd);
 		if (error) {
-			config_cfdriver_detach(&fss_cd);
+			devsw_detach(&fss_bdevsw, &fss_cdevsw);
 			mutex_destroy(&fss_device_lock);
 			break;
 		}
-		error = devsw_attach(fss_cd.cd_name,
-		    &fss_bdevsw, &fss_bmajor, &fss_cdevsw, &fss_cmajor);
 
+		error = config_cfattach_attach(fss_cd.cd_name, &fss_ca);
 		if (error) {
-			config_cfattach_detach(fss_cd.cd_name, &fss_ca);
 			config_cfdriver_detach(&fss_cd);
+			devsw_detach(&fss_bdevsw, &fss_cdevsw);
 			mutex_destroy(&fss_device_lock);
 			break;
 		}
+
 		break;
 
 	case MODULE_CMD_FINI:
-		devsw_detach(&fss_bdevsw, &fss_cdevsw);
 		error = config_cfattach_detach(fss_cd.cd_name, &fss_ca);
 		if (error) {
-			devsw_attach(fss_cd.cd_name, &fss_bdevsw, &fss_bmajor,
-			    &fss_cdevsw, &fss_cmajor);
 			break;
 		}
 		error = config_cfdriver_detach(&fss_cd);
 		if (error) {
-			devsw_attach(fss_cd.cd_name,
-			    &fss_bdevsw, &fss_bmajor, &fss_cdevsw, &fss_cmajor);
-			devsw_attach(fss_cd.cd_name, &fss_bdevsw, &fss_bmajor,
-			    &fss_cdevsw, &fss_cmajor);
+			config_cfattach_attach(fss_cd.cd_name, &fss_ca);
 			break;
 		}
+		devsw_detach(&fss_bdevsw, &fss_cdevsw);
 		cv_destroy(&fss_device_cv);
 		mutex_destroy(&fss_device_lock);
 		break;

Index: src/sys/dev/midi.c
diff -u src/sys/dev/midi.c:1.95 src/sys/dev/midi.c:1.96
--- src/sys/dev/midi.c:1.95	Sun Sep 26 01:16:08 2021
+++ src/sys/dev/midi.c	Thu Mar 31 19:30:15 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: midi.c,v 1.95 2021/09/26 01:16:08 thorpej Exp $	*/
+/*	$NetBSD: midi.c,v 1.96 2022/03/31 19:30:15 pgoyette Exp $	*/
 
 /*
  * Copyright (c) 1998, 2008 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: midi.c,v 1.95 2021/09/26 01:16:08 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: midi.c,v 1.96 2022/03/31 19:30:15 pgoyette Exp $");
 
 #ifdef _KERNEL_OPT
 #include "midi.h"
@@ -1929,12 +1929,10 @@ midi_modcmd(modcmd_t cmd, void *arg)
 		}
 		break;
 	case MODULE_CMD_FINI:
-		devsw_detach(NULL, &midi_cdevsw);
 		error = config_fini_component(cfdriver_ioconf_midi,
 		   cfattach_ioconf_midi, cfdata_ioconf_midi);
-		if (error)
-			devsw_attach(midi_cd.cd_name, NULL, &midi_bmajor,
-			    &midi_cdevsw, &midi_cmajor);
+		if (error == 0)
+			devsw_detach(NULL, &midi_cdevsw);
 		break;
 	default:
 		error = ENOTTY;

Index: src/sys/dev/sequencer.c
diff -u src/sys/dev/sequencer.c:1.75 src/sys/dev/sequencer.c:1.76
--- src/sys/dev/sequencer.c:1.75	Tue Mar 29 09:19:56 2022
+++ src/sys/dev/sequencer.c	Thu Mar 31 19:30:15 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: sequencer.c,v 1.75 2022/03/29 09:19:56 riastradh Exp $	*/
+/*	$NetBSD: sequencer.c,v 1.76 2022/03/31 19:30:15 pgoyette Exp $	*/
 
 /*
  * Copyright (c) 1998, 2008 The NetBSD Foundation, Inc.
@@ -55,7 +55,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sequencer.c,v 1.75 2022/03/29 09:19:56 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sequencer.c,v 1.76 2022/03/31 19:30:15 pgoyette Exp $");
 
 #ifdef _KERNEL_OPT
 #include "sequencer.h"
@@ -1715,13 +1715,10 @@ sequencer_modcmd(modcmd_t cmd, void *arg
 		}
 		break;
 	case MODULE_CMD_FINI:
-		devsw_detach(NULL, &sequencer_cdevsw);
 		error = config_fini_component(cfdriver_ioconf_sequencer,
 		   cfattach_ioconf_sequencer, cfdata_ioconf_sequencer);
-		if (error)
-			devsw_attach(sequencer_cd.cd_name,
-			    NULL, &sequencer_bmajor,
-			    &sequencer_cdevsw, &sequencer_cmajor);
+		if (error == 0)
+			devsw_detach(NULL, &sequencer_cdevsw);
 		break;
 	default:
 		error = ENOTTY;

Index: src/sys/dev/spkr.c
diff -u src/sys/dev/spkr.c:1.22 src/sys/dev/spkr.c:1.23
--- src/sys/dev/spkr.c:1.22	Sat Feb 12 03:24:36 2022
+++ src/sys/dev/spkr.c	Thu Mar 31 19:30:15 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: spkr.c,v 1.22 2022/02/12 03:24:36 riastradh Exp $	*/
+/*	$NetBSD: spkr.c,v 1.23 2022/03/31 19:30:15 pgoyette Exp $	*/
 
 /*
  * Copyright (c) 1990 Eric S. Raymond (e...@snark.thyrsus.com)
@@ -43,7 +43,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: spkr.c,v 1.22 2022/02/12 03:24:36 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: spkr.c,v 1.23 2022/03/31 19:30:15 pgoyette Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "wsmux.h"
@@ -633,12 +633,10 @@ spkr_modcmd(modcmd_t cmd, void *arg)
 
 	case MODULE_CMD_FINI:
 #ifdef _MODULE
-		devsw_detach(NULL, &spkr_cdevsw);
 		error = config_fini_component(cfdriver_ioconf_spkr,
 		    cfattach_ioconf_spkr, cfdata_ioconf_spkr);
-		if (error)
-			devsw_attach(spkr_cd.cd_name, NULL, &bmajor,
-			    &spkr_cdevsw, &cmajor);
+		if (error == 0)
+			devsw_detach(NULL, &spkr_cdevsw);
 #endif
 		break;
 

Index: src/sys/dev/vnd.c
diff -u src/sys/dev/vnd.c:1.284 src/sys/dev/vnd.c:1.285
--- src/sys/dev/vnd.c:1.284	Mon Mar 28 11:16:59 2022
+++ src/sys/dev/vnd.c	Thu Mar 31 19:30:15 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: vnd.c,v 1.284 2022/03/28 11:16:59 mlelstv Exp $	*/
+/*	$NetBSD: vnd.c,v 1.285 2022/03/31 19:30:15 pgoyette Exp $	*/
 
 /*-
  * Copyright (c) 1996, 1997, 1998, 2008, 2020 The NetBSD Foundation, Inc.
@@ -91,7 +91,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vnd.c,v 1.284 2022/03/28 11:16:59 mlelstv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vnd.c,v 1.285 2022/03/31 19:30:15 pgoyette Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_vnd.h"
@@ -2141,54 +2141,45 @@ vnd_modcmd(modcmd_t cmd, void *arg)
 	switch (cmd) {
 	case MODULE_CMD_INIT:
 #ifdef _MODULE
-		error = config_cfdriver_attach(&vnd_cd);
-		if (error)
-			break;
-
-		error = config_cfattach_attach(vnd_cd.cd_name, &vnd_ca);
-	        if (error) {
-			config_cfdriver_detach(&vnd_cd);
-#ifdef DIAGNOSTIC
-			aprint_error("%s: unable to register cfattach for \n"
-			    "%s, error %d", __func__, vnd_cd.cd_name, error);
-#endif
-			break;
-		}
-
                 /*
                  * Attach the {b,c}devsw's
                  */
 		error = devsw_attach("vnd", &vnd_bdevsw, &vnd_bmajor,
 		    &vnd_cdevsw, &vnd_cmajor);
-                /*
-                 * If devsw_attach fails, remove from autoconf database
-                 */
 		if (error) {
-			config_cfattach_detach(vnd_cd.cd_name, &vnd_ca);
-			config_cfdriver_detach(&vnd_cd);
 #ifdef DIAGNOSTIC
                         aprint_error("%s: unable to attach %s devsw, "
                             "error %d", __func__, vnd_cd.cd_name, error);
 #endif
 			break;
 		}
+
+		error = config_cfdriver_attach(&vnd_cd);
+		if (error) {
+			devsw_detach(&vnd_bdevsw, &vnd_cdevsw);
+			break;
+		}
+
+		error = config_cfattach_attach(vnd_cd.cd_name, &vnd_ca);
+	        if (error) {
+			config_cfdriver_detach(&vnd_cd);
+			devsw_detach(&vnd_bdevsw, &vnd_cdevsw);
+#ifdef DIAGNOSTIC
+			aprint_error("%s: unable to register cfattach for \n"
+			    "%s, error %d", __func__, vnd_cd.cd_name, error);
+#endif
+			break;
+		}
 #endif
 		break;
 
 	case MODULE_CMD_FINI:
 #ifdef _MODULE
                 /*
-                 * Remove {b,c}devsw's
-                 */
-		devsw_detach(&vnd_bdevsw, &vnd_cdevsw);
-
-                /*
-                 * Now remove device from autoconf database
+                 * Remove device from autoconf database
                  */
 		error = config_cfattach_detach(vnd_cd.cd_name, &vnd_ca);
                 if (error) { 
-                        (void)devsw_attach("vnd", &vnd_bdevsw, &vnd_bmajor,
-                            &vnd_cdevsw, &vnd_cmajor);
 #ifdef DIAGNOSTIC
                         aprint_error("%s: failed to detach %s cfattach, "
                             "error %d\n", __func__, vnd_cd.cd_name, error);
@@ -2198,14 +2189,17 @@ vnd_modcmd(modcmd_t cmd, void *arg)
                 error = config_cfdriver_detach(&vnd_cd);
                 if (error) {
                         (void)config_cfattach_attach(vnd_cd.cd_name, &vnd_ca); 
-                        (void)devsw_attach("vnd", &vnd_bdevsw, &vnd_bmajor,
-                            &vnd_cdevsw, &vnd_cmajor);
 #ifdef DIAGNOSTIC
                         aprint_error("%s: failed to detach %s cfdriver, "
                             "error %d\n", __func__, vnd_cd.cd_name, error);
                         break;
 #endif
                 }
+                /*
+                 * Remove {b,c}devsw's
+                 */
+		devsw_detach(&vnd_bdevsw, &vnd_cdevsw);
+
 #endif
 		break;
 

Index: src/sys/dev/audio/audio.c
diff -u src/sys/dev/audio/audio.c:1.121 src/sys/dev/audio/audio.c:1.122
--- src/sys/dev/audio/audio.c:1.121	Mon Mar 28 12:39:57 2022
+++ src/sys/dev/audio/audio.c	Thu Mar 31 19:30:15 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: audio.c,v 1.121 2022/03/28 12:39:57 riastradh Exp $	*/
+/*	$NetBSD: audio.c,v 1.122 2022/03/31 19:30:15 pgoyette Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -181,7 +181,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: audio.c,v 1.121 2022/03/28 12:39:57 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: audio.c,v 1.122 2022/03/31 19:30:15 pgoyette Exp $");
 
 #ifdef _KERNEL_OPT
 #include "audio.h"
@@ -9070,14 +9070,13 @@ audio_modcmd(modcmd_t cmd, void *arg)
 		break;
 	case MODULE_CMD_FINI:
 #ifdef _MODULE
-		devsw_detach(NULL, &audio_cdevsw);
 		error = config_fini_component(cfdriver_ioconf_audio,
 		   cfattach_ioconf_audio, cfdata_ioconf_audio);
-		if (error)
-			devsw_attach(audio_cd.cd_name, NULL, &audio_bmajor,
-			    &audio_cdevsw, &audio_cmajor);
+		if (error == 0)
+			devsw_detach(NULL, &audio_cdevsw);
 #endif
-		psref_class_destroy(audio_psref_class);
+		if (error == 0)
+			psref_class_destroy(audio_psref_class);
 		break;
 	default:
 		error = ENOTTY;

Index: src/sys/dev/dm/device-mapper.c
diff -u src/sys/dev/dm/device-mapper.c:1.63 src/sys/dev/dm/device-mapper.c:1.64
--- src/sys/dev/dm/device-mapper.c:1.63	Mon Mar 28 10:38:00 2022
+++ src/sys/dev/dm/device-mapper.c	Thu Mar 31 19:30:15 2022
@@ -1,4 +1,4 @@
-/*        $NetBSD: device-mapper.c,v 1.63 2022/03/28 10:38:00 mlelstv Exp $ */
+/*        $NetBSD: device-mapper.c,v 1.64 2022/03/31 19:30:15 pgoyette Exp $ */
 
 /*
  * Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -170,26 +170,28 @@ dm_modcmd(modcmd_t cmd, void *arg)
 
 	switch (cmd) {
 	case MODULE_CMD_INIT:
-		error = config_cfdriver_attach(&dm_cd);
+		error = devsw_attach(dm_cd.cd_name, &dm_bdevsw, &bmajor,
+		    &dm_cdevsw, &cmajor);
+		if (error == EEXIST)
+			error = 0;
 		if (error)
 			break;
 
-		error = config_cfattach_attach(dm_cd.cd_name, &dm_ca);
+		error = config_cfdriver_attach(&dm_cd);
 		if (error) {
-			aprint_error("%s: unable to register cfattach\n",
-			    dm_cd.cd_name);
+			devsw_detach(&dm_bdevsw, &dm_cdevsw);
 			return error;
 		}
 
-		error = devsw_attach(dm_cd.cd_name, &dm_bdevsw, &bmajor,
-		    &dm_cdevsw, &cmajor);
-		if (error == EEXIST)
-			error = 0;
+		error = config_cfattach_attach(dm_cd.cd_name, &dm_ca);
 		if (error) {
-			config_cfattach_detach(dm_cd.cd_name, &dm_ca);
 			config_cfdriver_detach(&dm_cd);
-			break;
+			devsw_detach(&dm_bdevsw, &dm_cdevsw);
+			aprint_error("%s: unable to register cfattach\n",
+			    dm_cd.cd_name);
+			return error;
 		}
+
 		dm_doinit();
 		break;
 	case MODULE_CMD_FINI:
@@ -208,6 +210,7 @@ dm_modcmd(modcmd_t cmd, void *arg)
 			break;
 
 		config_cfdriver_detach(&dm_cd);
+		config_cfattach_detach(dm_cd.cd_name, &dm_ca);
 
 		devsw_detach(&dm_bdevsw, &dm_cdevsw);
 		break;

Index: src/sys/dev/dtv/dtv_device.c
diff -u src/sys/dev/dtv/dtv_device.c:1.13 src/sys/dev/dtv/dtv_device.c:1.14
--- src/sys/dev/dtv/dtv_device.c:1.13	Sat Jul 24 07:48:38 2021
+++ src/sys/dev/dtv/dtv_device.c	Thu Mar 31 19:30:15 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: dtv_device.c,v 1.13 2021/07/24 07:48:38 skrll Exp $ */
+/* $NetBSD: dtv_device.c,v 1.14 2022/03/31 19:30:15 pgoyette Exp $ */
 
 /*-
  * Copyright (c) 2011 Jared D. McNeill <jmcne...@invisible.ca>
@@ -33,7 +33,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dtv_device.c,v 1.13 2021/07/24 07:48:38 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dtv_device.c,v 1.14 2022/03/31 19:30:15 pgoyette Exp $");
 
 #include <sys/param.h>
 #include <sys/types.h>
@@ -176,23 +176,26 @@ dtv_modcmd(modcmd_t cmd, void *arg)
 	switch (cmd) {
 	case MODULE_CMD_INIT:
 #ifdef _MODULE
-		error = config_init_component(cfdriver_ioconf_dtv,
-		    cfattach_ioconf_dtv, cfdata_ioconf_dtv);
+		error = devsw_attach("dtv", NULL, &bmaj, &dtv_cdevsw, &cmaj);
 		if (error)
 			return error;
-		error = devsw_attach("dtv", NULL, &bmaj, &dtv_cdevsw, &cmaj);
+
+		error = config_init_component(cfdriver_ioconf_dtv,
+		    cfattach_ioconf_dtv, cfdata_ioconf_dtv);
 		if (error)
-			config_fini_component(cfdriver_ioconf_dtv,
-			    cfattach_ioconf_dtv, cfdata_ioconf_dtv);
+			devsw_detach(NULL, &dtv_cdevsw);
 		return error;
 #else
 		return 0;
 #endif
 	case MODULE_CMD_FINI:
 #ifdef _MODULE
-		devsw_detach(NULL, &dtv_cdevsw);
-		return config_fini_component(cfdriver_ioconf_dtv,
+		error = config_fini_component(cfdriver_ioconf_dtv,
 		    cfattach_ioconf_dtv, cfdata_ioconf_dtv);
+		if (error == 0)
+			devsw_detach(NULL, &dtv_cdevsw);
+
+		return error;
 #else
 		return 0;
 #endif

Index: src/sys/dev/flash/flash.c
diff -u src/sys/dev/flash/flash.c:1.17 src/sys/dev/flash/flash.c:1.18
--- src/sys/dev/flash/flash.c:1.17	Sat Aug  7 16:19:10 2021
+++ src/sys/dev/flash/flash.c	Thu Mar 31 19:30:16 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: flash.c,v 1.17 2021/08/07 16:19:10 thorpej Exp $	*/
+/*	$NetBSD: flash.c,v 1.18 2022/03/31 19:30:16 pgoyette Exp $	*/
 
 /*-
  * Copyright (c) 2011 Department of Software Engineering,
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: flash.c,v 1.17 2021/08/07 16:19:10 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: flash.c,v 1.18 2022/03/31 19:30:16 pgoyette Exp $");
 
 #include <sys/param.h>
 #include <sys/types.h>
@@ -648,22 +648,21 @@ flash_modcmd(modcmd_t cmd, void *opaque)
 	switch (cmd) {
 	case MODULE_CMD_INIT:
 #ifdef _MODULE
-		error = config_init_component(cfdriver_ioconf_flash,
-		    cfattach_ioconf_flash, cfdata_ioconf_flash);
-		if (error)
-			return error;
 		error = devsw_attach("flash", &flash_bdevsw, &bmaj,
 		    &flash_cdevsw, &cmaj);
 		if (error)
-			config_fini_component(cfdriver_ioconf_flash,
-			    cfattach_ioconf_flash, cfdata_ioconf_flash);
+			return error;
+		error = config_init_component(cfdriver_ioconf_flash,
+		    cfattach_ioconf_flash, cfdata_ioconf_flash);
+		if (error)
+			devsw_detach(&flash_bdevsw, &flash_cdevsw);
 #endif
 		return error;
 	case MODULE_CMD_FINI:
 #ifdef _MODULE
-		devsw_detach(&flash_bdevsw, &flash_cdevsw);
 		error = config_fini_component(cfdriver_ioconf_flash,
 		    cfattach_ioconf_flash, cfdata_ioconf_flash);
+		devsw_detach(&flash_bdevsw, &flash_cdevsw);
 #endif
 		return error;
 	default:

Index: src/sys/dev/gpio/gpio.c
diff -u src/sys/dev/gpio/gpio.c:1.69 src/sys/dev/gpio/gpio.c:1.70
--- src/sys/dev/gpio/gpio.c:1.69	Mon Jan 17 19:33:00 2022
+++ src/sys/dev/gpio/gpio.c	Thu Mar 31 19:30:16 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: gpio.c,v 1.69 2022/01/17 19:33:00 thorpej Exp $ */
+/* $NetBSD: gpio.c,v 1.70 2022/03/31 19:30:16 pgoyette Exp $ */
 /*	$OpenBSD: gpio.c,v 1.6 2006/01/14 12:33:49 grange Exp $	*/
 
 /*
@@ -23,7 +23,7 @@
 #endif
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: gpio.c,v 1.69 2022/01/17 19:33:00 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: gpio.c,v 1.70 2022/03/31 19:30:16 pgoyette Exp $");
 
 /*
  * General Purpose Input/Output framework.
@@ -1184,20 +1184,20 @@ gpio_modcmd(modcmd_t cmd, void *opaque)
 	switch (cmd) {
 	case MODULE_CMD_INIT:
 #ifdef _MODULE
-		error = config_init_component(cfdriver_ioconf_gpio,
-		    cfattach_ioconf_gpio, cfdata_ioconf_gpio);
+		error = devsw_attach(gpio_cd.cd_name, NULL, &bmajor,
+		    &gpio_cdevsw, &cmajor);
 		if (error) {
-			aprint_error("%s: unable to init component\n",
+			aprint_error("%s: unable to register devsw\n",
 			    gpio_cd.cd_name);
 			return error;
 		}
-		error = devsw_attach(gpio_cd.cd_name, NULL, &bmajor,
-		    &gpio_cdevsw, &cmajor);
+		error = config_init_component(cfdriver_ioconf_gpio,
+		    cfattach_ioconf_gpio, cfdata_ioconf_gpio);
 		if (error) {
-			aprint_error("%s: unable to register devsw\n",
+			aprint_error("%s: unable to init component\n",
 			    gpio_cd.cd_name);
-			return config_fini_component(cfdriver_ioconf_gpio,
-			    cfattach_ioconf_gpio, cfdata_ioconf_gpio);
+			devsw_detach(NULL, &gpio_cdevsw);
+			return error;
 		}
 #endif
 		return 0;

Index: src/sys/dev/gpio/gpiopps.c
diff -u src/sys/dev/gpio/gpiopps.c:1.3 src/sys/dev/gpio/gpiopps.c:1.4
--- src/sys/dev/gpio/gpiopps.c:1.3	Tue Mar 29 22:10:42 2022
+++ src/sys/dev/gpio/gpiopps.c	Thu Mar 31 19:30:16 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: gpiopps.c,v 1.3 2022/03/29 22:10:42 pgoyette Exp $ */
+/* $NetBSD: gpiopps.c,v 1.4 2022/03/31 19:30:16 pgoyette Exp $ */
 
 /*
  * Copyright (c) 2016 Brad Spencer <b...@anduin.eldar.org>
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: gpiopps.c,v 1.3 2022/03/29 22:10:42 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: gpiopps.c,v 1.4 2022/03/31 19:30:16 pgoyette Exp $");
 
 /*
  * GPIO interface to the pps subsystem for ntp support.
@@ -509,29 +509,28 @@ gpiopps_modcmd(modcmd_t cmd, void *opaqu
 	switch (cmd) {
 	case MODULE_CMD_INIT:
 #ifdef _MODULE
+		error = devsw_attach("gpiopps", NULL, &bmaj,
+		    &gpiopps_cdevsw, &cmaj);
+		if (error) {
+			aprint_error("%s: unable to attach devsw\n",
+			    gpiopps_cd.cd_name);
+			return error;
+		}
 		error = config_init_component(cfdriver_ioconf_gpiopps,
 		    cfattach_ioconf_gpiopps, cfdata_ioconf_gpiopps);
 		if (error) {
 			aprint_error("%s: unable to init component\n",
 			    gpiopps_cd.cd_name);
+			devsw_detach(NULL, &gpiopps_cdevsw);
 			return (error);
 		}
-
-		error = devsw_attach("gpiopps", NULL, &bmaj,
-		    &gpiopps_cdevsw, &cmaj);
-		if (error) {
-			aprint_error("%s: unable to attach devsw\n",
-			    gpiopps_cd.cd_name);
-			config_fini_component(cfdriver_ioconf_gpiopps,
-			    cfattach_ioconf_gpiopps, cfdata_ioconf_gpiopps);
-		}
 #endif
 		return (error);
 	case MODULE_CMD_FINI:
 #ifdef _MODULE
-		devsw_detach(NULL, &gpiopps_cdevsw);
 		config_fini_component(cfdriver_ioconf_gpiopps,
 		    cfattach_ioconf_gpiopps, cfdata_ioconf_gpiopps);
+		devsw_detach(NULL, &gpiopps_cdevsw);
 #endif
 		return (0);
 	default:

Index: src/sys/dev/i2c/sht3x.c
diff -u src/sys/dev/i2c/sht3x.c:1.5 src/sys/dev/i2c/sht3x.c:1.6
--- src/sys/dev/i2c/sht3x.c:1.5	Wed Mar 30 00:06:50 2022
+++ src/sys/dev/i2c/sht3x.c	Thu Mar 31 19:30:16 2022
@@ -1,5 +1,5 @@
 
-/*	$NetBSD: sht3x.c,v 1.5 2022/03/30 00:06:50 pgoyette Exp $	*/
+/*	$NetBSD: sht3x.c,v 1.6 2022/03/31 19:30:16 pgoyette Exp $	*/
 
 /*
  * Copyright (c) 2021 Brad Spencer <b...@anduin.eldar.org>
@@ -18,7 +18,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sht3x.c,v 1.5 2022/03/30 00:06:50 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sht3x.c,v 1.6 2022/03/31 19:30:16 pgoyette Exp $");
 
 /*
   Driver for the Sensirion SHT30/SHT31/SHT35
@@ -2113,19 +2113,20 @@ sht3xtemp_modcmd(modcmd_t cmd, void *opa
 	switch (cmd) {
 	case MODULE_CMD_INIT:
 #ifdef _MODULE
-		error = config_init_component(cfdriver_ioconf_sht3xtemp,
-		    cfattach_ioconf_sht3xtemp, cfdata_ioconf_sht3xtemp);
-		if (error)
-			aprint_error("%s: unable to init component\n",
-			    sht3xtemp_cd.cd_name);
-
 		error = devsw_attach("sht3xtemp", NULL, &bmaj,
 		    &sht3x_cdevsw, &cmaj);
 		if (error) {
 			aprint_error("%s: unable to attach devsw\n",
 			    sht3xtemp_cd.cd_name);
-			config_fini_component(cfdriver_ioconf_sht3xtemp,
-			    cfattach_ioconf_sht3xtemp, cfdata_ioconf_sht3xtemp);
+			return error;
+		}
+
+		error = config_init_component(cfdriver_ioconf_sht3xtemp,
+		    cfattach_ioconf_sht3xtemp, cfdata_ioconf_sht3xtemp);
+		if (error) {
+			aprint_error("%s: unable to init component\n",
+			    sht3xtemp_cd.cd_name);
+			devsw_detach(NULL, &sht3x_cdevsw);
 		}
 		return error;
 #else
@@ -2133,9 +2134,10 @@ sht3xtemp_modcmd(modcmd_t cmd, void *opa
 #endif
 	case MODULE_CMD_FINI:
 #ifdef _MODULE
-		devsw_detach(NULL, &sht3x_cdevsw);
-		return config_fini_component(cfdriver_ioconf_sht3xtemp,
+		error = config_fini_component(cfdriver_ioconf_sht3xtemp,
 		      cfattach_ioconf_sht3xtemp, cfdata_ioconf_sht3xtemp);
+		devsw_detach(NULL, &sht3x_cdevsw);
+		return error;
 #else
 		return 0;
 #endif

Index: src/sys/dev/ic/scmd.c
diff -u src/sys/dev/ic/scmd.c:1.1 src/sys/dev/ic/scmd.c:1.2
--- src/sys/dev/ic/scmd.c:1.1	Tue Dec  7 17:39:54 2021
+++ src/sys/dev/ic/scmd.c	Thu Mar 31 19:30:16 2022
@@ -1,5 +1,5 @@
 
-/*	$NetBSD: scmd.c,v 1.1 2021/12/07 17:39:54 brad Exp $	*/
+/*	$NetBSD: scmd.c,v 1.2 2022/03/31 19:30:16 pgoyette Exp $	*/
 
 /*
  * Copyright (c) 2021 Brad Spencer <b...@anduin.eldar.org>
@@ -18,7 +18,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: scmd.c,v 1.1 2021/12/07 17:39:54 brad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: scmd.c,v 1.2 2022/03/31 19:30:16 pgoyette Exp $");
 
 /*
  * Common driver for the Sparkfun Serial motor controller.
@@ -592,30 +592,30 @@ scmd_modcmd(modcmd_t cmd, void *opaque)
 	switch (cmd) {
 	case MODULE_CMD_INIT:
 #ifdef _MODULE
-		error = config_init_component(cfdriver_ioconf_scmd,
-		    cfattach_ioconf_scmd, cfdata_ioconf_scmd);
-		if (error)
-			aprint_error("%s: unable to init component: %d\n",
-			    scmd_cd.cd_name, error);
-
 		error = devsw_attach("scmd", NULL, &bmaj,
 		    &scmd_cdevsw, &cmaj);
 		if (error) {
 			aprint_error("%s: unable to attach devsw: %d\n",
 			    scmd_cd.cd_name, error);
-			config_fini_component(cfdriver_ioconf_scmd,
-			    cfattach_ioconf_scmd, cfdata_ioconf_scmd);
+			return error;
 		}
 
+		error = config_init_component(cfdriver_ioconf_scmd,
+		    cfattach_ioconf_scmd, cfdata_ioconf_scmd);
+		if (error) {
+			aprint_error("%s: unable to init component: %d\n",
+			    scmd_cd.cd_name, error);
+			devsw_detach(NULL, &scmd_cdevsw);
+		}
 		return error;
 #else
 		return 0;
 #endif
 	case MODULE_CMD_FINI:
 #ifdef _MODULE
-		devsw_detach(NULL, &scmd_cdevsw);
 		error = config_fini_component(cfdriver_ioconf_scmd,
 		    cfattach_ioconf_scmd, cfdata_ioconf_scmd);
+		devsw_detach(NULL, &scmd_cdevsw);
 
 		return error;
 #else

Index: src/sys/dev/ir/cir.c
diff -u src/sys/dev/ir/cir.c:1.32 src/sys/dev/ir/cir.c:1.33
--- src/sys/dev/ir/cir.c:1.32	Thu Jul 14 10:19:06 2016
+++ src/sys/dev/ir/cir.c	Thu Mar 31 19:30:16 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: cir.c,v 1.32 2016/07/14 10:19:06 msaitoh Exp $	*/
+/*	$NetBSD: cir.c,v 1.33 2022/03/31 19:30:16 pgoyette Exp $	*/
 
 /*
  * Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cir.c,v 1.32 2016/07/14 10:19:06 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cir.c,v 1.33 2022/03/31 19:30:16 pgoyette Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -288,21 +288,20 @@ cir_modcmd(modcmd_t cmd, void *opaque)
 	switch (cmd) {
 	case MODULE_CMD_INIT:
 #ifdef _MODULE
-		error = config_init_component(cfdriver_ioconf_cir,
-		    cfattach_ioconf_cir, cfdata_ioconf_cir);
+		error = devsw_attach("cir", NULL, &bmaj, &cir_cdevsw, &cmaj);
 		if (error)
 			return error;
-		error = devsw_attach("cir", NULL, &bmaj, &cir_cdevsw, &cmaj);
+		error = config_init_component(cfdriver_ioconf_cir,
+		    cfattach_ioconf_cir, cfdata_ioconf_cir);
 		if (error)
-			config_fini_component(cfdriver_ioconf_cir,
-			    cfattach_ioconf_cir, cfdata_ioconf_cir);
+			devsw_detach(NULL, &cir_cdevsw);
 #endif
 		return error;
 	case MODULE_CMD_FINI:
 #ifdef _MODULE
-		devsw_detach(NULL, &cir_cdevsw);
 		return config_fini_component(cfdriver_ioconf_cir,
 		    cfattach_ioconf_cir, cfdata_ioconf_cir);
+		devsw_detach(NULL, &cir_cdevsw);
 #endif
 		return error;
 	default:

Index: src/sys/dev/iscsi/iscsi_main.c
diff -u src/sys/dev/iscsi/iscsi_main.c:1.38 src/sys/dev/iscsi/iscsi_main.c:1.39
--- src/sys/dev/iscsi/iscsi_main.c:1.38	Sun Feb 13 19:03:25 2022
+++ src/sys/dev/iscsi/iscsi_main.c	Thu Mar 31 19:30:16 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: iscsi_main.c,v 1.38 2022/02/13 19:03:25 riastradh Exp $	*/
+/*	$NetBSD: iscsi_main.c,v 1.39 2022/03/31 19:30:16 pgoyette Exp $	*/
 
 /*-
  * Copyright (c) 2004,2005,2006,2011 The NetBSD Foundation, Inc.
@@ -692,14 +692,23 @@ iscsi_modcmd(modcmd_t cmd, void *arg)
 	switch (cmd) {
 	case MODULE_CMD_INIT:
 #ifdef _MODULE
+		error = devsw_attach(iscsi_cd.cd_name, NULL, &bmajor,
+			&iscsi_cdevsw, &cmajor);
+		if (error) {
+			aprint_error("%s: unable to register devsw\n",
+				iscsi_cd.cd_name);
+			return error;
+		}
 		error = config_cfdriver_attach(&iscsi_cd);
 		if (error) {
+			devsw_detach(NULL, &iscsi_cdevsw);
 			return error;
 		}
 
 		error = config_cfattach_attach(iscsi_cd.cd_name, &iscsi_ca);
 		if (error) {
 			config_cfdriver_detach(&iscsi_cd);
+			devsw_detach(NULL, &iscsi_cdevsw);
 			aprint_error("%s: unable to register cfattach\n",
 				iscsi_cd.cd_name);
 			return error;
@@ -711,25 +720,18 @@ iscsi_modcmd(modcmd_t cmd, void *arg)
 				iscsi_cd.cd_name);
 			config_cfattach_detach(iscsi_cd.cd_name, &iscsi_ca);
 			config_cfdriver_detach(&iscsi_cd);
-			return error;
-		}
-
-		error = devsw_attach(iscsi_cd.cd_name, NULL, &bmajor,
-			&iscsi_cdevsw, &cmajor);
-		if (error) {
-			aprint_error("%s: unable to register devsw\n",
-				iscsi_cd.cd_name);
-			config_cfdata_detach(iscsi_cfdata);
-			config_cfattach_detach(iscsi_cd.cd_name, &iscsi_ca);
-			config_cfdriver_detach(&iscsi_cd);
+			devsw_detach(NULL, &iscsi_cdevsw);
 			return error;
 		}
 
 		if (config_attach_pseudo(iscsi_cfdata) == NULL) {
 			aprint_error("%s: config_attach_pseudo failed\n",
 				iscsi_cd.cd_name);
+
+			config_cfdata_detach(iscsi_cfdata);
 			config_cfattach_detach(iscsi_cd.cd_name, &iscsi_ca);
 			config_cfdriver_detach(&iscsi_cd);
+			devsw_detach(NULL, &iscsi_cdevsw);
 			return ENXIO;
 		}
 #endif
@@ -742,6 +744,7 @@ iscsi_modcmd(modcmd_t cmd, void *arg)
 		if (error)
 			return error;
 
+		config_cfdata_detach(iscsi_cfdata);
 		config_cfattach_detach(iscsi_cd.cd_name, &iscsi_ca);
 		config_cfdriver_detach(&iscsi_cd);
 		devsw_detach(NULL, &iscsi_cdevsw);

Index: src/sys/dev/pad/pad.c
diff -u src/sys/dev/pad/pad.c:1.77 src/sys/dev/pad/pad.c:1.78
--- src/sys/dev/pad/pad.c:1.77	Mon Mar 28 12:33:21 2022
+++ src/sys/dev/pad/pad.c	Thu Mar 31 19:30:16 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: pad.c,v 1.77 2022/03/28 12:33:21 riastradh Exp $ */
+/* $NetBSD: pad.c,v 1.78 2022/03/31 19:30:16 pgoyette Exp $ */
 
 /*-
  * Copyright (c) 2007 Jared D. McNeill <jmcne...@invisible.ca>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pad.c,v 1.77 2022/03/28 12:33:21 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pad.c,v 1.78 2022/03/31 19:30:16 pgoyette Exp $");
 
 #include <sys/param.h>
 #include <sys/types.h>
@@ -758,34 +758,27 @@ pad_modcmd(modcmd_t cmd, void *arg)
 	switch (cmd) {
 	case MODULE_CMD_INIT:
 #ifdef _MODULE
-		pad_cfattach[1] = cfattach_ioconf_pad[0];
-		error = config_init_component(cfdriver_ioconf_pad,
-		    pad_cfattach, cfdata_ioconf_pad);
+		error = devsw_attach(pad_cd.cd_name, NULL, &bmajor,
+			    &pad_cdevsw, &cmajor);
 		if (error)
 			break;
 
-		error = devsw_attach(pad_cd.cd_name, NULL, &bmajor,
-			    &pad_cdevsw, &cmajor);
+		pad_cfattach[1] = cfattach_ioconf_pad[0];
+		error = config_init_component(cfdriver_ioconf_pad,
+		    pad_cfattach, cfdata_ioconf_pad);
 		if (error) {
-			config_fini_component(cfdriver_ioconf_pad,
-			    pad_cfattach, cfdata_ioconf_pad);
+			devsw_detach(NULL, &pad_cdevsw);
 			break;
 		}
-
 #endif
 		break;
 
 	case MODULE_CMD_FINI:
 #ifdef _MODULE
-		devsw_detach(NULL, &pad_cdevsw);
-
 		error = config_fini_component(cfdriver_ioconf_pad,
 		    pad_cfattach, cfdata_ioconf_pad);
-		if (error) {
-			devsw_attach(pad_cd.cd_name, NULL, &bmajor,
-			    &pad_cdevsw, &cmajor);
-			break;
-		}
+		if (error == 0)
+			devsw_detach(NULL, &pad_cdevsw);
 #endif
 		break;
 

Index: src/sys/dev/pci/nvme_pci.c
diff -u src/sys/dev/pci/nvme_pci.c:1.31 src/sys/dev/pci/nvme_pci.c:1.32
--- src/sys/dev/pci/nvme_pci.c:1.31	Sun Oct 10 07:50:53 2021
+++ src/sys/dev/pci/nvme_pci.c	Thu Mar 31 19:30:16 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: nvme_pci.c,v 1.31 2021/10/10 07:50:53 skrll Exp $	*/
+/*	$NetBSD: nvme_pci.c,v 1.32 2022/03/31 19:30:16 pgoyette Exp $	*/
 /*	$OpenBSD: nvme_pci.c,v 1.3 2016/04/14 11:18:32 dlg Exp $ */
 
 /*
@@ -43,7 +43,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nvme_pci.c,v 1.31 2021/10/10 07:50:53 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nvme_pci.c,v 1.32 2022/03/31 19:30:16 pgoyette Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -501,12 +501,6 @@ nvme_modcmd(modcmd_t cmd, void *opaque)
 #ifdef _MODULE
 	switch (cmd) {
 	case MODULE_CMD_INIT:
-		error = config_init_component(cfdriver_ioconf_nvme_pci,
-		    cfattach_ioconf_nvme_pci, cfdata_ioconf_nvme_pci);
-		if (error)
-			break;
-
-		bmajor = cmajor = NODEVMAJOR;
 		error = devsw_attach(nvme_cd.cd_name, NULL, &bmajor,
 		    &nvme_cdevsw, &cmajor);
 		if (error) {
@@ -514,12 +508,18 @@ nvme_modcmd(modcmd_t cmd, void *opaque)
 			    nvme_cd.cd_name);
 			/* do not abort, just /dev/nvme* will not work */
 		}
+		error = config_init_component(cfdriver_ioconf_nvme_pci,
+		    cfattach_ioconf_nvme_pci, cfdata_ioconf_nvme_pci);
+		if (error) {
+			devsw_detach(NULL, &nvme_cdevsw);
+			break;
+		}
+		bmajor = cmajor = NODEVMAJOR;
 		break;
 	case MODULE_CMD_FINI:
-		devsw_detach(NULL, &nvme_cdevsw);
-
 		error = config_fini_component(cfdriver_ioconf_nvme_pci,
 		    cfattach_ioconf_nvme_pci, cfdata_ioconf_nvme_pci);
+		devsw_detach(NULL, &nvme_cdevsw);
 		break;
 	default:
 		break;

Index: src/sys/dev/pci/vio9p.c
diff -u src/sys/dev/pci/vio9p.c:1.4 src/sys/dev/pci/vio9p.c:1.5
--- src/sys/dev/pci/vio9p.c:1.4	Sun Sep 26 01:16:09 2021
+++ src/sys/dev/pci/vio9p.c	Thu Mar 31 19:30:16 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: vio9p.c,v 1.4 2021/09/26 01:16:09 thorpej Exp $	*/
+/*	$NetBSD: vio9p.c,v 1.5 2022/03/31 19:30:16 pgoyette Exp $	*/
 
 /*
  * Copyright (c) 2019 Internet Initiative Japan, Inc.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vio9p.c,v 1.4 2021/09/26 01:16:09 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vio9p.c,v 1.5 2022/03/31 19:30:16 pgoyette Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -625,14 +625,15 @@ vio9p_modcmd(modcmd_t cmd, void *opaque)
 #ifdef _MODULE
 	switch (cmd) {
 	case MODULE_CMD_INIT:
-		error = config_init_component(cfdriver_ioconf_vio9p,
-		    cfattach_ioconf_vio9p, cfdata_ioconf_vio9p);
 		devsw_attach(vio9p_cd.cd_name, NULL, &bmajor,
 		    &vio9p_cdevsw, &cmajor);
+		error = config_init_component(cfdriver_ioconf_vio9p,
+		    cfattach_ioconf_vio9p, cfdata_ioconf_vio9p);
 		break;
 	case MODULE_CMD_FINI:
 		error = config_fini_component(cfdriver_ioconf_vio9p,
 		    cfattach_ioconf_vio9p, cfdata_ioconf_vio9p);
+		devsw_detach(NULL, &vio9p_cdevsw);
 		break;
 	default:
 		error = ENOTTY;

Index: src/sys/dev/wscons/wsbell.c
diff -u src/sys/dev/wscons/wsbell.c:1.13 src/sys/dev/wscons/wsbell.c:1.14
--- src/sys/dev/wscons/wsbell.c:1.13	Sun Dec 27 16:09:33 2020
+++ src/sys/dev/wscons/wsbell.c	Thu Mar 31 19:30:17 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: wsbell.c,v 1.13 2020/12/27 16:09:33 tsutsui Exp $ */
+/* $NetBSD: wsbell.c,v 1.14 2022/03/31 19:30:17 pgoyette Exp $ */
 
 /*-
  * Copyright (c) 2017 Nathanial Sloss <nathanialsl...@yahoo.com.au>
@@ -107,7 +107,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: wsbell.c,v 1.13 2020/12/27 16:09:33 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: wsbell.c,v 1.14 2022/03/31 19:30:17 pgoyette Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "wsmux.h"
@@ -504,12 +504,10 @@ wsbell_modcmd(modcmd_t cmd, void *arg)
 
 	case MODULE_CMD_FINI:
 #ifdef _MODULE
-		devsw_detach(NULL, &wsbell_cdevsw);
 		error = config_fini_component(cfdriver_ioconf_wsbell,
 		    cfattach_ioconf_wsbell, cfdata_ioconf_wsbell);
-		if (error)
-			devsw_attach("wsbell", NULL, &wsbell_bmajor,
-			    &wsbell_cdevsw, &wsbell_cmajor);
+		if (error == 0)
+			devsw_detach(NULL, &wsbell_cdevsw);
 #endif
 		break;
 

Index: src/sys/modules/lua/lua.c
diff -u src/sys/modules/lua/lua.c:1.27 src/sys/modules/lua/lua.c:1.28
--- src/sys/modules/lua/lua.c:1.27	Sun Aug  8 22:26:32 2021
+++ src/sys/modules/lua/lua.c	Thu Mar 31 19:30:17 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: lua.c,v 1.27 2021/08/08 22:26:32 rin Exp $ */
+/*	$NetBSD: lua.c,v 1.28 2022/03/31 19:30:17 pgoyette Exp $ */
 
 /*
  * Copyright (c) 2011 - 2017 by Marc Balmer <mbal...@netbsd.org>.
@@ -860,14 +860,25 @@ lua_modcmd(modcmd_t cmd, void *opaque)
 	switch (cmd) {
 	case MODULE_CMD_INIT:
 #ifdef _MODULE
+		error = devsw_attach(lua_cd.cd_name, NULL, &bmajor,
+		    &lua_cdevsw, &cmajor);
+		if (error) {
+			aprint_error("%s: unable to register devsw\n",
+			    lua_cd.cd_name);
+			return error;
+		}
+
 		error = config_cfdriver_attach(&lua_cd);
-		if (error)
+		if (error) {
+			devsw_detach(NULL, &lua_cdevsw);
 			return error;
+		}
 
 		error = config_cfattach_attach(lua_cd.cd_name,
 		    &lua_ca);
 		if (error) {
 			config_cfdriver_detach(&lua_cd);
+			devsw_detach(NULL, &lua_cdevsw);
 			aprint_error("%s: unable to register cfattach\n",
 			    lua_cd.cd_name);
 			return error;
@@ -877,19 +888,11 @@ lua_modcmd(modcmd_t cmd, void *opaque)
 			config_cfattach_detach(lua_cd.cd_name,
 			    &lua_ca);
 			config_cfdriver_detach(&lua_cd);
+			devsw_detach(NULL, &lua_cdevsw);
 			aprint_error("%s: unable to register cfdata\n",
 			    lua_cd.cd_name);
 			return error;
 		}
-		error = devsw_attach(lua_cd.cd_name, NULL, &bmajor,
-		    &lua_cdevsw, &cmajor);
-		if (error) {
-			aprint_error("%s: unable to register devsw\n",
-			    lua_cd.cd_name);
-			config_cfattach_detach(lua_cd.cd_name, &lua_ca);
-			config_cfdriver_detach(&lua_cd);
-			return error;
-		}
 		config_attach_pseudo(lua_cfdata);
 #endif
 		return 0;

Index: src/sys/net/if_tap.c
diff -u src/sys/net/if_tap.c:1.125 src/sys/net/if_tap.c:1.126
--- src/sys/net/if_tap.c:1.125	Mon Mar 28 12:33:22 2022
+++ src/sys/net/if_tap.c	Thu Mar 31 19:30:17 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_tap.c,v 1.125 2022/03/28 12:33:22 riastradh Exp $	*/
+/*	$NetBSD: if_tap.c,v 1.126 2022/03/31 19:30:17 pgoyette Exp $	*/
 
 /*
  *  Copyright (c) 2003, 2004, 2008, 2009 The NetBSD Foundation.
@@ -33,7 +33,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_tap.c,v 1.125 2022/03/28 12:33:22 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_tap.c,v 1.126 2022/03/31 19:30:17 pgoyette Exp $");
 
 #if defined(_KERNEL_OPT)
 
@@ -233,7 +233,12 @@ tapattach(int n)
 static void
 tapinit(void)
 {
-	int error = config_cfattach_attach(tap_cd.cd_name, &tap_ca);
+	int error;
+
+#ifdef _MODULE
+	devsw_attach("tap", NULL, &tap_bmajor, &tap_cdevsw, &tap_cmajor);
+#endif
+	error = config_cfattach_attach(tap_cd.cd_name, &tap_ca);
 
 	if (error) {
 		aprint_error("%s: unable to register cfattach\n",
@@ -244,9 +249,6 @@ tapinit(void)
 
 	if_clone_attach(&tap_cloners);
 	sysctl_tap_setup(&tap_sysctl_clog);
-#ifdef _MODULE
-	devsw_attach("tap", NULL, &tap_bmajor, &tap_cdevsw, &tap_cmajor);
-#endif
 }
 
 static int
@@ -255,28 +257,20 @@ tapdetach(void)
 	int error = 0;
 
 	if_clone_detach(&tap_cloners);
-#ifdef _MODULE
-	devsw_detach(NULL, &tap_cdevsw);
-#endif
 
 	if (tap_count != 0) {
-		error = EBUSY;
-		goto out1;
+		if_clone_attach(&tap_cloners);
+		return EBUSY;
 	}
 
 	error = config_cfattach_detach(tap_cd.cd_name, &tap_ca);
-	if (error != 0)
-		goto out1;
-
-	sysctl_teardown(&tap_sysctl_clog);
-
-	return 0;
-
- out1:
+	if (error == 0) {
 #ifdef _MODULE
-	devsw_attach("tap", NULL, &tap_bmajor, &tap_cdevsw, &tap_cmajor);
+		devsw_detach(NULL, &tap_cdevsw);
 #endif
-	if_clone_attach(&tap_cloners);
+		sysctl_teardown(&tap_sysctl_clog);
+	} else
+		if_clone_attach(&tap_cloners);
 
 	return error;
 }

Index: src/sys/opencrypto/cryptodev.c
diff -u src/sys/opencrypto/cryptodev.c:1.106 src/sys/opencrypto/cryptodev.c:1.107
--- src/sys/opencrypto/cryptodev.c:1.106	Tue Jun 30 04:14:55 2020
+++ src/sys/opencrypto/cryptodev.c	Thu Mar 31 19:30:17 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: cryptodev.c,v 1.106 2020/06/30 04:14:55 riastradh Exp $ */
+/*	$NetBSD: cryptodev.c,v 1.107 2022/03/31 19:30:17 pgoyette Exp $ */
 /*	$FreeBSD: src/sys/opencrypto/cryptodev.c,v 1.4.2.4 2003/06/03 00:09:02 sam Exp $	*/
 /*	$OpenBSD: cryptodev.c,v 1.53 2002/07/10 22:21:30 mickey Exp $	*/
 
@@ -64,7 +64,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cryptodev.c,v 1.106 2020/06/30 04:14:55 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cryptodev.c,v 1.107 2022/03/31 19:30:17 pgoyette Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -2199,7 +2199,6 @@ crypto_modcmd(modcmd_t cmd, void *arg)
 {
 	int error = 0;
 #ifdef _MODULE
-	int error2;
 	devmajor_t cmajor = NODEVMAJOR, bmajor = NODEVMAJOR;
 #endif
 
@@ -2207,14 +2206,24 @@ crypto_modcmd(modcmd_t cmd, void *arg)
 	case MODULE_CMD_INIT:
 #ifdef _MODULE
 
+		error = devsw_attach(crypto_cd.cd_name, NULL, &bmajor,
+		    &crypto_cdevsw, &cmajor);
+		if (error) {
+			aprint_error("%s: unable to register devsw, error %d\n",
+				crypto_cd.cd_name, error);
+			return error;
+		}
+
 		error = config_cfdriver_attach(&crypto_cd);
 		if (error) {
+			devsw_detach(NULL, &crypto_cdevsw);
 			return error;
 		}
 
 		error = config_cfattach_attach(crypto_cd.cd_name, &crypto_ca);
 		if (error) {
 			config_cfdriver_detach(&crypto_cd);
+			devsw_detach(NULL, &crypto_cdevsw);
 			aprint_error("%s: unable to register cfattach\n",
 				crypto_cd.cd_name);
 
@@ -2225,27 +2234,13 @@ crypto_modcmd(modcmd_t cmd, void *arg)
 		if (error) {
 			config_cfattach_detach(crypto_cd.cd_name, &crypto_ca);
 			config_cfdriver_detach(&crypto_cd);
+			devsw_detach(NULL, &crypto_cdevsw);
 			aprint_error("%s: unable to register cfdata\n",
 				crypto_cd.cd_name);
 
 			return error;
 		}
 
-		error = devsw_attach(crypto_cd.cd_name, NULL, &bmajor,
-		    &crypto_cdevsw, &cmajor);
-		if (error) {
-			error2 = config_cfdata_detach(crypto_cfdata);
-			if (error2) {
-				return error2;
-			}
-			config_cfattach_detach(crypto_cd.cd_name, &crypto_ca);
-			config_cfdriver_detach(&crypto_cd);
-			aprint_error("%s: unable to register devsw, error %d\n",
-				crypto_cd.cd_name, error);
-
-			return error;
-		}
-
 		(void)config_attach_pseudo(crypto_cfdata);
 #endif
 

Index: src/sys/rump/dev/lib/libmd/md_component.c
diff -u src/sys/rump/dev/lib/libmd/md_component.c:1.2 src/sys/rump/dev/lib/libmd/md_component.c:1.3
--- src/sys/rump/dev/lib/libmd/md_component.c:1.2	Tue Jan 26 23:12:15 2016
+++ src/sys/rump/dev/lib/libmd/md_component.c	Thu Mar 31 19:30:17 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: md_component.c,v 1.2 2016/01/26 23:12:15 pooka Exp $	*/
+/*	$NetBSD: md_component.c,v 1.3 2022/03/31 19:30:17 pgoyette Exp $	*/
 
 /*
  * Copyright (c) 2010 Antti Kantee.  All Rights Reserved.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: md_component.c,v 1.2 2016/01/26 23:12:15 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: md_component.c,v 1.3 2022/03/31 19:30:17 pgoyette Exp $");
 
 #include <sys/param.h>
 #include <sys/conf.h>
@@ -49,14 +49,14 @@ RUMP_COMPONENT(RUMP_COMPONENT_DEV)
 	devmajor_t bmaj, cmaj;
 	int error;
 
-	config_init_component(cfdriver_ioconf_md,
-	    cfattach_ioconf_md, cfdata_ioconf_md);
-
 	bmaj = cmaj = NODEVMAJOR;
 	if ((error = devsw_attach("md", &md_bdevsw, &bmaj,
 	    &md_cdevsw, &cmaj)) != 0)
 		panic("md devsw attach failed: %d", error);
 
+	config_init_component(cfdriver_ioconf_md,
+	    cfattach_ioconf_md, cfdata_ioconf_md);
+
         if ((error = rump_vfs_makedevnodes(S_IFBLK, "/dev/md0", 'a',
             bmaj, 0, 7)) != 0)
                 panic("cannot create cooked md dev nodes: %d", error);

Index: src/sys/rump/dev/lib/libpci/pci_at_mainbus.c
diff -u src/sys/rump/dev/lib/libpci/pci_at_mainbus.c:1.10 src/sys/rump/dev/lib/libpci/pci_at_mainbus.c:1.11
--- src/sys/rump/dev/lib/libpci/pci_at_mainbus.c:1.10	Sat Aug  7 16:19:18 2021
+++ src/sys/rump/dev/lib/libpci/pci_at_mainbus.c	Thu Mar 31 19:30:17 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: pci_at_mainbus.c,v 1.10 2021/08/07 16:19:18 thorpej Exp $	*/
+/*	$NetBSD: pci_at_mainbus.c,v 1.11 2022/03/31 19:30:17 pgoyette Exp $	*/
 
 /*
  * Copyright (c) 2010 Antti Kantee.  All Rights Reserved.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pci_at_mainbus.c,v 1.10 2021/08/07 16:19:18 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pci_at_mainbus.c,v 1.11 2022/03/31 19:30:17 pgoyette Exp $");
 
 #include <sys/param.h>
 #include <sys/conf.h>
@@ -51,9 +51,6 @@ RUMP_COMPONENT(RUMP_COMPONENT_DEV)
 	devmajor_t cmaj, bmaj;
 	int error;
 
-	config_init_component(cfdriver_ioconf_pci,
-	    cfattach_ioconf_pci, cfdata_ioconf_pci);
-
 	bmaj = cmaj = -1;
 	if ((error = devsw_attach("pci", NULL, &bmaj,
 	    &pci_cdevsw, &cmaj)) != 0) {
@@ -61,6 +58,9 @@ RUMP_COMPONENT(RUMP_COMPONENT_DEV)
 		return;
 	}
 
+	config_init_component(cfdriver_ioconf_pci,
+	    cfattach_ioconf_pci, cfdata_ioconf_pci);
+
 	if ((error = rump_vfs_makedevnodes(S_IFCHR, "/dev/pci", '0',
 	    cmaj, 0, 4)) != 0)
 		printf("pci: failed to create /dev/pci nodes: %d\n", error);

Index: src/sys/rump/dev/lib/libscsipi/scsipi_component.c
diff -u src/sys/rump/dev/lib/libscsipi/scsipi_component.c:1.5 src/sys/rump/dev/lib/libscsipi/scsipi_component.c:1.6
--- src/sys/rump/dev/lib/libscsipi/scsipi_component.c:1.5	Sun Jan 27 09:19:36 2019
+++ src/sys/rump/dev/lib/libscsipi/scsipi_component.c	Thu Mar 31 19:30:17 2022
@@ -1,7 +1,7 @@
-/*	$NetBSD: scsipi_component.c,v 1.5 2019/01/27 09:19:36 rin Exp $	*/
+/*	$NetBSD: scsipi_component.c,v 1.6 2022/03/31 19:30:17 pgoyette Exp $	*/
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: scsipi_component.c,v 1.5 2019/01/27 09:19:36 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: scsipi_component.c,v 1.6 2022/03/31 19:30:17 pgoyette Exp $");
 
 #include <sys/param.h>
 #include <sys/conf.h>
@@ -20,12 +20,12 @@ RUMP_COMPONENT(RUMP_COMPONENT_DEV)
 	extern struct cdevsw sd_cdevsw, cd_cdevsw;
 	devmajor_t bmaj, cmaj;
 
-	config_init_component(cfdriver_ioconf_scsipi,
-	    cfattach_ioconf_scsipi, cfdata_ioconf_scsipi);
-
 	bmaj = cmaj = -1;
 	FLAWLESSCALL(devsw_attach("sd", &sd_bdevsw, &bmaj, &sd_cdevsw, &cmaj));
 
+	config_init_component(cfdriver_ioconf_scsipi,
+	    cfattach_ioconf_scsipi, cfdata_ioconf_scsipi);
+
 	FLAWLESSCALL(rump_vfs_makedevnodes(S_IFBLK, "/dev/sd0", 'a',
 	    bmaj, 0, 8));
 	FLAWLESSCALL(rump_vfs_makedevnodes(S_IFCHR, "/dev/rsd0", 'a',

Index: src/sys/rump/dev/lib/libucom/ucom_at_usb.c
diff -u src/sys/rump/dev/lib/libucom/ucom_at_usb.c:1.11 src/sys/rump/dev/lib/libucom/ucom_at_usb.c:1.12
--- src/sys/rump/dev/lib/libucom/ucom_at_usb.c:1.11	Sun Jan 27 09:19:37 2019
+++ src/sys/rump/dev/lib/libucom/ucom_at_usb.c	Thu Mar 31 19:30:17 2022
@@ -1,7 +1,7 @@
-/*	$NetBSD: ucom_at_usb.c,v 1.11 2019/01/27 09:19:37 rin Exp $	*/
+/*	$NetBSD: ucom_at_usb.c,v 1.12 2022/03/31 19:30:17 pgoyette Exp $	*/
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ucom_at_usb.c,v 1.11 2019/01/27 09:19:37 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ucom_at_usb.c,v 1.12 2022/03/31 19:30:17 pgoyette Exp $");
 
 #include <sys/param.h>
 #include <sys/types.h>
@@ -22,12 +22,12 @@ RUMP_COMPONENT(RUMP_COMPONENT_DEV)
 	extern struct cdevsw ucom_cdevsw;
 	devmajor_t cmaj, bmaj;
 
-	config_init_component(cfdriver_ioconf_ucom,
-	    cfattach_ioconf_ucom, cfdata_ioconf_ucom);
-
 	bmaj = cmaj = -1;
 	FLAWLESSCALL(devsw_attach("ucom", NULL, &bmaj, &ucom_cdevsw, &cmaj));
 
+	config_init_component(cfdriver_ioconf_ucom,
+	    cfattach_ioconf_ucom, cfdata_ioconf_ucom);
+
 	FLAWLESSCALL(rump_vfs_makedevnodes(S_IFCHR, "/dev/ttyU", '0',
 	    cmaj, 0, 2));
 	FLAWLESSCALL(rump_vfs_makedevnodes(S_IFCHR, "/dev/dtyU", '0',

Index: src/sys/rump/dev/lib/libulpt/ulpt_at_usb.c
diff -u src/sys/rump/dev/lib/libulpt/ulpt_at_usb.c:1.9 src/sys/rump/dev/lib/libulpt/ulpt_at_usb.c:1.10
--- src/sys/rump/dev/lib/libulpt/ulpt_at_usb.c:1.9	Sun Jan 27 09:19:37 2019
+++ src/sys/rump/dev/lib/libulpt/ulpt_at_usb.c	Thu Mar 31 19:30:18 2022
@@ -1,7 +1,7 @@
-/*	$NetBSD: ulpt_at_usb.c,v 1.9 2019/01/27 09:19:37 rin Exp $	*/
+/*	$NetBSD: ulpt_at_usb.c,v 1.10 2022/03/31 19:30:18 pgoyette Exp $	*/
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ulpt_at_usb.c,v 1.9 2019/01/27 09:19:37 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ulpt_at_usb.c,v 1.10 2022/03/31 19:30:18 pgoyette Exp $");
 
 #include <sys/param.h>
 #include <sys/conf.h>
@@ -19,12 +19,12 @@ RUMP_COMPONENT(RUMP_COMPONENT_DEV)
 	extern struct cdevsw ulpt_cdevsw;
 	devmajor_t bmaj, cmaj;
 
-	config_init_component(cfdriver_ioconf_ulpt,
-	    cfattach_ioconf_ulpt, cfdata_ioconf_ulpt);
-
 	bmaj = cmaj = -1;
 	FLAWLESSCALL(devsw_attach("ulpt", NULL, &bmaj, &ulpt_cdevsw, &cmaj));
 
+	config_init_component(cfdriver_ioconf_ulpt,
+	    cfattach_ioconf_ulpt, cfdata_ioconf_ulpt);
+
 	FLAWLESSCALL(rump_vfs_makedevnodes(S_IFCHR, "/dev/ulpt", '0',
 	    cmaj, 0, 1));
 }

Index: src/sys/rump/dev/lib/libvirtio_ld/ld_at_virtio.c
diff -u src/sys/rump/dev/lib/libvirtio_ld/ld_at_virtio.c:1.4 src/sys/rump/dev/lib/libvirtio_ld/ld_at_virtio.c:1.5
--- src/sys/rump/dev/lib/libvirtio_ld/ld_at_virtio.c:1.4	Wed May 10 06:22:15 2017
+++ src/sys/rump/dev/lib/libvirtio_ld/ld_at_virtio.c	Thu Mar 31 19:30:18 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: ld_at_virtio.c,v 1.4 2017/05/10 06:22:15 sevan Exp $	*/
+/*	$NetBSD: ld_at_virtio.c,v 1.5 2022/03/31 19:30:18 pgoyette Exp $	*/
 
 /*
  * Copyright (c) 2010 Antti Kantee.  All Rights Reserved.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ld_at_virtio.c,v 1.4 2017/05/10 06:22:15 sevan Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ld_at_virtio.c,v 1.5 2022/03/31 19:30:18 pgoyette Exp $");
 
 #include <sys/param.h>
 #include <sys/conf.h>
@@ -42,7 +42,15 @@ __KERNEL_RCSID(0, "$NetBSD: ld_at_virtio
 
 RUMP_COMPONENT(RUMP_COMPONENT_DEV)
 {
+	extern const struct bdevsw ld_bdevsw;
+	extern const struct cdevsw ld_cdevsw;
+	devmajor_t bmaj = -1, cmaj = -1;
+	int error;
 
+	if ((error = devsw_attach("ld", &ld_bdevsw, &bmaj,
+	    &ld_cdevsw, &cmaj)) != 0)
+		panic("cannot attach ld: %d", error);
+        
 	config_init_component(cfdriver_ioconf_ld_virtio,
 	    cfattach_ioconf_ld_virtio, cfdata_ioconf_ld_virtio);
 }
@@ -55,15 +63,8 @@ RUMP_COMPONENT(RUMP_COMPONENT_DEV)
  */
 RUMP_COMPONENT(RUMP_COMPONENT_POSTINIT)
 {
-	extern const struct bdevsw ld_bdevsw;
-	extern const struct cdevsw ld_cdevsw;
-	devmajor_t bmaj = -1, cmaj = -1;
 	int error, i;
 
-	if ((error = devsw_attach("ld", &ld_bdevsw, &bmaj,
-	    &ld_cdevsw, &cmaj)) != 0)
-		panic("cannot attach ld: %d", error);
-        
 	for (i = 0; i < 10; i++) {
 		char bbase[] = "/dev/ldX";
 		char rbase[] = "/dev/rldX";

Index: src/sys/rump/dev/lib/libwscons/wscons_component.c
diff -u src/sys/rump/dev/lib/libwscons/wscons_component.c:1.5 src/sys/rump/dev/lib/libwscons/wscons_component.c:1.6
--- src/sys/rump/dev/lib/libwscons/wscons_component.c:1.5	Sun Jan 27 09:19:37 2019
+++ src/sys/rump/dev/lib/libwscons/wscons_component.c	Thu Mar 31 19:30:18 2022
@@ -1,7 +1,7 @@
-/*	$NetBSD: wscons_component.c,v 1.5 2019/01/27 09:19:37 rin Exp $	*/
+/*	$NetBSD: wscons_component.c,v 1.6 2022/03/31 19:30:18 pgoyette Exp $	*/
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: wscons_component.c,v 1.5 2019/01/27 09:19:37 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: wscons_component.c,v 1.6 2022/03/31 19:30:18 pgoyette Exp $");
 
 #include <sys/param.h>
 #include <sys/conf.h>
@@ -19,15 +19,17 @@ RUMP_COMPONENT(RUMP_COMPONENT_DEV)
 	extern struct cdevsw wskbd_cdevsw, wsmouse_cdevsw;
 	devmajor_t bmaj, cmaj;
 
-	config_init_component(cfdriver_ioconf_wscons,
-	    cfattach_ioconf_wscons, cfdata_ioconf_wscons);
-
 	bmaj = cmaj = -1;
 	FLAWLESSCALL(devsw_attach("wskbd", NULL, &bmaj, &wskbd_cdevsw, &cmaj));
-	FLAWLESSCALL(rump_vfs_makeonedevnode(S_IFCHR, "/dev/wskbd", cmaj, 0));
 
 	bmaj = cmaj = -1;
 	FLAWLESSCALL(devsw_attach("wsmouse", NULL, &bmaj,
 	    &wsmouse_cdevsw, &cmaj));
+
+	config_init_component(cfdriver_ioconf_wscons,
+	    cfattach_ioconf_wscons, cfdata_ioconf_wscons);
+
+	FLAWLESSCALL(rump_vfs_makeonedevnode(S_IFCHR, "/dev/wskbd", cmaj, 0));
+
 	FLAWLESSCALL(rump_vfs_makeonedevnode(S_IFCHR, "/dev/wsmouse", cmaj, 0));
 }

Reply via email to