• Home
  • Raw
  • Download

Lines Matching refs:mod

126 static inline bool module_is_inkernel(struct kmod_module *mod)  in module_is_inkernel()  argument
128 int state = kmod_module_get_initstate(mod); in module_is_inkernel()
137 int kmod_module_parse_depline(struct kmod_module *mod, char *line) in kmod_module_parse_depline() argument
139 struct kmod_ctx *ctx = mod->ctx; in kmod_module_parse_depline()
147 if (mod->init.dep) in kmod_module_parse_depline()
148 return mod->n_dep; in kmod_module_parse_depline()
149 assert(mod->dep == NULL); in kmod_module_parse_depline()
150 mod->init.dep = true; in kmod_module_parse_depline()
157 dirname = kmod_get_dirname(mod->ctx); in kmod_module_parse_depline()
167 if (mod->path == NULL) { in kmod_module_parse_depline()
171 mod->path = strdup(str); in kmod_module_parse_depline()
172 if (mod->path == NULL) in kmod_module_parse_depline()
202 DBG(ctx, "%d dependencies for %s\n", n, mod->name); in kmod_module_parse_depline()
204 mod->dep = list; in kmod_module_parse_depline()
205 mod->n_dep = n; in kmod_module_parse_depline()
210 mod->init.dep = false; in kmod_module_parse_depline()
214 void kmod_module_set_visited(struct kmod_module *mod, bool visited) in kmod_module_set_visited() argument
216 mod->visited = visited; in kmod_module_set_visited()
219 void kmod_module_set_builtin(struct kmod_module *mod, bool builtin) in kmod_module_set_builtin() argument
221 mod->builtin = in kmod_module_set_builtin()
225 void kmod_module_set_required(struct kmod_module *mod, bool required) in kmod_module_set_required() argument
227 mod->required = required; in kmod_module_set_required()
230 bool kmod_module_is_builtin(struct kmod_module *mod) in kmod_module_is_builtin() argument
232 if (mod->builtin == KMOD_MODULE_BUILTIN_UNKNOWN) { in kmod_module_is_builtin()
233 kmod_module_set_builtin(mod, in kmod_module_is_builtin()
234 kmod_lookup_alias_is_builtin(mod->ctx, mod->name)); in kmod_module_is_builtin()
237 return mod->builtin == KMOD_MODULE_BUILTIN_YES; in kmod_module_is_builtin()
265 struct kmod_module **mod) in kmod_module_new() argument
272 *mod = kmod_module_ref(m); in kmod_module_new()
302 *mod = m; in kmod_module_new()
331 struct kmod_module **mod) in kmod_module_new_from_name() argument
336 if (ctx == NULL || name == NULL || mod == NULL) in kmod_module_new_from_name()
341 return kmod_module_new(ctx, name_norm, name_norm, namelen, NULL, 0, mod); in kmod_module_new_from_name()
345 const char *name, struct kmod_module **mod) in kmod_module_new_from_alias() argument
359 err = kmod_module_new(ctx, key, name, namelen, alias, aliaslen, mod); in kmod_module_new_from_alias()
389 struct kmod_module **mod) in kmod_module_new_from_path() argument
398 if (ctx == NULL || path == NULL || mod == NULL) in kmod_module_new_from_path()
434 *mod = kmod_module_ref(m); in kmod_module_new_from_path()
445 *mod = m; in kmod_module_new_from_path()
460 KMOD_EXPORT struct kmod_module *kmod_module_unref(struct kmod_module *mod) in kmod_module_unref() argument
462 if (mod == NULL) in kmod_module_unref()
465 if (--mod->refcount > 0) in kmod_module_unref()
466 return mod; in kmod_module_unref()
468 DBG(mod->ctx, "kmod_module %p released\n", mod); in kmod_module_unref()
470 kmod_pool_del_module(mod->ctx, mod, mod->hashkey); in kmod_module_unref()
471 kmod_module_unref_list(mod->dep); in kmod_module_unref()
473 if (mod->file) in kmod_module_unref()
474 kmod_file_unref(mod->file); in kmod_module_unref()
476 kmod_unref(mod->ctx); in kmod_module_unref()
477 free(mod->options); in kmod_module_unref()
478 free(mod->path); in kmod_module_unref()
479 free(mod); in kmod_module_unref()
491 KMOD_EXPORT struct kmod_module *kmod_module_ref(struct kmod_module *mod) in kmod_module_ref() argument
493 if (mod == NULL) in kmod_module_ref()
496 mod->refcount++; in kmod_module_ref()
498 return mod; in kmod_module_ref()
631 static const struct kmod_list *module_get_dependencies_noref(const struct kmod_module *mod) in module_get_dependencies_noref() argument
633 if (!mod->init.dep) { in module_get_dependencies_noref()
635 char *line = kmod_search_moddep(mod->ctx, mod->name); in module_get_dependencies_noref()
640 kmod_module_parse_depline((struct kmod_module *)mod, line); in module_get_dependencies_noref()
643 if (!mod->init.dep) in module_get_dependencies_noref()
647 return mod->dep; in module_get_dependencies_noref()
661 KMOD_EXPORT struct kmod_list *kmod_module_get_dependencies(const struct kmod_module *mod) in kmod_module_get_dependencies() argument
665 if (mod == NULL) in kmod_module_get_dependencies()
668 module_get_dependencies_noref(mod); in kmod_module_get_dependencies()
670 kmod_list_foreach(l, mod->dep) { in kmod_module_get_dependencies()
683 ERR(mod->ctx, "out of memory\n"); in kmod_module_get_dependencies()
718 KMOD_EXPORT const char *kmod_module_get_name(const struct kmod_module *mod) in kmod_module_get_name() argument
720 if (mod == NULL) in kmod_module_get_name()
723 return mod->name; in kmod_module_get_name()
737 KMOD_EXPORT const char *kmod_module_get_path(const struct kmod_module *mod) in kmod_module_get_path() argument
741 if (mod == NULL) in kmod_module_get_path()
744 DBG(mod->ctx, "name='%s' path='%s'\n", mod->name, mod->path); in kmod_module_get_path()
746 if (mod->path != NULL) in kmod_module_get_path()
747 return mod->path; in kmod_module_get_path()
748 if (mod->init.dep) in kmod_module_get_path()
752 line = kmod_search_moddep(mod->ctx, mod->name); in kmod_module_get_path()
756 kmod_module_parse_depline((struct kmod_module *) mod, line); in kmod_module_get_path()
759 return mod->path; in kmod_module_get_path()
778 KMOD_EXPORT int kmod_module_remove_module(struct kmod_module *mod, in kmod_module_remove_module() argument
783 if (mod == NULL) in kmod_module_remove_module()
790 err = delete_module(mod->name, flags); in kmod_module_remove_module()
793 ERR(mod->ctx, "could not remove '%s': %m\n", mod->name); in kmod_module_remove_module()
816 KMOD_EXPORT int kmod_module_insert_module(struct kmod_module *mod, in kmod_module_insert_module() argument
827 if (mod == NULL) in kmod_module_insert_module()
830 path = kmod_module_get_path(mod); in kmod_module_insert_module()
832 ERR(mod->ctx, "could not find module by name='%s'\n", mod->name); in kmod_module_insert_module()
836 if (!mod->file) { in kmod_module_insert_module()
837 mod->file = kmod_file_open(mod->ctx, path); in kmod_module_insert_module()
838 if (mod->file == NULL) { in kmod_module_insert_module()
844 if (kmod_file_get_direct(mod->file)) { in kmod_module_insert_module()
852 err = finit_module(kmod_file_get_fd(mod->file), args, kernel_flags); in kmod_module_insert_module()
858 elf = kmod_file_get_elf(mod->file); in kmod_module_insert_module()
867 INFO(mod->ctx, "Failed to strip modversion: %s\n", strerror(-err)); in kmod_module_insert_module()
873 INFO(mod->ctx, "Failed to strip vermagic: %s\n", strerror(-err)); in kmod_module_insert_module()
878 mem = kmod_file_get_contents(mod->file); in kmod_module_insert_module()
880 size = kmod_file_get_size(mod->file); in kmod_module_insert_module()
886 INFO(mod->ctx, "Failed to insert module '%s': %m\n", path); in kmod_module_insert_module()
891 static bool module_is_blacklisted(struct kmod_module *mod) in module_is_blacklisted() argument
893 struct kmod_ctx *ctx = mod->ctx; in module_is_blacklisted()
901 if (streq(modname, mod->name)) in module_is_blacklisted()
938 struct kmod_module *mod = li->data; in kmod_module_apply_filter() local
942 module_is_blacklisted(mod)) in kmod_module_apply_filter()
946 && kmod_module_is_builtin(mod)) in kmod_module_apply_filter()
949 node = kmod_list_append(*output, mod); in kmod_module_apply_filter()
954 kmod_module_ref(mod); in kmod_module_apply_filter()
965 static int command_do(struct kmod_module *mod, const char *type, in command_do() argument
968 const char *modname = kmod_module_get_name(mod); in command_do()
971 DBG(mod->ctx, "%s %s\n", type, cmd); in command_do()
978 ERR(mod->ctx, "Error running %s command for %s\n", in command_do()
992 static int module_do_install_commands(struct kmod_module *mod, in module_do_install_commands() argument
996 const char *command = kmod_module_get_install_commands(mod); in module_do_install_commands()
1035 err = cb->run_install(mod, cmd, cb->data); in module_do_install_commands()
1037 err = command_do(mod, "install", cmd); in module_do_install_commands()
1068 static int __kmod_module_get_probe_list(struct kmod_module *mod,
1074 static int __kmod_module_fill_softdep(struct kmod_module *mod, in __kmod_module_fill_softdep() argument
1080 err = kmod_module_get_softdeps(mod, &pre, &post); in __kmod_module_fill_softdep()
1082 ERR(mod->ctx, "could not get softdep: %s\n", in __kmod_module_fill_softdep()
1094 l = kmod_list_append(*list, kmod_module_ref(mod)); in __kmod_module_fill_softdep()
1096 kmod_module_unref(mod); in __kmod_module_fill_softdep()
1101 mod->ignorecmd = (pre != NULL || post != NULL); in __kmod_module_fill_softdep()
1118 static int __kmod_module_get_probe_list(struct kmod_module *mod, in __kmod_module_get_probe_list() argument
1126 if (mod->visited) { in __kmod_module_get_probe_list()
1127 DBG(mod->ctx, "Ignore module '%s': already visited\n", in __kmod_module_get_probe_list()
1128 mod->name); in __kmod_module_get_probe_list()
1131 mod->visited = true; in __kmod_module_get_probe_list()
1133 dep = kmod_module_get_dependencies(mod); in __kmod_module_get_probe_list()
1140 mod->required = true; in __kmod_module_get_probe_list()
1155 l = kmod_list_append(*list, kmod_module_ref(mod)); in __kmod_module_get_probe_list()
1157 kmod_module_unref(mod); in __kmod_module_get_probe_list()
1162 mod->ignorecmd = true; in __kmod_module_get_probe_list()
1164 err = __kmod_module_fill_softdep(mod, list); in __kmod_module_get_probe_list()
1171 static int kmod_module_get_probe_list(struct kmod_module *mod, in kmod_module_get_probe_list() argument
1177 assert(mod != NULL); in kmod_module_get_probe_list()
1183 kmod_set_modules_visited(mod->ctx, false); in kmod_module_get_probe_list()
1184 kmod_set_modules_required(mod->ctx, false); in kmod_module_get_probe_list()
1186 err = __kmod_module_get_probe_list(mod, true, ignorecmd, list); in kmod_module_get_probe_list()
1237 KMOD_EXPORT int kmod_module_probe_insert_module(struct kmod_module *mod, in kmod_module_probe_insert_module() argument
1250 if (mod == NULL) in kmod_module_probe_insert_module()
1254 && module_is_inkernel(mod)) { in kmod_module_probe_insert_module()
1267 if ((mod->alias != NULL && ((err = flags & KMOD_PROBE_APPLY_BLACKLIST_ALIAS_ONLY))) in kmod_module_probe_insert_module()
1270 if (module_is_blacklisted(mod)) in kmod_module_probe_insert_module()
1274 err = kmod_module_get_probe_list(mod, in kmod_module_probe_insert_module()
1282 err = kmod_module_apply_filter(mod->ctx, in kmod_module_probe_insert_module()
1305 DBG(mod->ctx, "Ignoring module '%s': already loaded\n", in kmod_module_probe_insert_module()
1312 m == mod ? extra_options : NULL); in kmod_module_probe_insert_module()
1343 if (err == -EEXIST && m == mod && in kmod_module_probe_insert_module()
1372 KMOD_EXPORT const char *kmod_module_get_options(const struct kmod_module *mod) in kmod_module_get_options() argument
1374 if (mod == NULL) in kmod_module_get_options()
1377 if (!mod->init.options) { in kmod_module_get_options()
1379 struct kmod_module *m = (struct kmod_module *)mod; in kmod_module_get_options()
1385 config = kmod_get_config(mod->ctx); in kmod_module_get_options()
1393 DBG(mod->ctx, "modname=%s mod->name=%s mod->alias=%s\n", modname, mod->name, mod->alias); in kmod_module_get_options()
1394 if (!(streq(modname, mod->name) || (mod->alias != NULL && in kmod_module_get_options()
1395 streq(modname, mod->alias)))) in kmod_module_get_options()
1398 … DBG(mod->ctx, "passed = modname=%s mod->name=%s mod->alias=%s\n", modname, mod->name, mod->alias); in kmod_module_get_options()
1426 return mod->options; in kmod_module_get_options()
1429 ERR(mod->ctx, "out of memory\n"); in kmod_module_get_options()
1447 KMOD_EXPORT const char *kmod_module_get_install_commands(const struct kmod_module *mod) in kmod_module_get_install_commands() argument
1449 if (mod == NULL) in kmod_module_get_install_commands()
1452 if (!mod->init.install_commands) { in kmod_module_get_install_commands()
1454 struct kmod_module *m = (struct kmod_module *)mod; in kmod_module_get_install_commands()
1458 config = kmod_get_config(mod->ctx); in kmod_module_get_install_commands()
1463 if (fnmatch(modname, mod->name, 0) != 0) in kmod_module_get_install_commands()
1478 return mod->install_commands; in kmod_module_get_install_commands()
1481 void kmod_module_set_install_commands(struct kmod_module *mod, const char *cmd) in kmod_module_set_install_commands() argument
1483 mod->init.install_commands = true; in kmod_module_set_install_commands()
1484 mod->install_commands = cmd; in kmod_module_set_install_commands()
1524 KMOD_EXPORT int kmod_module_get_softdeps(const struct kmod_module *mod, in kmod_module_get_softdeps() argument
1531 if (mod == NULL || pre == NULL || post == NULL) in kmod_module_get_softdeps()
1537 config = kmod_get_config(mod->ctx); in kmod_module_get_softdeps()
1544 if (fnmatch(modname, mod->name, 0) != 0) in kmod_module_get_softdeps()
1548 *pre = lookup_softdep(mod->ctx, array, count); in kmod_module_get_softdeps()
1550 *post = lookup_softdep(mod->ctx, array, count); in kmod_module_get_softdeps()
1576 KMOD_EXPORT const char *kmod_module_get_remove_commands(const struct kmod_module *mod) in kmod_module_get_remove_commands() argument
1578 if (mod == NULL) in kmod_module_get_remove_commands()
1581 if (!mod->init.remove_commands) { in kmod_module_get_remove_commands()
1583 struct kmod_module *m = (struct kmod_module *)mod; in kmod_module_get_remove_commands()
1587 config = kmod_get_config(mod->ctx); in kmod_module_get_remove_commands()
1592 if (fnmatch(modname, mod->name, 0) != 0) in kmod_module_get_remove_commands()
1607 return mod->remove_commands; in kmod_module_get_remove_commands()
1610 void kmod_module_set_remove_commands(struct kmod_module *mod, const char *cmd) in kmod_module_set_remove_commands() argument
1612 mod->init.remove_commands = true; in kmod_module_set_remove_commands()
1613 mod->remove_commands = cmd; in kmod_module_set_remove_commands()
1731 KMOD_EXPORT int kmod_module_get_initstate(const struct kmod_module *mod) in kmod_module_get_initstate() argument
1736 if (mod == NULL) in kmod_module_get_initstate()
1740 if (kmod_module_is_builtin((struct kmod_module *)mod)) in kmod_module_get_initstate()
1744 "/sys/module/%s/initstate", mod->name); in kmod_module_get_initstate()
1749 DBG(mod->ctx, "could not open '%s': %s\n", in kmod_module_get_initstate()
1759 DBG(mod->ctx, "could not open '%s': %s\n", in kmod_module_get_initstate()
1767 ERR(mod->ctx, "could not read from '%s': %s\n", in kmod_module_get_initstate()
1779 ERR(mod->ctx, "unknown %s: '%s'\n", path, buf); in kmod_module_get_initstate()
1794 KMOD_EXPORT long kmod_module_get_size(const struct kmod_module *mod) in kmod_module_get_size() argument
1802 if (mod == NULL) in kmod_module_get_size()
1809 snprintf(line, sizeof(line), "/sys/module/%s", mod->name); in kmod_module_get_size()
1818 ERR(mod->ctx, "failed to read coresize from %s\n", line); in kmod_module_get_size()
1827 ERR(mod->ctx, in kmod_module_get_size()
1839 if (tok == NULL || !streq(tok, mod->name)) in kmod_module_get_size()
1844 ERR(mod->ctx, in kmod_module_get_size()
1851 ERR(mod->ctx, in kmod_module_get_size()
1878 KMOD_EXPORT int kmod_module_get_refcnt(const struct kmod_module *mod) in kmod_module_get_refcnt() argument
1884 if (mod == NULL) in kmod_module_get_refcnt()
1887 snprintf(path, sizeof(path), "/sys/module/%s/refcnt", mod->name); in kmod_module_get_refcnt()
1891 DBG(mod->ctx, "could not open '%s': %s\n", in kmod_module_get_refcnt()
1899 ERR(mod->ctx, "could not read integer from '%s': '%s'\n", in kmod_module_get_refcnt()
1916 KMOD_EXPORT struct kmod_list *kmod_module_get_holders(const struct kmod_module *mod) in kmod_module_get_holders() argument
1923 if (mod == NULL || mod->ctx == NULL) in kmod_module_get_holders()
1926 snprintf(dname, sizeof(dname), "/sys/module/%s/holders", mod->name); in kmod_module_get_holders()
1930 ERR(mod->ctx, "could not open '%s': %s\n", in kmod_module_get_holders()
1946 err = kmod_module_new_from_name(mod->ctx, dent->d_name, in kmod_module_get_holders()
1949 ERR(mod->ctx, "could not create module for '%s': %s\n", in kmod_module_get_holders()
1958 ERR(mod->ctx, "out of memory\n"); in kmod_module_get_holders()
1996 KMOD_EXPORT struct kmod_list *kmod_module_get_sections(const struct kmod_module *mod) in kmod_module_get_sections() argument
2004 if (mod == NULL) in kmod_module_get_sections()
2007 snprintf(dname, sizeof(dname), "/sys/module/%s/sections", mod->name); in kmod_module_get_sections()
2011 ERR(mod->ctx, "could not open '%s': %s\n", in kmod_module_get_sections()
2033 ERR(mod->ctx, "could not open '%s/%s': %m\n", in kmod_module_get_sections()
2041 ERR(mod->ctx, "could not read long from '%s/%s': %m\n", in kmod_module_get_sections()
2050 ERR(mod->ctx, "out of memory\n"); in kmod_module_get_sections()
2061 ERR(mod->ctx, "out of memory\n"); in kmod_module_get_sections()
2134 static struct kmod_elf *kmod_module_get_elf(const struct kmod_module *mod) in kmod_module_get_elf() argument
2136 if (mod->file == NULL) { in kmod_module_get_elf()
2137 const char *path = kmod_module_get_path(mod); in kmod_module_get_elf()
2144 ((struct kmod_module *)mod)->file = kmod_file_open(mod->ctx, in kmod_module_get_elf()
2146 if (mod->file == NULL) in kmod_module_get_elf()
2150 return kmod_file_get_elf(mod->file); in kmod_module_get_elf()
2271 KMOD_EXPORT int kmod_module_get_info(const struct kmod_module *mod, struct kmod_list **list) in kmod_module_get_info() argument
2278 if (mod == NULL || list == NULL) in kmod_module_get_info()
2283 elf = kmod_module_get_elf(mod); in kmod_module_get_info()
2313 if (kmod_module_signature_info(mod->file, &sig_info)) { in kmod_module_get_info()
2463 KMOD_EXPORT int kmod_module_get_versions(const struct kmod_module *mod, struct kmod_list **list) in kmod_module_get_versions() argument
2469 if (mod == NULL || list == NULL) in kmod_module_get_versions()
2474 elf = kmod_module_get_elf(mod); in kmod_module_get_versions()
2603 KMOD_EXPORT int kmod_module_get_symbols(const struct kmod_module *mod, struct kmod_list **list) in kmod_module_get_symbols() argument
2609 if (mod == NULL || list == NULL) in kmod_module_get_symbols()
2614 elf = kmod_module_get_elf(mod); in kmod_module_get_symbols()
2746 KMOD_EXPORT int kmod_module_get_dependency_symbols(const struct kmod_module *mod, struct kmod_list … in kmod_module_get_dependency_symbols() argument
2752 if (mod == NULL || list == NULL) in kmod_module_get_dependency_symbols()
2757 elf = kmod_module_get_elf(mod); in kmod_module_get_dependency_symbols()