On Sun, 12 Jul 2026 17:10:06 +0100
David Carlier <[email protected]> wrote:
> 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