|
@@ -893,6 +893,9 @@ probe_event_enable(struct trace_uprobe *tu, struct ftrace_event_file *file,
|
|
|
int ret;
|
|
|
|
|
|
if (file) {
|
|
|
+ if (tu->tp.flags & TP_FLAG_PROFILE)
|
|
|
+ return -EINTR;
|
|
|
+
|
|
|
link = kmalloc(sizeof(*link), GFP_KERNEL);
|
|
|
if (!link)
|
|
|
return -ENOMEM;
|
|
@@ -901,8 +904,12 @@ probe_event_enable(struct trace_uprobe *tu, struct ftrace_event_file *file,
|
|
|
list_add_tail_rcu(&link->list, &tu->tp.files);
|
|
|
|
|
|
tu->tp.flags |= TP_FLAG_TRACE;
|
|
|
- } else
|
|
|
+ } else {
|
|
|
+ if (tu->tp.flags & TP_FLAG_TRACE)
|
|
|
+ return -EINTR;
|
|
|
+
|
|
|
tu->tp.flags |= TP_FLAG_PROFILE;
|
|
|
+ }
|
|
|
|
|
|
ret = uprobe_buffer_enable();
|
|
|
if (ret < 0)
|