#include <test_progs.h>
#include <sys/syscall.h>
#include "test_ctx.skel.h"
void test_exe_ctx(void)
{
LIBBPF_OPTS(bpf_test_run_opts, opts);
cpu_set_t old_cpuset, target_cpuset;
struct test_ctx *skel;
int err, prog_fd;
if (sched_getaffinity(0, sizeof(old_cpuset), &old_cpuset) == 0) {
CPU_ZERO(&target_cpuset);
CPU_SET(0, &target_cpuset);
ASSERT_OK(sched_setaffinity(0, sizeof(target_cpuset),
&target_cpuset), "setaffinity");
}
skel = test_ctx__open_and_load();
if (!ASSERT_OK_PTR(skel, "skel_load"))
goto restore_affinity;
err = test_ctx__attach(skel);
if (!ASSERT_OK(err, "skel_attach"))
goto cleanup;
prog_fd = bpf_program__fd(skel->progs.trigger_all_contexts);
err = bpf_prog_test_run_opts(prog_fd, &opts);
ASSERT_OK(err, "test_run_trigger");
for (int i = 0; i < 1000; i++) {
if (skel->bss->count_task > 0 &&
skel->bss->count_hardirq > 0 &&
skel->bss->count_softirq > 0)
break;
usleep(1000);
}
ASSERT_GT(skel->bss->count_task, 0, "task_ok");
ASSERT_GT(skel->bss->count_hardirq, 0, "hardirq_ok");
ASSERT_GT(skel->bss->count_softirq, 0, "softirq_ok");
cleanup:
test_ctx__destroy(skel);
restore_affinity:
ASSERT_OK(sched_setaffinity(0, sizeof(old_cpuset), &old_cpuset),
"restore_affinity");
}