[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20210121074959.313333-3-hch@lst.de>
Date: Thu, 21 Jan 2021 08:49:48 +0100
From: Christoph Hellwig <hch@....de>
To: Frederic Barrat <fbarrat@...ux.ibm.com>,
Andrew Donnellan <ajd@...ux.ibm.com>,
Maarten Lankhorst <maarten.lankhorst@...ux.intel.com>,
Maxime Ripard <mripard@...nel.org>,
Thomas Zimmermann <tzimmermann@...e.de>,
David Airlie <airlied@...ux.ie>,
Daniel Vetter <daniel@...ll.ch>, Jessica Yu <jeyu@...nel.org>,
Josh Poimboeuf <jpoimboe@...hat.com>,
Jiri Kosina <jikos@...nel.org>,
Miroslav Benes <mbenes@...e.cz>,
Petr Mladek <pmladek@...e.com>,
Joe Lawrence <joe.lawrence@...hat.com>
Cc: Masahiro Yamada <masahiroy@...nel.org>,
Michal Marek <michal.lkml@...kovi.net>,
linux-kernel@...r.kernel.org, linuxppc-dev@...ts.ozlabs.org,
dri-devel@...ts.freedesktop.org, live-patching@...r.kernel.org,
linux-kbuild@...r.kernel.org
Subject: [PATCH 02/13] module: add a module_loaded helper
Add a helper that takes modules_mutex and uses find_module to check if a
given module is loaded. This provides a better abstraction for the two
callers, and allows to unexport modules_mutex and find_module.
Signed-off-by: Christoph Hellwig <hch@....de>
---
drivers/gpu/drm/drm_fb_helper.c | 7 +------
include/linux/module.h | 3 +++
kernel/module.c | 14 ++++++++++++--
kernel/trace/trace_kprobe.c | 4 +---
4 files changed, 17 insertions(+), 11 deletions(-)
diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index 4b81195106875d..ce6d63ca75c32a 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -2508,13 +2508,8 @@ int __init drm_fb_helper_modinit(void)
{
#if defined(CONFIG_FRAMEBUFFER_CONSOLE_MODULE) && !defined(CONFIG_EXPERT)
const char name[] = "fbcon";
- struct module *fbcon;
- mutex_lock(&module_mutex);
- fbcon = find_module(name);
- mutex_unlock(&module_mutex);
-
- if (!fbcon)
+ if (!module_loaded(name))
request_module_nowait(name);
#endif
return 0;
diff --git a/include/linux/module.h b/include/linux/module.h
index 7a0bcb5b1ffccd..b4654f8a408134 100644
--- a/include/linux/module.h
+++ b/include/linux/module.h
@@ -589,6 +589,9 @@ static inline bool within_module(unsigned long addr, const struct module *mod)
/* Search for module by name: must hold module_mutex. */
struct module *find_module(const char *name);
+/* Check if a module is loaded. */
+bool module_loaded(const char *name);
+
struct symsearch {
const struct kernel_symbol *start, *stop;
const s32 *crcs;
diff --git a/kernel/module.c b/kernel/module.c
index 4bf30e4b3eaaa1..619ea682e64cd1 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -88,7 +88,6 @@
* (delete and add uses RCU list operations).
*/
DEFINE_MUTEX(module_mutex);
-EXPORT_SYMBOL_GPL(module_mutex);
static LIST_HEAD(modules);
/* Work queue for freeing init sections in success case */
@@ -672,7 +671,18 @@ struct module *find_module(const char *name)
module_assert_mutex();
return find_module_all(name, strlen(name), false);
}
-EXPORT_SYMBOL_GPL(find_module);
+
+bool module_loaded(const char *name)
+{
+ bool ret;
+
+ mutex_lock(&module_mutex);
+ ret = !!find_module(name);
+ mutex_unlock(&module_mutex);
+
+ return ret;
+}
+EXPORT_SYMBOL_GPL(module_loaded);
#ifdef CONFIG_SMP
diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c
index e6fba1798771b4..c2e453f88bce70 100644
--- a/kernel/trace/trace_kprobe.c
+++ b/kernel/trace/trace_kprobe.c
@@ -124,9 +124,7 @@ static nokprobe_inline bool trace_kprobe_module_exist(struct trace_kprobe *tk)
if (!p)
return true;
*p = '\0';
- mutex_lock(&module_mutex);
- ret = !!find_module(tk->symbol);
- mutex_unlock(&module_mutex);
+ ret = module_loaded(tk->symbol);
*p = ':';
return ret;
--
2.29.2
Powered by blists - more mailing lists