Hi Masami,
I reran this in clean QEMU on two kernels and got different results.
1. Ubuntu distro kernel:
Linux 6.8.0-100-generic #100-Ubuntu SMP PREEMPT_DYNAMIC
Tue Jan 13 16:40:06 UTC 2026
baseline count=2
after_create123 count=4
after_enable1/2/3 count=4
baseline enabled_functions:
__hid_bpf_tail_call ...
after_create123 enabled_functions:
kernel_clone (2) R ->arch_ftrace_ops_list_func+0x0/0x280
kmem_cache_free (1) R tramp: ... ->fprobe_handler+0x0/0x40
__hid_bpf_tail_call ...
2. Current source-tree kernel built from the clean snapshot of my patch
branch:
Linux 7.0.0-rc6 #2 SMP PREEMPT_DYNAMIC Fri Apr 10 12:19:39 CST 2026
baseline count=0
after_create123 count=0
after_enable1 count=1
after_enable2 count=1
after_enable3 count=2
after_create123 enabled_functions:
<empty>
after_enable3 enabled_functions:
kernel_clone (2) ->arch_ftrace_ops_list_func+0x0/0x200
kmem_cache_free (1) tramp: ... ->fprobe_ftrace_entry+0x0/0x220
So the behavior I reported earlier reproduces on that Ubuntu 6.8 kernel,
but not on the current source-tree kernel. I think my earlier conclusion
was too broad.
I will stop pushing this testcase change for now unless I can narrow down
which kernel change caused the difference.
Thanks,
Cao Ruichuang