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

Reply via email to