Lines Matching refs:mod
207 module_name(struct module *mod)
210 return mod->mod_info->mi_name;
219 module_source(struct module *mod)
222 return mod->mod_source;
248 module_t *mod;
250 mod = kmem_zalloc(sizeof(*mod), KM_SLEEP);
251 mod->mod_source = source;
252 specificdata_init(module_specificdata_domain, &mod->mod_sdref);
253 return mod;
260 module_free(module_t *mod)
263 specificdata_fini(module_specificdata_domain, &mod->mod_sdref);
264 if (mod->mod_required)
265 kmem_free(mod->mod_required, mod->mod_arequired *
267 kmem_free(mod, sizeof(*mod));
274 module_require_force(struct module *mod)
276 SET(mod->mod_flags, MODFLG_MUST_FORCE);
380 struct module *mod;
398 TAILQ_FOREACH(mod, &module_builtins, mod_chain) {
399 if (strcmp(mod->mod_info->mi_name, mi->mi_name) == 0)
402 if (mod) {
403 TAILQ_REMOVE(&module_builtins, mod, mod_chain);
519 module_t *mod;
522 TAILQ_FOREACH(mod, &module_builtins, mod_chain) {
523 module_require_force(mod);
608 module_t *mod;
617 TAILQ_FOREACH(mod, &module_builtins, mod_chain) {
618 mi = mod->mod_info;
630 if (ISSET(mod->mod_flags, MODFLG_MUST_FORCE) ||
631 module_do_builtin(mod, mi->mi_name, NULL,
633 TAILQ_REMOVE(&module_builtins, mod, mod_chain);
634 TAILQ_INSERT_TAIL(&bi_fail, mod, mod_chain);
638 } while (mod != NULL);
645 TAILQ_FOREACH(mod, &module_bootlist, mod_chain) {
646 mi = mod->mod_info;
653 } while (mod != NULL);
656 while ((mod = TAILQ_FIRST(&bi_fail)) != NULL) {
657 TAILQ_REMOVE(&bi_fail, mod, mod_chain);
658 TAILQ_INSERT_TAIL(&module_builtins, mod, mod_chain);
693 module_t *mod;
699 mod = module_lookup(filename);
700 if (mod != NULL) {
800 module_t *mod;
804 TAILQ_FOREACH(mod, &module_list, mod_chain) {
805 if (strcmp(mod->mod_info->mi_name, name) == 0)
809 return mod;
820 module_hold(module_t *mod)
824 mod->mod_refcnt++;
834 module_rele(module_t *mod)
838 KASSERT(mod->mod_refcnt > 0);
839 mod->mod_refcnt--;
849 module_enqueue(module_t *mod)
859 TAILQ_INSERT_HEAD(&module_list, mod, mod_chain);
860 if (mod->mod_nrequired) {
863 for (i = 0; i < mod->mod_nrequired; i++) {
864 KASSERT((*mod->mod_required)[i] != NULL);
865 (*mod->mod_required)[i]->mod_refcnt++;
878 alloc_required(module_t *mod)
884 if (mod->mod_nrequired >= mod->mod_arequired) {
885 areq = mod->mod_arequired + MAXMODDEPS;
886 old = mod->mod_required;
888 for (i = 0; i < mod->mod_arequired; i++)
890 mod->mod_required = new;
892 kmem_free(old, mod->mod_arequired * sizeof(module_t *));
893 mod->mod_arequired = areq;
910 module_t *mod, *mod2, *mod_loaded, *prev_active;
919 TAILQ_FOREACH(mod, &module_builtins, mod_chain) {
920 if (strcmp(mod->mod_info->mi_name, name) == 0) {
921 mi = mod->mod_info;
931 KASSERT(mod == NULL);
952 KASSERT(mod->mod_required == NULL);
953 KASSERT(mod->mod_arequired == 0);
954 KASSERT(mod->mod_nrequired == 0);
966 alloc_required(mod);
967 error = module_do_builtin(mod, buf, &mod2, NULL);
973 (*mod->mod_required)[mod->mod_nrequired++] = mod2;
981 module_active = mod;
992 TAILQ_REMOVE(&module_builtins, mod, mod_chain);
995 *modp = mod;
997 module_enqueue(mod);
1001 if (mod->mod_required)
1002 kmem_free(mod->mod_required, mod->mod_arequired *
1004 mod->mod_arequired = 0;
1005 mod->mod_nrequired = 0;
1006 mod->mod_required = NULL;
1018 module_load_sysctl(module_t *mod)
1029 if (mod->mod_source == MODULE_SOURCE_KERNEL)
1032 error = kobj_find_section(mod->mod_kobj, "link_set_sysctl_funcs",
1038 (**ls_funcp)(&mod->mod_sysctllog);
1052 module_load_evcnt(module_t *mod)
1063 if (mod->mod_source == MODULE_SOURCE_KERNEL)
1066 error = kobj_find_section(mod->mod_kobj, "link_set_evcnts",
1085 module_unload_evcnt(module_t *mod)
1096 if (mod->mod_source == MODULE_SOURCE_KERNEL)
1099 error = kobj_find_section(mod->mod_kobj, "link_set_evcnts",
1135 module_t *mod, *mod2, *prev_active;
1166 TAILQ_FOREACH(mod, &module_builtins, mod_chain) {
1167 if (strcmp(mod->mod_info->mi_name, name) == 0) {
1171 if (mod) {
1172 if (ISSET(mod->mod_flags, MODFLG_MUST_FORCE) &&
1182 error = module_do_builtin(mod, name, modp, props);
1192 TAILQ_FOREACH(mod, &module_bootlist, mod_chain) {
1193 if (strcmp(mod->mod_info->mi_name, name) == 0) {
1194 TAILQ_REMOVE(&module_bootlist, mod, mod_chain);
1198 if (mod != NULL) {
1199 TAILQ_INSERT_TAIL(pending, mod, mod_chain);
1204 mod = module_lookup(name);
1205 if (mod != NULL) {
1207 *modp = mod;
1215 mod = module_newmodule(MODULE_SOURCE_FILESYS);
1216 if (mod == NULL) {
1222 error = module_load_vfs_vec(name, flags, autoload, mod,
1241 module_free(mod);
1244 TAILQ_INSERT_TAIL(pending, mod, mod_chain);
1246 error = module_fetch_info(mod);
1257 mi = mod->mod_info;
1310 if (mod->mod_source == MODULE_SOURCE_FILESYS) {
1311 mod2 = module_lookup(mod->mod_info->mi_name);
1312 if ( mod2 && mod2 != mod) {
1326 if (mod == mod2) {
1341 mod->mod_arequired = 0;
1359 alloc_required(mod);
1374 (*mod->mod_required)[mod->mod_nrequired++] = mod2;
1391 error = kobj_affix(mod->mod_kobj, mi->mi_name);
1408 module_active = mod;
1416 module_load_sysctl(mod); /* Set-up module's sysctl if any */
1417 module_load_evcnt(mod); /* Attach any static evcnt needed */
1437 if (mod2 && mod2 != mod) {
1448 TAILQ_REMOVE(pending, mod, mod_chain);
1449 module_enqueue(mod);
1451 *modp = mod;
1458 mod->mod_autotime = time_second + module_autotime;
1459 SET(mod->mod_flags, MODFLG_AUTO_LOADED);
1464 module_callback_load(mod);
1474 if (mod->mod_sysctllog) {
1475 sysctl_teardown(&mod->mod_sysctllog);
1478 module_unload_evcnt(mod);
1480 kobj_unload(mod->mod_kobj);
1486 TAILQ_REMOVE(pending, mod, mod_chain);
1488 module_free(mod);
1501 module_t *mod, *prev_active;
1510 mod = module_lookup(name);
1511 if (mod == NULL) {
1515 if (mod->mod_refcnt != 0) {
1517 mod->mod_refcnt);
1524 if (mod->mod_source == MODULE_SOURCE_KERNEL &&
1525 mod->mod_info->mi_class == MODULE_CLASS_SECMODEL) {
1532 module_active = mod;
1533 module_callback_unload(mod);
1536 error = (*mod->mod_info->mi_modcmd)(MODULE_CMD_FINI, NULL);
1543 if (mod->mod_sysctllog) {
1544 sysctl_teardown(&mod->mod_sysctllog);
1546 module_unload_evcnt(mod);
1555 TAILQ_REMOVE(&module_list, mod, mod_chain);
1556 for (i = 0; i < mod->mod_nrequired; i++) {
1557 (*mod->mod_required)[i]->mod_refcnt--;
1560 if (mod->mod_kobj != NULL) {
1561 kobj_unload(mod->mod_kobj);
1563 if (mod->mod_source == MODULE_SOURCE_KERNEL) {
1564 if (mod->mod_required != NULL) {
1569 kmem_free(mod->mod_required,
1570 mod->mod_arequired * sizeof(module_t *));
1571 mod->mod_nrequired = 0;
1572 mod->mod_arequired = 0;
1573 mod->mod_required = NULL;
1576 module_require_force(mod);
1577 TAILQ_INSERT_TAIL(&module_builtins, mod, mod_chain);
1580 module_free(mod);
1598 module_t *mod;
1615 TAILQ_FOREACH(mod, &module_bootlist, mod_chain) {
1616 if (strcmp(mod->mod_info->mi_name, name) == 0) {
1623 mod = module_newmodule(MODULE_SOURCE_BOOT);
1624 if (mod == NULL) {
1628 error = kobj_load_mem(&mod->mod_kobj, name, base, size);
1630 module_free(mod);
1635 error = module_fetch_info(mod);
1637 kobj_unload(mod->mod_kobj);
1638 module_free(mod);
1644 TAILQ_INSERT_TAIL(&module_bootlist, mod, mod_chain);
1655 module_fetch_info(module_t *mod)
1664 error = kobj_find_section(mod->mod_kobj, "link_set_modules",
1684 mod->mod_info = *(modinfo_t **)addr;
1717 module_t *mod, *next;
1723 for (mod = TAILQ_FIRST(&module_list); mod != NULL; mod = next) {
1724 next = TAILQ_NEXT(mod, mod_chain);
1727 if (mod->mod_source == MODULE_SOURCE_KERNEL)
1730 if (!ISSET(mod->mod_flags, MODFLG_AUTO_LOADED))
1736 mod->mod_autotime == 0) {
1738 } else if (time_second < mod->mod_autotime) {
1742 mod->mod_autotime = 0;
1764 mi = mod->mod_info;
1811 module_t *mod;
1815 TAILQ_FOREACH(mod, &module_list, mod_chain) {
1816 if (mod->mod_kobj == NULL) {
1819 if (kobj_stat(mod->mod_kobj, &maddr, &msize) != 0)
1826 (size_t)(addr - maddr), mod->mod_info->mi_name);
1839 module_t *mod;
1845 TAILQ_FOREACH(mod, &module_list, mod_chain) {
1846 switch (mod->mod_source) {
1860 if (mod->mod_kobj == NULL) {
1863 } else if (kobj_stat(mod->mod_kobj, &maddr, &msize) != 0)
1865 (*pr)("%16s %16lx %8ld %8s\n", mod->mod_info->mi_name,
1939 module_getspecific(module_t *mod, specificdata_key_t key)
1943 &mod->mod_sdref, key);
1952 module_setspecific(module_t *mod, specificdata_key_t key, void *data)
1956 &mod->mod_sdref, key, data);
1971 struct module *mod;
1979 TAILQ_FOREACH_REVERSE(mod, &module_list, modlist, mod_chain)
1980 load(mod);
1996 struct module *mod;
2000 TAILQ_FOREACH(mod, &module_list, mod_chain)
2001 modcb->modcb_unload(mod);
2013 module_callback_load(struct module *mod)
2018 modcb->modcb_load(mod);
2028 module_callback_unload(struct module *mod)
2033 modcb->modcb_unload(mod);