Probes fixes for v6.18-rc4

- 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.
 -----BEGIN PGP SIGNATURE-----
 
 iQFPBAABCgA5FiEEh7BulGwFlgAOi5DV2/sHvwUrPxsFAmkNMDwbHG1hc2FtaS5o
 aXJhbWF0c3VAZ21haWwuY29tAAoJENv7B78FKz8bqMoH/i/hGqn3fM9y2MfoL7Fm
 bPaK6tuRjypbifRSTxmelBUE6cvKcW36JrfDnxTyCfUGP8ye5NXtexwojFMUZoOH
 DuU0g+uizywcgO2SknEiAIyh0QnoJyfj+vh/d9rcGUGai0Tf2gswPuVg3NHEq6Uq
 3397uR3dBC8D0DY1qzEWyfqPGlfdNmh5i8cFaZoIlXa3Tk+RfMyJo4T66eshtdnf
 S7Lg33wiociPrSAssPlSXau9y5BEwfHY7uArKbLx6fI8D+fS6BqJMNUc6uYnWfOe
 UtiXw8NE+G5h5YtLh2ryAdnodHaiA+SQ6rZFFKg7mqIVNWJSSczvjwy501pD9UbE
 kVE=
 =K+uv
 -----END PGP SIGNATURE-----

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
This commit is contained in:
Linus Torvalds 2025-11-06 16:24:12 -08:00
commit 4a0c9b3391
1 changed files with 6 additions and 1 deletions

View File

@ -106,13 +106,14 @@ static struct tracepoint_user *__tracepoint_user_init(const char *name, struct t
if (!tuser->name) if (!tuser->name)
return NULL; return NULL;
/* Register tracepoint if it is loaded. */
if (tpoint) { if (tpoint) {
tuser->tpoint = tpoint;
ret = tracepoint_user_register(tuser); ret = tracepoint_user_register(tuser);
if (ret) if (ret)
return ERR_PTR(ret); return ERR_PTR(ret);
} }
tuser->tpoint = tpoint;
tuser->refcount = 1; tuser->refcount = 1;
INIT_LIST_HEAD(&tuser->list); INIT_LIST_HEAD(&tuser->list);
list_add(&tuser->list, &tracepoint_user_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)) { if (!trace_probe_is_enabled(tp)) {
list_for_each_entry(tf, trace_probe_probe_list(tp), tp.list) { list_for_each_entry(tf, trace_probe_probe_list(tp), tp.list) {
unregister_fprobe(&tf->fp); unregister_fprobe(&tf->fp);
if (tf->tuser) {
tracepoint_user_put(tf->tuser);
tf->tuser = NULL;
}
} }
} }