Message ID | 20230509134902.yQ-EWRpI@linutronix.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | module: Remove preempt_disable() from module reference counting. | expand |
On Tue, May 09, 2023 at 03:49:02PM +0200, Sebastian Andrzej Siewior wrote: > The preempt_disable() section in module_put() was added in commit > e1783a240f491 ("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 commit > 2f35c41f58a97 ("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> Thanks! Queued up onto modules-next. Luis
diff --git a/kernel/module/main.c b/kernel/module/main.c index 044aa2c9e3cb0..ea7d0c7f3e60d 100644 --- a/kernel/module/main.c +++ b/kernel/module/main.c @@ -820,10 +820,8 @@ static struct module_attribute modinfo_refcnt = void __module_get(struct module *module) { if (module) { - preempt_disable(); atomic_inc(&module->refcnt); trace_module_get(module, _RET_IP_); - preempt_enable(); } } EXPORT_SYMBOL(__module_get); @@ -833,15 +831,12 @@ bool try_module_get(struct module *module) bool ret = true; if (module) { - preempt_disable(); /* Note: here, we can fail to get a reference */ if (likely(module_is_live(module) && atomic_inc_not_zero(&module->refcnt) != 0)) trace_module_get(module, _RET_IP_); else ret = false; - - preempt_enable(); } return ret; } @@ -852,11 +847,9 @@ void module_put(struct module *module) int ret; if (module) { - preempt_disable(); ret = atomic_dec_if_positive(&module->refcnt); WARN_ON(ret < 0); /* Failed to put refcount */ trace_module_put(module, _RET_IP_); - preempt_enable(); } } EXPORT_SYMBOL(module_put);
The preempt_disable() section in module_put() was added in commit e1783a240f491 ("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 commit 2f35c41f58a97 ("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> --- kernel/module/main.c | 7 ------- 1 file changed, 7 deletions(-)