module: Remove preempt_disable() from module reference counting.
The preempt_disable() section in module_put() was added in commite1783a240f
("module: Use this_cpu_xx to dynamically allocate counters") while the per-CPU counter were switched to another API. The API requires that during the RMW operation the CPU remained the same. This counting API was later replaced with atomic_t in commit2f35c41f58
("module: Replace module_ref with atomic_t refcnt") Since this atomic_t replacement there is no need to keep preemption disabled while the reference counter is modified. Remove preempt_disable() from module_put(), __module_get() and try_module_get(). Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
This commit is contained in:
Родитель
d36f6efbe0
Коммит
cb0b50b813
|
@ -820,10 +820,8 @@ static struct module_attribute modinfo_refcnt =
|
||||||
void __module_get(struct module *module)
|
void __module_get(struct module *module)
|
||||||
{
|
{
|
||||||
if (module) {
|
if (module) {
|
||||||
preempt_disable();
|
|
||||||
atomic_inc(&module->refcnt);
|
atomic_inc(&module->refcnt);
|
||||||
trace_module_get(module, _RET_IP_);
|
trace_module_get(module, _RET_IP_);
|
||||||
preempt_enable();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(__module_get);
|
EXPORT_SYMBOL(__module_get);
|
||||||
|
@ -833,15 +831,12 @@ bool try_module_get(struct module *module)
|
||||||
bool ret = true;
|
bool ret = true;
|
||||||
|
|
||||||
if (module) {
|
if (module) {
|
||||||
preempt_disable();
|
|
||||||
/* Note: here, we can fail to get a reference */
|
/* Note: here, we can fail to get a reference */
|
||||||
if (likely(module_is_live(module) &&
|
if (likely(module_is_live(module) &&
|
||||||
atomic_inc_not_zero(&module->refcnt) != 0))
|
atomic_inc_not_zero(&module->refcnt) != 0))
|
||||||
trace_module_get(module, _RET_IP_);
|
trace_module_get(module, _RET_IP_);
|
||||||
else
|
else
|
||||||
ret = false;
|
ret = false;
|
||||||
|
|
||||||
preempt_enable();
|
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -852,11 +847,9 @@ void module_put(struct module *module)
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (module) {
|
if (module) {
|
||||||
preempt_disable();
|
|
||||||
ret = atomic_dec_if_positive(&module->refcnt);
|
ret = atomic_dec_if_positive(&module->refcnt);
|
||||||
WARN_ON(ret < 0); /* Failed to put refcount */
|
WARN_ON(ret < 0); /* Failed to put refcount */
|
||||||
trace_module_put(module, _RET_IP_);
|
trace_module_put(module, _RET_IP_);
|
||||||
preempt_enable();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(module_put);
|
EXPORT_SYMBOL(module_put);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче