Module Name:    src
Committed By:   pgoyette
Date:           Wed Jul 20 04:33:53 UTC 2016

Modified Files:
        src/sys/dev [pgoyette-localcount]: cgd.c

Log Message:
Rather than manually manipulating individual autoconf data, just use
config_{init,fini}_component() to do it all at once.


To generate a diff of this commit:
cvs rdiff -u -r1.108.2.2 -r1.108.2.3 src/sys/dev/cgd.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.108.2.2 src/sys/dev/cgd.c:1.108.2.3
--- src/sys/dev/cgd.c:1.108.2.2	Tue Jul 19 06:26:58 2016
+++ src/sys/dev/cgd.c	Wed Jul 20 04:33:53 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: cgd.c,v 1.108.2.2 2016/07/19 06:26:58 pgoyette Exp $ */
+/* $NetBSD: cgd.c,v 1.108.2.3 2016/07/20 04:33:53 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.108.2.2 2016/07/19 06:26:58 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cgd.c,v 1.108.2.3 2016/07/20 04:33:53 pgoyette Exp $");
 
 #include <sys/types.h>
 #include <sys/param.h>
@@ -1045,35 +1045,54 @@ cgd_modcmd(modcmd_t cmd, void *arg)
 	switch (cmd) {
 	case MODULE_CMD_INIT:
 #ifdef _MODULE
-		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\n",
+		/*
+		 * Insert the driver into the autoconf database
+		 */
+		error = config_init_component(cfdriver_ioconf_cgd,
+                    cfattach_ioconf_cgd, cfdata_ioconf_cgd);
+		if (error) {
+			aprint_error("%s: unable to init component",
 			    cgd_cd.cd_name);
 			break;
 		}
 
+		/*
+		 * Attach the {b,c}devsw's
+		 */
 		error = devsw_attach("cgd", &cgd_bdevsw, &bmajor,
 		    &cgd_cdevsw, &cmajor);
+
+		/*
+		 * If devsw_attach fails, remove from autoconf database
+		 */
 		if (error) {
-			config_cfattach_detach(cgd_cd.cd_name, &cgd_ca);
-			config_cfdriver_detach(&cgd_cd);
-			break;
+			config_fini_component(cfdriver_ioconf_cgd,
+			    cfattach_ioconf_cgd, cfdata_ioconf_cgd);
+			aprint_error("%s: unable to attach devsw",
+				    cgd_cd.cd_name);
 		}
 #endif
 		break;
 
 	case MODULE_CMD_FINI:
 #ifdef _MODULE
-		error = config_cfattach_detach(cgd_cd.cd_name, &cgd_ca);
-		if (error)
-			break;
-		config_cfdriver_detach(&cgd_cd);
+		/*
+		 * Remove {b,c}devsw's
+		 */
 		devsw_detach(&cgd_bdevsw, &cgd_cdevsw);
+
+		/*
+		 * Now remove device from autoconf database
+		 */
+		error = config_fini_component(cfdriver_ioconf_cgd,
+		    cfattach_ioconf_cgd, cfdata_ioconf_cgd);
+
+		/*
+		 * If removal fails, re-attach our {b,c}devsw's
+		 */
+		if (error)
+			devsw_attach("cgd", &cgd_bdevsw, &bmajor,
+			    &cgd_cdevsw, &cmajor);
 #endif
 		break;
 

Reply via email to