From dab033878211c85ca13ef1e0c7db3923e0a5dfe5 Mon Sep 17 00:00:00 2001 From: Steven Rostedt Date: Mon, 26 Mar 2012 12:50:52 +1030 Subject: [PATCH] --- yaml --- r: 297042 b: refs/heads/master c: d53799be6758841e1ffb1fd3780f73d0ffe44432 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/include/linux/module.h | 32 ++++---------------------------- trunk/kernel/module.c | 30 ++++++++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 29 deletions(-) diff --git a/[refs] b/[refs] index ea00aa190089..f5fa34923c7c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 026cee0086fe1df4cf74691cf273062cc769617d +refs/heads/master: d53799be6758841e1ffb1fd3780f73d0ffe44432 diff --git a/trunk/include/linux/module.h b/trunk/include/linux/module.h index 4598bf03e98b..fbcafe2ee13e 100644 --- a/trunk/include/linux/module.h +++ b/trunk/include/linux/module.h @@ -21,8 +21,6 @@ #include #include -#include - /* Not Yet Implemented */ #define MODULE_SUPPORTED_DEVICE(name) @@ -452,33 +450,11 @@ void symbol_put_addr(void *addr); /* Sometimes we know we already have a refcount, and it's easier not to handle the error case (which only happens with rmmod --wait). */ -static inline void __module_get(struct module *module) -{ - if (module) { - preempt_disable(); - __this_cpu_inc(module->refptr->incs); - trace_module_get(module, _THIS_IP_); - preempt_enable(); - } -} - -static inline int try_module_get(struct module *module) -{ - int ret = 1; - - if (module) { - preempt_disable(); +extern void __module_get(struct module *module); - if (likely(module_is_live(module))) { - __this_cpu_inc(module->refptr->incs); - trace_module_get(module, _THIS_IP_); - } else - ret = 0; - - preempt_enable(); - } - return ret; -} +/* This is the Right Way to get a module: if it fails, it's being removed, + * so pretend it's not there. */ +extern bool try_module_get(struct module *module); extern void module_put(struct module *module); diff --git a/trunk/kernel/module.c b/trunk/kernel/module.c index 6f6651a54590..294692d8fcd8 100644 --- a/trunk/kernel/module.c +++ b/trunk/kernel/module.c @@ -904,6 +904,36 @@ static ssize_t show_refcnt(struct module_attribute *mattr, static struct module_attribute modinfo_refcnt = __ATTR(refcnt, 0444, show_refcnt, NULL); +void __module_get(struct module *module) +{ + if (module) { + preempt_disable(); + __this_cpu_inc(module->refptr->incs); + trace_module_get(module, _RET_IP_); + preempt_enable(); + } +} +EXPORT_SYMBOL(__module_get); + +bool try_module_get(struct module *module) +{ + bool ret = true; + + if (module) { + preempt_disable(); + + if (likely(module_is_live(module))) { + __this_cpu_inc(module->refptr->incs); + trace_module_get(module, _RET_IP_); + } else + ret = false; + + preempt_enable(); + } + return ret; +} +EXPORT_SYMBOL(try_module_get); + void module_put(struct module *module) { if (module) {