diff options
author | Lai Jiangshan <laijs@cn.fujitsu.com> | 2008-09-29 16:00:05 +0800 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-10-14 10:38:19 +0200 |
commit | d74185ed27651ad8d920b37d7851306ad01f7d6f (patch) | |
tree | d3eab74f08808e9596641cd2dcc66f02df060705 /kernel/tracepoint.c | |
parent | ac2b86fdef5b44f194eefaa6b7b6aea9423d1bc2 (diff) | |
download | op-kernel-dev-d74185ed27651ad8d920b37d7851306ad01f7d6f.zip op-kernel-dev-d74185ed27651ad8d920b37d7851306ad01f7d6f.tar.gz |
markers: fix unregister bug and reenter bug
unregister bug:
codes using makers are typically calling marker_probe_unregister()
and then destroying the data that marker_probe_func needs(or
unloading this module). This is bug when the corresponding
marker_probe_func is still running(on other cpus),
it is using the destroying/ed data.
we should call synchronize_sched() after marker_update_probes().
reenter bug:
marker_probe_register(), marker_probe_unregister() and
marker_probe_unregister_private_data() are not reentrant safe
functions. these 3 functions release markers_mutex and then
require it again and do "entry->oldptr = old; ...", but entry->oldptr
maybe is using now for these 3 functions may reenter when markers_mutex
is released.
we use synchronize_sched() instead of call_rcu_sched() to fix
this bug. actually we can do:
"
if (entry->rcu_pending)
rcu_barrier_sched();
"
after require markers_mutex again. but synchronize_sched()
is better and simpler. For these 3 functions are not critical path.
Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
Cc: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/tracepoint.c')
0 files changed, 0 insertions, 0 deletions