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: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
parent
e610499e26
commit
a6e6abd575
@ -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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
{
|
{
|
||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user