Commit d02fdd71 authored by Mykyta Yatsenko's avatar Mykyta Yatsenko Committed by Andrii Nakryiko
Browse files

selftests/bpf: Add stress test for timer async cancel



Extend BPF timer selftest to run stress test for async cancel.

Signed-off-by: default avatarMykyta Yatsenko <yatsenko@meta.com>
Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20260201025403.66625-6-alexei.starovoitov@gmail.com
parent 10653c0d
Loading
Loading
Loading
Loading
+17 −1
Original line number Diff line number Diff line
@@ -23,13 +23,14 @@ static void *spin_lock_thread(void *arg)
}


static int timer_stress(struct timer *timer_skel)
static int timer_stress_runner(struct timer *timer_skel, bool async_cancel)
{
	int i, err = 1, prog_fd;
	LIBBPF_OPTS(bpf_test_run_opts, topts);
	pthread_t thread_id[NUM_THR];
	void *ret;

	timer_skel->bss->async_cancel = async_cancel;
	prog_fd = bpf_program__fd(timer_skel->progs.race);
	for (i = 0; i < NUM_THR; i++) {
		err = pthread_create(&thread_id[i], NULL,
@@ -46,6 +47,16 @@ static int timer_stress(struct timer *timer_skel)
	return err;
}

static int timer_stress(struct timer *timer_skel)
{
	return timer_stress_runner(timer_skel, false);
}

static int timer_stress_async_cancel(struct timer *timer_skel)
{
	return timer_stress_runner(timer_skel, true);
}

static int timer(struct timer *timer_skel)
{
	int err, prog_fd;
@@ -118,6 +129,11 @@ void serial_test_timer_stress(void)
	test_timer(timer_stress);
}

void serial_test_timer_stress_async_cancel(void)
{
	test_timer(timer_stress_async_cancel);
}

void test_timer_interrupt(void)
{
	struct timer_interrupt *skel = NULL;
+11 −3
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0
/* Copyright (c) 2021 Facebook */
#include <linux/bpf.h>
#include <time.h>

#include <vmlinux.h>
#include <stdbool.h>
#include <errno.h>
#include <bpf/bpf_helpers.h>
#include <bpf/bpf_tracing.h>

#define CLOCK_MONOTONIC 1
#define CLOCK_BOOTTIME 7

char _license[] SEC("license") = "GPL";

struct hmap_elem {
	int counter;
	struct bpf_timer timer;
@@ -63,6 +67,7 @@ __u64 callback_check = 52;
__u64 callback2_check = 52;
__u64 pinned_callback_check;
__s32 pinned_cpu;
bool async_cancel = 0;

#define ARRAY 1
#define HTAB 2
@@ -419,6 +424,9 @@ int race(void *ctx)

	bpf_timer_set_callback(timer, race_timer_callback);
	bpf_timer_start(timer, 0, 0);
	if (async_cancel)
		bpf_timer_cancel_async(timer);
	else
		bpf_timer_cancel(timer);

	return 0;