Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 169424
b: refs/heads/master
c: 2d5e067
h: refs/heads/master
v: v3
  • Loading branch information
Masami Hiramatsu authored and Frederic Weisbecker committed Sep 17, 2009
1 parent a2042a5 commit 57084c5
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 24 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: f52487e9c0041842eeb77c6c48774414b1cede08
refs/heads/master: 2d5e067edc4635ff7515bfa9ab3edb38bc344cab
42 changes: 19 additions & 23 deletions trunk/kernel/trace/trace_kprobe.c
Original file line number Diff line number Diff line change
Expand Up @@ -347,20 +347,15 @@ static struct trace_probe *find_probe_event(const char *event)
return NULL;
}

static void __unregister_trace_probe(struct trace_probe *tp)
/* Unregister a trace_probe and probe_event: call with locking probe_lock */
static void unregister_trace_probe(struct trace_probe *tp)
{
if (probe_is_return(tp))
unregister_kretprobe(&tp->rp);
else
unregister_kprobe(&tp->rp.kp);
}

/* Unregister a trace_probe and probe_event: call with locking probe_lock */
static void unregister_trace_probe(struct trace_probe *tp)
{
unregister_probe_event(tp);
__unregister_trace_probe(tp);
list_del(&tp->list);
unregister_probe_event(tp);
}

/* Register a trace_probe and probe_event */
Expand All @@ -371,6 +366,19 @@ static int register_trace_probe(struct trace_probe *tp)

mutex_lock(&probe_lock);

/* register as an event */
old_tp = find_probe_event(tp->call.name);
if (old_tp) {
/* delete old event */
unregister_trace_probe(old_tp);
free_trace_probe(old_tp);
}
ret = register_probe_event(tp);
if (ret) {
pr_warning("Faild to register probe event(%d)\n", ret);
goto end;
}

if (probe_is_return(tp))
ret = register_kretprobe(&tp->rp);
else
Expand All @@ -384,21 +392,9 @@ static int register_trace_probe(struct trace_probe *tp)
tp->rp.kp.addr);
ret = -EINVAL;
}
goto end;
}
/* register as an event */
old_tp = find_probe_event(tp->call.name);
if (old_tp) {
/* delete old event */
unregister_trace_probe(old_tp);
free_trace_probe(old_tp);
}
ret = register_probe_event(tp);
if (ret) {
pr_warning("Faild to register probe event(%d)\n", ret);
__unregister_trace_probe(tp);
}
list_add_tail(&tp->list, &probe_list);
unregister_probe_event(tp);
} else
list_add_tail(&tp->list, &probe_list);
end:
mutex_unlock(&probe_lock);
return ret;
Expand Down

0 comments on commit 57084c5

Please sign in to comment.