[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250218192446.1269e461@gandalf.local.home>
Date: Tue, 18 Feb 2025 19:24:46 -0500
From: Steven Rostedt <rostedt@...dmis.org>
To: Luis Chamberlain <mcgrof@...nel.org>
Cc: "Masami Hiramatsu (Google)" <mhiramat@...nel.org>,
linux-kernel@...r.kernel.org, linux-trace-kernel@...r.kernel.org, Mark
Rutland <mark.rutland@....com>, Mathieu Desnoyers
<mathieu.desnoyers@...icios.com>, Andrew Morton
<akpm@...ux-foundation.org>, Petr Pavlu <petr.pavlu@...e.com>, Sami
Tolvanen <samitolvanen@...gle.com>, Daniel Gomez <da.gomez@...sung.com>,
linux-modules@...r.kernel.org, Sebastian Andrzej Siewior
<bigeasy@...utronix.de>
Subject: Re: [PATCH 5/8] module: Add module_for_each_mod() function
On Tue, 18 Feb 2025 13:21:20 -0800
Luis Chamberlain <mcgrof@...nel.org> wrote:
> The patch is not OK, you're looking at old code, look at
> modules-next and as Petr suggested look at Sebastian's recently
> merged work.
>
> git remote add korg-modules git://git.kernel.org/pub/scm/linux/kernel/git/modules/linux.git
Would this be OK?
I have this on v6.14-rc3, and it doesn't cause any conflicts when I merge
it with modules-next, and it builds fine.
-- Steve
diff --git a/include/linux/module.h b/include/linux/module.h
index 30e5b19bafa9..9a71dd2cb11f 100644
--- a/include/linux/module.h
+++ b/include/linux/module.h
@@ -782,6 +782,8 @@ static inline void *module_writable_address(struct module *mod, void *loc)
return __module_writable_address(mod, loc);
}
+void module_for_each_mod(int(*func)(struct module *mod, void *data), void *data);
+
#else /* !CONFIG_MODULES... */
static inline struct module *__module_address(unsigned long addr)
@@ -894,6 +896,10 @@ static inline void *module_writable_address(struct module *mod, void *loc)
{
return loc;
}
+
+static inline void module_for_each_mod(int(*func)(struct module *mod, void *data), void *data)
+{
+}
#endif /* CONFIG_MODULES */
#ifdef CONFIG_SYSFS
diff --git a/kernel/module/main.c b/kernel/module/main.c
index 1fb9ad289a6f..1bd4e3b7098a 100644
--- a/kernel/module/main.c
+++ b/kernel/module/main.c
@@ -3809,6 +3809,19 @@ bool is_module_text_address(unsigned long addr)
return ret;
}
+void module_for_each_mod(int(*func)(struct module *mod, void *data), void *data)
+{
+ struct module *mod;
+
+ guard(rcu)();
+ list_for_each_entry_rcu(mod, &modules, list) {
+ if (mod->state == MODULE_STATE_UNFORMED)
+ continue;
+ if (func(mod, data))
+ break;
+ }
+}
+
/**
* __module_text_address() - get the module whose code contains an address.
* @addr: the address.
Powered by blists - more mailing lists