[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20220501084032.1025918-9-masahiroy@kernel.org>
Date: Sun, 1 May 2022 17:40:14 +0900
From: Masahiro Yamada <masahiroy@...nel.org>
To: linux-kbuild@...r.kernel.org
Cc: linux-kernel@...r.kernel.org,
Masahiro Yamada <masahiroy@...nel.org>,
Nick Desaulniers <ndesaulniers@...gle.com>,
Michal Marek <michal.lkml@...kovi.net>
Subject: [PATCH v2 08/26] modpost: traverse the namespace_list in order
Use the doubly linked list to traverse the list in the added order.
This makes the code more consistent.
Signed-off-by: Masahiro Yamada <masahiroy@...nel.org>
Reviewed-by: Nick Desaulniers <ndesaulniers@...gle.com>
---
(no changes since v1)
scripts/mod/modpost.c | 33 +++++++++++++++------------------
scripts/mod/modpost.h | 4 ++--
2 files changed, 17 insertions(+), 20 deletions(-)
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index 5e99493b0a82..d0cf94e1e984 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -186,6 +186,8 @@ static struct module *new_module(const char *modname)
memset(mod, 0, sizeof(*mod));
INIT_LIST_HEAD(&mod->unresolved_symbols);
+ INIT_LIST_HEAD(&mod->missing_namespaces);
+ INIT_LIST_HEAD(&mod->imported_namespaces);
strcpy(mod->name, modname);
mod->is_vmlinux = (strcmp(modname, "vmlinux") == 0);
@@ -288,39 +290,34 @@ static struct symbol *find_symbol(const char *name)
}
struct namespace_list {
- struct namespace_list *next;
+ struct list_head list;
char namespace[];
};
-static bool contains_namespace(struct namespace_list *list,
- const char *namespace)
+static bool contains_namespace(struct list_head *head, const char *namespace)
{
- for (; list; list = list->next)
+ struct namespace_list *list;
+
+ list_for_each_entry(list, head, list) {
if (!strcmp(list->namespace, namespace))
return true;
+ }
return false;
}
-static void add_namespace(struct namespace_list **list, const char *namespace)
+static void add_namespace(struct list_head *head, const char *namespace)
{
struct namespace_list *ns_entry;
- if (!contains_namespace(*list, namespace)) {
- ns_entry = NOFAIL(malloc(sizeof(struct namespace_list) +
+ if (!contains_namespace(head, namespace)) {
+ ns_entry = NOFAIL(malloc(sizeof(*ns_entry) +
strlen(namespace) + 1));
strcpy(ns_entry->namespace, namespace);
- ns_entry->next = *list;
- *list = ns_entry;
+ list_add_tail(&ns_entry->list, head);
}
}
-static bool module_imports_namespace(struct module *module,
- const char *namespace)
-{
- return contains_namespace(module->imported_namespaces, namespace);
-}
-
static const struct {
const char *str;
enum export export;
@@ -2190,7 +2187,7 @@ static void check_exports(struct module *mod)
basename = mod->name;
if (exp->namespace &&
- !module_imports_namespace(mod, exp->namespace)) {
+ !contains_namespace(&mod->imported_namespaces, exp->namespace)) {
modpost_log(allow_missing_ns_imports ? LOG_WARN : LOG_ERROR,
"module %s uses symbol %s from namespace %s, but does not import it.\n",
basename, exp->name, exp->namespace);
@@ -2489,12 +2486,12 @@ static void write_namespace_deps_files(const char *fname)
list_for_each_entry(mod, &modules, list) {
- if (mod->from_dump || !mod->missing_namespaces)
+ if (mod->from_dump || list_empty(&mod->missing_namespaces))
continue;
buf_printf(&ns_deps_buf, "%s.ko:", mod->name);
- for (ns = mod->missing_namespaces; ns; ns = ns->next)
+ list_for_each_entry(ns, &mod->missing_namespaces, list)
buf_printf(&ns_deps_buf, " %s", ns->namespace);
buf_printf(&ns_deps_buf, "\n");
diff --git a/scripts/mod/modpost.h b/scripts/mod/modpost.h
index 65296eca20a1..2a8c1ad0305e 100644
--- a/scripts/mod/modpost.h
+++ b/scripts/mod/modpost.h
@@ -120,9 +120,9 @@ struct module {
struct buffer dev_table_buf;
char srcversion[25];
// Missing namespace dependencies
- struct namespace_list *missing_namespaces;
+ struct list_head missing_namespaces;
// Actual imported namespaces
- struct namespace_list *imported_namespaces;
+ struct list_head imported_namespaces;
char name[];
};
--
2.32.0
Powered by blists - more mailing lists