Module Name:    src
Committed By:   christos
Date:           Sun Mar  3 16:55:26 UTC 2013

Modified Files:
        src/sys/kern: kern_module.c

Log Message:
more debugging


To generate a diff of this commit:
cvs rdiff -u -r1.87 -r1.88 src/sys/kern/kern_module.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/kern/kern_module.c
diff -u src/sys/kern/kern_module.c:1.87 src/sys/kern/kern_module.c:1.88
--- src/sys/kern/kern_module.c:1.87	Tue Feb 12 14:14:50 2013
+++ src/sys/kern/kern_module.c	Sun Mar  3 11:55:26 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_module.c,v 1.87 2013/02/12 19:14:50 christos Exp $	*/
+/*	$NetBSD: kern_module.c,v 1.88 2013/03/03 16:55:26 christos Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_module.c,v 1.87 2013/02/12 19:14:50 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_module.c,v 1.88 2013/03/03 16:55:26 christos Exp $");
 
 #define _MODULE_INTERNAL
 
@@ -99,6 +99,15 @@ static void	module_enqueue(module_t *);
 static bool	module_merge_dicts(prop_dictionary_t, const prop_dictionary_t);
 
 static void	sysctl_module_setup(void);
+#define MODULE_CLASS_MATCH(mi, class) \
+	((class) == MODULE_CLASS_ANY || (class) == (mi)->mi_class)
+
+static void
+module_incompat(const modinfo_t *mi, int class)
+{
+	module_error("incompatible module class for `%s' (%d != %d)",
+	    mi->mi_name, class, mi->mi_class);
+}
 
 /*
  * module_error:
@@ -451,8 +460,12 @@ module_init_class(modclass_t class)
 	do {
 		TAILQ_FOREACH(mod, &module_builtins, mod_chain) {
 			mi = mod->mod_info;
-			if (class != MODULE_CLASS_ANY && class != mi->mi_class)
+			if (!MODULE_CLASS_MATCH(mi, class)) {
+#ifdef DIAGNOSTIC
+				module_incompat(mi, class);
+#endif
 				continue;
+			}
 			/*
 			 * If initializing a builtin module fails, don't try
 			 * to load it again.  But keep it around and queue it
@@ -478,8 +491,12 @@ module_init_class(modclass_t class)
 	do {
 		TAILQ_FOREACH(mod, &module_bootlist, mod_chain) {
 			mi = mod->mod_info;
-			if (class != MODULE_CLASS_ANY && class != mi->mi_class)
+			if (!MODULE_CLASS_MATCH(mi, class)) {
+#ifdef DIAGNOSTIC
+				module_incompat(mi, class);
+#endif
 				continue;
+			}
 			module_do_load(mi->mi_name, false, 0, NULL, NULL,
 			    class, false);
 			break;
@@ -913,6 +930,8 @@ module_do_load(const char *name, bool is
 		error = module_load_vfs_vec(name, flags, autoload, mod,
 					    &filedict);
 		if (error != 0) {
+			module_error("vfs load failed %d for `%s'", error,
+			    name);
 			kmem_free(mod, sizeof(*mod));
 			depth--;
 			return error;
@@ -951,9 +970,8 @@ module_do_load(const char *name, bool is
 	 * If a specific kind of module was requested, ensure that we have
 	 * a match.
 	 */
-	if (class != MODULE_CLASS_ANY && class != mi->mi_class) {
-		module_print("incompatible module class for `%s' (%d != %d)",
-		    name, class, mi->mi_class);
+	if (!MODULE_CLASS_MATCH(mi, class)) {
+		module_incompat(mi, class);
 		error = ENOENT;
 		goto fail;
 	}
@@ -1031,8 +1049,11 @@ module_do_load(const char *name, bool is
 			}
 			error = module_do_load(buf, true, flags, NULL,
 			    &mod2, MODULE_CLASS_ANY, true);
-			if (error != 0)
+			if (error != 0) {
+				module_error("recursive load failed for `%s'",
+				    mi->mi_name);
 				goto fail;
+			}
 			mod->mod_required[mod->mod_nrequired++] = mod2;
 		}
 	}

Reply via email to