Commit a6e6abd5 authored by Rusty Russell's avatar Rusty Russell

module: remove module_text_address()

Impact: Replace and remove risky (non-EXPORTed) API

module_text_address() returns a pointer to the module, which given locking
improvements in module.c, is useless except to test for NULL:

1) If the module can't go away, use __module_text_address.
2) Otherwise, just use is_module_text_address().

Cc: linux-mtd@lists.infradead.org
Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
parent e610499e
...@@ -2720,14 +2720,14 @@ int nand_scan_tail(struct mtd_info *mtd) ...@@ -2720,14 +2720,14 @@ int nand_scan_tail(struct mtd_info *mtd)
return chip->scan_bbt(mtd); return chip->scan_bbt(mtd);
} }
/* module_text_address() isn't exported, and it's mostly a pointless /* is_module_text_address() isn't exported, and it's mostly a pointless
test if this is a module _anyway_ -- they'd have to try _really_ hard test if this is a module _anyway_ -- they'd have to try _really_ hard
to call us from in-kernel code if the core NAND support is modular. */ to call us from in-kernel code if the core NAND support is modular. */
#ifdef MODULE #ifdef MODULE
#define caller_is_module() (1) #define caller_is_module() (1)
#else #else
#define caller_is_module() \ #define caller_is_module() \
module_text_address((unsigned long)__builtin_return_address(0)) is_module_text_address((unsigned long)__builtin_return_address(0))
#endif #endif
/** /**
......
...@@ -362,8 +362,6 @@ static inline int module_is_live(struct module *mod) ...@@ -362,8 +362,6 @@ static inline int module_is_live(struct module *mod)
return mod->state != MODULE_STATE_GOING; return mod->state != MODULE_STATE_GOING;
} }
/* Is this address in a module? (second is with no locks, for oops) */
struct module *module_text_address(unsigned long addr);
struct module *__module_text_address(unsigned long addr); struct module *__module_text_address(unsigned long addr);
struct module *__module_address(unsigned long addr); struct module *__module_address(unsigned long addr);
bool is_module_address(unsigned long addr); bool is_module_address(unsigned long addr);
...@@ -496,11 +494,6 @@ search_module_extables(unsigned long addr) ...@@ -496,11 +494,6 @@ search_module_extables(unsigned long addr)
return NULL; return NULL;
} }
static inline struct module *module_text_address(unsigned long addr)
{
return NULL;
}
static inline struct module *__module_address(unsigned long addr) static inline struct module *__module_address(unsigned long addr)
{ {
return NULL; return NULL;
......
...@@ -58,14 +58,14 @@ __notrace_funcgraph int __kernel_text_address(unsigned long addr) ...@@ -58,14 +58,14 @@ __notrace_funcgraph int __kernel_text_address(unsigned long addr)
{ {
if (core_kernel_text(addr)) if (core_kernel_text(addr))
return 1; return 1;
return __module_text_address(addr) != NULL; return is_module_text_address(addr);
} }
int kernel_text_address(unsigned long addr) int kernel_text_address(unsigned long addr)
{ {
if (core_kernel_text(addr)) if (core_kernel_text(addr))
return 1; return 1;
return module_text_address(addr) != NULL; return is_module_text_address(addr);
} }
/* /*
...@@ -81,5 +81,5 @@ int func_ptr_is_kernel_text(void *ptr) ...@@ -81,5 +81,5 @@ int func_ptr_is_kernel_text(void *ptr)
addr = (unsigned long) dereference_function_descriptor(ptr); addr = (unsigned long) dereference_function_descriptor(ptr);
if (core_kernel_text(addr)) if (core_kernel_text(addr))
return 1; return 1;
return module_text_address(addr) != NULL; return is_module_text_address(addr);
} }
...@@ -908,8 +908,10 @@ void symbol_put_addr(void *addr) ...@@ -908,8 +908,10 @@ void symbol_put_addr(void *addr)
if (core_kernel_text((unsigned long)addr)) if (core_kernel_text((unsigned long)addr))
return; return;
if (!(modaddr = module_text_address((unsigned long)addr))) /* module_text_address is safe here: we're supposed to have reference
BUG(); * to module from symbol_get, so it can't go away. */
modaddr = __module_text_address((unsigned long)addr);
BUG_ON(!modaddr);
module_put(modaddr); module_put(modaddr);
} }
EXPORT_SYMBOL_GPL(symbol_put_addr); EXPORT_SYMBOL_GPL(symbol_put_addr);
...@@ -2821,17 +2823,6 @@ struct module *__module_text_address(unsigned long addr) ...@@ -2821,17 +2823,6 @@ struct module *__module_text_address(unsigned long addr)
return mod; return mod;
} }
struct module *module_text_address(unsigned long addr)
{
struct module *mod;
preempt_disable();
mod = __module_text_address(addr);
preempt_enable();
return mod;
}
/* Don't grab lock, we're oopsing. */ /* Don't grab lock, we're oopsing. */
void print_modules(void) void print_modules(void)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment