diff options
Diffstat (limited to 'kernel/module.c')
| -rw-r--r-- | kernel/module.c | 30 | 
1 files changed, 30 insertions, 0 deletions
diff --git a/kernel/module.c b/kernel/module.c index 6f6651a5459..294692d8fcd 100644 --- a/kernel/module.c +++ b/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) {  |