Re: [PATCH v2] tracefs: Add tests for clearing kprobes with tracefs_dynevent_destroy_all()
Metin Kaya <[email protected]> Mon, 27 Apr 2026 09:33:44 +0100
| Newsgroups | org.kernel.vger.linux-trace-devel |
|---|---|
| Message-ID | <[email protected]> |
On 24/04/2026 7:48 pm, Steven Rostedt wrote: > From: Steven Rostedt <[email protected]> > > There was a regression with the use of tracefs_dynevent_destroy_all() where > it wasn't resetting kprobe events. Add testing of that function in the utest > for kprobe events. > > Link: https://bugzilla.kernel.org/show_bug.cgi?id=221395 > Signed-off-by: Steven Rostedt <[email protected]> > --- > Changes since v1: https://lore.kernel.org/[email protected] > > - Remove leftover debugging (had kprobe test first followed by a return). > (Metin Kaya) > > utest/tracefs-utest.c | 23 +++++++++++++++++++++++ > 1 file changed, 23 insertions(+) > > diff --git a/utest/tracefs-utest.c b/utest/tracefs-utest.c > index 97a91dfcdb2c..e3ff2151796b 100644 > --- a/utest/tracefs-utest.c > +++ b/utest/tracefs-utest.c > @@ -2330,6 +2330,7 @@ static void test_kprobes_instance(struct tracefs_instance *instance) > /* kprobes APIs */ > destroy_dynevents(TRACEFS_DYNEVENT_KPROBE | TRACEFS_DYNEVENT_KRETPROBE); > > + /* Allocate first */ > for (i = 0; i < kprobe_count; i++) { > dkprobe[i] = tracefs_kprobe_alloc(ktests[i].system, ktests[i].event, > ktests[i].address, ktests[i].format); > @@ -2348,6 +2349,7 @@ static void test_kprobes_instance(struct tracefs_instance *instance) > get_dynevents_check(TRACEFS_DYNEVENT_KPROBE | TRACEFS_DYNEVENT_KRETPROBE, 0); > CU_TEST(check_probes(kretests, kretprobe_count, dkretprobe, false, instance, tep)); > > + /* Create the kprobes */ > for (i = 0; i < kprobe_count; i++) { > CU_TEST(tracefs_dynevent_create(dkprobe[i]) == 0); > } > @@ -2387,6 +2389,27 @@ static void test_kprobes_instance(struct tracefs_instance *instance) > tracefs_dynevent_list_free(devents); > devents = NULL; > > + /* Recreate both types, and destroy with tracefs_dynevent_destroy_all() */ > + for (i = 0; i < kretprobe_count; i++) { > + CU_TEST(tracefs_dynevent_create(dkretprobe[i]) == 0); > + } > + for (i = 0; i < kprobe_count; i++) { > + CU_TEST(tracefs_dynevent_create(dkprobe[i]) == 0); > + } > + devents = get_dynevents_check(TRACEFS_DYNEVENT_KPROBE | TRACEFS_DYNEVENT_KRETPROBE, > + kprobe_count + kretprobe_count); > + CU_TEST(check_probes(ktests, kprobe_count, devents, true, instance, tep)); > + CU_TEST(check_probes(kretests, kretprobe_count, dkretprobe, true, instance, tep)); > + tracefs_dynevent_list_free(devents); > + devents = NULL; > + > + CU_TEST(tracefs_dynevent_destroy_all(TRACEFS_DYNEVENT_ALL, true) == 0); > + > + get_dynevents_check(TRACEFS_DYNEVENT_KPROBE | TRACEFS_DYNEVENT_KRETPROBE, 0); > + CU_TEST(check_probes(ktests, kprobe_count, dkprobe, false, instance, tep)); > + CU_TEST(check_probes(kretests, kretprobe_count, dkretprobe, false, instance, tep)) > + > + /* Free the dynamic events */ > for (i = 0; i < kprobe_count; i++) > tracefs_dynevent_free(dkprobe[i]); > for (i = 0; i < kretprobe_count; i++) `utest/trace-utest` output looks good to me: ``` Suite: tracefs library Test: Test tracefs/debugfs mounting ...passed Test: trace cpu read ...passed ... Test: Follow events clear ...passed Test: tracefs_tracers API ...passed Test: tracefs_local events API ...passed Test: tracefs_instances_walk API ...passed Test: tracefs_get_clock API ...passed Test: tracing on / off ...passed Test: tracing options ...passed Test: custom system directory ...passed Test: ftrace marker ...passed Test: kprobes ...passed Test: synthetic events ...passed Test: eprobes ...passed Test: uprobes ...passed Test: multi probe test ...passed Run Summary: Type Total Ran Passed Failed Inactive suites 1 1 n/a 0 0 tests 37 37 37 0 0 asserts 29270699 29270699 29270699 0 n/a Elapsed time = 158.795 seconds ``` Tested-by: Metin Kaya <[email protected]> Thanks,