@@ -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;
@@ -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;
@@ -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
@@ -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;
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@lst.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(-)