From: Ingo Molnar Date: Thu, 8 Apr 2010 07:06:12 +0000 (+0200) Subject: Merge branch 'linus' into tracing/core X-Git-Tag: v2.6.35-rc1~520^2~17 X-Git-Url: http://ftp.safe.ca/?p=safe%2Fjmp%2Flinux-2.6;a=commitdiff_plain;h=c1ab9cab75098924fa8226a8a371de66977439df Merge branch 'linus' into tracing/core Conflicts: include/linux/module.h kernel/module.c Semantic conflict: include/trace/events/module.h Merge reason: Resolve the conflict with upstream commit 5fbfb18 ("Fix up possibly racy module refcounting") Signed-off-by: Ingo Molnar --- c1ab9cab75098924fa8226a8a371de66977439df diff --cc include/linux/module.h index 393ec39,515d53a..6914fca --- a/include/linux/module.h +++ b/include/linux/module.h @@@ -459,8 -464,9 +464,8 @@@ static inline void __module_get(struct { if (module) { preempt_disable(); - __this_cpu_inc(module->refptr->count); + __this_cpu_inc(module->refptr->incs); - trace_module_get(module, _THIS_IP_, - __this_cpu_read(module->refptr->incs)); + trace_module_get(module, _THIS_IP_); preempt_enable(); } } @@@ -473,10 -479,10 +478,9 @@@ static inline int try_module_get(struc preempt_disable(); if (likely(module_is_live(module))) { - __this_cpu_inc(module->refptr->count); + __this_cpu_inc(module->refptr->incs); - trace_module_get(module, _THIS_IP_, - __this_cpu_read(module->refptr->incs)); + trace_module_get(module, _THIS_IP_); - } - else + } else ret = 0; preempt_enable(); diff --cc include/trace/events/module.h index f07b44a,4b0f48b..c7bb2f0 --- a/include/trace/events/module.h +++ b/include/trace/events/module.h @@@ -68,7 -65,7 +68,7 @@@ DECLARE_EVENT_CLASS(module_refcnt TP_fast_assign( __entry->ip = ip; - __entry->refcnt = __this_cpu_read(mod->refptr->count); - __entry->refcnt = refcnt; ++ __entry->refcnt = __this_cpu_read(mod->refptr->incs) + __this_cpu_read(mod->refptr->decs); __assign_str(name, mod->name); ), diff --cc kernel/module.c index d9e2379,1016b75..b8a1e31 --- a/kernel/module.c +++ b/kernel/module.c @@@ -799,9 -864,11 +865,10 @@@ void module_put(struct module *module { if (module) { preempt_disable(); - __this_cpu_dec(module->refptr->count); + smp_wmb(); /* see comment in module_refcount */ + __this_cpu_inc(module->refptr->decs); - trace_module_put(module, _RET_IP_, - __this_cpu_read(module->refptr->decs)); + trace_module_put(module, _RET_IP_); /* Maybe they're waiting for us to drop reference? */ if (unlikely(!module_is_live(module))) wake_up_process(module->waiter);