Skip to content

Commit 10653c0

Browse files
mykyta5anakryiko
authored andcommitted
selftests/bpf: Refactor timer selftests
Refactor timer selftests, extracting stress test into a separate test. This makes it easier to debug test failures and allows to extend. Signed-off-by: Mykyta Yatsenko <yatsenko@meta.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Link: https://lore.kernel.org/bpf/20260201025403.66625-5-alexei.starovoitov@gmail.com
1 parent a7e172a commit 10653c0

1 file changed

Lines changed: 36 additions & 19 deletions

File tree

  • tools/testing/selftests/bpf/prog_tests

tools/testing/selftests/bpf/prog_tests/timer.c

Lines changed: 36 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,35 @@ static void *spin_lock_thread(void *arg)
2222
pthread_exit(arg);
2323
}
2424

25-
static int timer(struct timer *timer_skel)
25+
26+
static int timer_stress(struct timer *timer_skel)
2627
{
27-
int i, err, prog_fd;
28+
int i, err = 1, prog_fd;
2829
LIBBPF_OPTS(bpf_test_run_opts, topts);
2930
pthread_t thread_id[NUM_THR];
3031
void *ret;
3132

33+
prog_fd = bpf_program__fd(timer_skel->progs.race);
34+
for (i = 0; i < NUM_THR; i++) {
35+
err = pthread_create(&thread_id[i], NULL,
36+
&spin_lock_thread, &prog_fd);
37+
if (!ASSERT_OK(err, "pthread_create"))
38+
break;
39+
}
40+
41+
while (i) {
42+
err = pthread_join(thread_id[--i], &ret);
43+
if (ASSERT_OK(err, "pthread_join"))
44+
ASSERT_EQ(ret, (void *)&prog_fd, "pthread_join");
45+
}
46+
return err;
47+
}
48+
49+
static int timer(struct timer *timer_skel)
50+
{
51+
int err, prog_fd;
52+
LIBBPF_OPTS(bpf_test_run_opts, topts);
53+
3254
err = timer__attach(timer_skel);
3355
if (!ASSERT_OK(err, "timer_attach"))
3456
return err;
@@ -63,25 +85,10 @@ static int timer(struct timer *timer_skel)
6385
/* check that code paths completed */
6486
ASSERT_EQ(timer_skel->bss->ok, 1 | 2 | 4, "ok");
6587

66-
prog_fd = bpf_program__fd(timer_skel->progs.race);
67-
for (i = 0; i < NUM_THR; i++) {
68-
err = pthread_create(&thread_id[i], NULL,
69-
&spin_lock_thread, &prog_fd);
70-
if (!ASSERT_OK(err, "pthread_create"))
71-
break;
72-
}
73-
74-
while (i) {
75-
err = pthread_join(thread_id[--i], &ret);
76-
if (ASSERT_OK(err, "pthread_join"))
77-
ASSERT_EQ(ret, (void *)&prog_fd, "pthread_join");
78-
}
79-
8088
return 0;
8189
}
8290

83-
/* TODO: use pid filtering */
84-
void serial_test_timer(void)
91+
static void test_timer(int (*timer_test_fn)(struct timer *timer_skel))
8592
{
8693
struct timer *timer_skel = NULL;
8794
int err;
@@ -94,13 +101,23 @@ void serial_test_timer(void)
94101
if (!ASSERT_OK_PTR(timer_skel, "timer_skel_load"))
95102
return;
96103

97-
err = timer(timer_skel);
104+
err = timer_test_fn(timer_skel);
98105
ASSERT_OK(err, "timer");
99106
timer__destroy(timer_skel);
107+
}
108+
109+
void serial_test_timer(void)
110+
{
111+
test_timer(timer);
100112

101113
RUN_TESTS(timer_failure);
102114
}
103115

116+
void serial_test_timer_stress(void)
117+
{
118+
test_timer(timer_stress);
119+
}
120+
104121
void test_timer_interrupt(void)
105122
{
106123
struct timer_interrupt *skel = NULL;

0 commit comments

Comments
 (0)