Re: [PATCH] tracing: Defer trigger private data frees past the grace period
From: Steven Rostedt <rostedt@goodmis.org>
Date: 2026-07-23 16:02:23
Also in:
lkml
Subsystem:
the rest, tracing · Maintainers:
Linus Torvalds, Steven Rostedt, Masami Hiramatsu
On Sun, 12 Jul 2026 17:10:06 +0100 David Carlier [off-list ref] wrote:
quoted hunk ↗ jump to hunk
diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c index 82ce492ab268..bc696e4bd695 100644 --- a/kernel/trace/trace_events_hist.c +++ b/kernel/trace/trace_events_hist.c@@ -6335,6 +6335,16 @@ static void unregister_field_var_hists(struct hist_trigger_data *hist_data) } } +static void hist_trigger_free_private(struct event_trigger_data *data) +{ + destroy_hist_data(data->private_data); +} + +static void hist_trigger_named_free_private(struct event_trigger_data *data) +{ + kfree(data->cmd_ops); +} +
This triggered lockdep: [ 785.093618] ------------[ cut here ]------------ [ 785.097043] WARNING: kernel/trace/trace_events_hist.c:3597 at action_data_des troy+0x74/0x80, CPU#3: trigger_data_fr/10557 [ 785.104157] Modules linked in: [last unloaded: trace_printk] [ 785.108151] CPU: 3 UID: 0 PID: 10557 Comm: trigger_data_fr Tainted: G W 7.2.0-rc4-ftest-00009-g22f7a9d07cb0 #174 PREEMPT(lazy) [ 785.116393] Tainted: [W]=WARN [ 785.118863] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.17.0-debian-1.17.0-1 04/01/2014 [ 785.127417] RIP: 0010:action_data_destroy+0x74/0x80 [ 785.130947] Code: 8b bd 30 03 00 00 e8 bb f2 1d 00 48 89 ef 5b 5d e9 b1 f2 1d 00 be ff ff ff ff 48 c7 c7 60 75 7f 83 e8 d0 4d e9 00 85 c0 75 a0 <0f> 0b eb 9c 0f 1f 84 00 00 00 00 00 90 90 90 90 90 90 90 90 90 90 [ 785.142648] RSP: 0018:ffffc90002803e78 EFLAGS: 00010246 [ 785.146271] RAX: 0000000000000000 RBX: ffff88811837e800 RCX: 0000000000000000 [ 785.150595] RDX: 0000000000000000 RSI: ffffffff82d24bb2 RDI: ffffffff82d5aacb [ 785.156356] RBP: ffff88812bc8d400 R08: 0000000000000001 R09: 0000000000000000 [ 785.160229] R10: 0000000000000003 R11: ffff88811e290f60 R12: ffff88812bc8d400 [ 785.164090] R13: ffff88811e290000 R14: ffffffff815f1630 R15: 0000000000000000 [ 785.167949] FS: 0000000000000000(0000) GS:ffff8882f9727000(0000) knlGS:0000000000000000 [ 785.172381] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 785.175483] CR2: 00007f02ef65341c CR3: 000000000366a001 CR4: 0000000000172ef0 [ 785.179019] Call Trace: [ 785.180523] <TASK> [ 785.181881] destroy_hist_data+0x24f/0x260 [ 785.185686] trigger_kthread_fn+0x87/0xc0 [ 785.187762] ? __pfx_trigger_kthread_fn+0x10/0x10 [ 785.190099] kthread+0xf5/0x130 [ 785.191807] ? __pfx_kthread+0x10/0x10 [ 785.193752] ret_from_fork+0x336/0x470 [ 785.195716] ? __pfx_kthread+0x10/0x10 [ 785.197654] ret_from_fork_asm+0x1a/0x30 [ 785.199694] </TASK> [ 785.201037] irq event stamp: 3815 [ 785.202762] hardirqs last enabled at (3827): [<ffffffff814be4ee>] __up_console_sem+0x5e/0x70 [ 785.206442] hardirqs last disabled at (3838): [<ffffffff814be4d3>] __up_console_sem+0x43/0x70 [ 785.209954] softirqs last enabled at (3476): [<ffffffff8141115d>] handle_softirqs+0x35d/0x430 [ 785.213524] softirqs last disabled at (3471): [<ffffffff81411346>] __irq_exit_rcu+0x106/0x1a0 [ 785.218790] ---[ end trace 0000000000000000 ]--- Can you fold this into your patch:
diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c
index bc696e4bd695..1f438de90d09 100644
--- a/kernel/trace/trace_events_hist.c
+++ b/kernel/trace/trace_events_hist.c@@ -6337,6 +6337,7 @@ static void unregister_field_var_hists(struct hist_trigger_data *hist_data) static void hist_trigger_free_private(struct event_trigger_data *data) { + guard(mutex)(&event_mutex); destroy_hist_data(data->private_data); } -- Steve