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)); }