Index: sys/kern/kern_module.c =================================================================== --- sys/kern/kern_module.c +++ sys/kern/kern_module.c @@ -116,9 +116,16 @@ mtx_lock(&Giant); MOD_SLOCK; mod = module_lookupbyname(data->name); - if (mod == NULL) - panic("module_register_init: module named %s not found\n", + if (mod == NULL) { + /* + * This will happen if module_register() failed. + */ + printf("module_register_init: module %s not found\n", data->name); + MOD_SUNLOCK; + mtx_unlock(&Giant); + return; + } MOD_SUNLOCK; error = MOD_EVENT(mod, MOD_LOAD); if (error) { @@ -158,16 +165,12 @@ newmod = module_lookupbyname(data->name); if (newmod != NULL) { MOD_XUNLOCK; - printf("module_register: module %s already exists!\n", - data->name); + printf("%s: cannot register %s from %s; already loaded from %s\n", + __func__, data->name, container->filename, newmod->file->filename); return (EEXIST); } namelen = strlen(data->name) + 1; newmod = malloc(sizeof(struct module) + namelen, M_MODULE, M_WAITOK); - if (newmod == NULL) { - MOD_XUNLOCK; - return (ENOMEM); - } newmod->refs = 1; newmod->id = nextid++; newmod->name = (char *)(newmod + 1);