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