Commit 4a0c9b33 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'probes-fixes-v6.18-rc4' of...

Merge tag 'probes-fixes-v6.18-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace

Pull probe fixes from Masami Hiramatsu:

 - tprobe-events: Fix to register tracepoint correctly

   tprobe-events missed to set tracepoint data structure before
   registering callback when enabling it. This sets it correctly.

 - tprobe-events: Fix to put tracepoint_user when disable the event

   tprobe-events missed to unregister tracepoint callback when the event
   is disabled. This ensures to unregister it.

* tag 'probes-fixes-v6.18-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace:
  tracing: tprobe-events: Fix to put tracepoint_user when disable the tprobe
  tracing: tprobe-events: Fix to register tracepoint correctly
parents f5f2e20b c91afa76
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -106,13 +106,14 @@ static struct tracepoint_user *__tracepoint_user_init(const char *name, struct t
	if (!tuser->name)
		return NULL;

	/* Register tracepoint if it is loaded. */
	if (tpoint) {
		tuser->tpoint = tpoint;
		ret = tracepoint_user_register(tuser);
		if (ret)
			return ERR_PTR(ret);
	}

	tuser->tpoint = tpoint;
	tuser->refcount = 1;
	INIT_LIST_HEAD(&tuser->list);
	list_add(&tuser->list, &tracepoint_user_list);
@@ -1513,6 +1514,10 @@ static int disable_trace_fprobe(struct trace_event_call *call,
	if (!trace_probe_is_enabled(tp)) {
		list_for_each_entry(tf, trace_probe_probe_list(tp), tp.list) {
			unregister_fprobe(&tf->fp);
			if (tf->tuser) {
				tracepoint_user_put(tf->tuser);
				tf->tuser = NULL;
			}
		}
	}