FILE
exit.c
File preview with syntax highlighting.
linux-6.19.14/tools/testing/selftests/sched_ext/exit.c
1/* SPDX-License-Identifier: GPL-2.0 */ 2/* 3 * Copyright (c) 2024 Meta Platforms, Inc. and affiliates. 4 * Copyright (c) 2024 David Vernet <dvernet@meta.com> 5 */ 6#include <bpf/bpf.h> 7#include <sched.h> 8#include <scx/common.h> 9#include <sys/wait.h> 10#include <unistd.h> 11#include "exit.bpf.skel.h" 12#include "scx_test.h" 13 14#include "exit_test.h" 15 16static enum scx_test_status run(void *ctx) 17{ 18 enum exit_test_case tc; 19 20 for (tc = 0; tc < NUM_EXITS; tc++) { 21 struct exit *skel; 22 struct bpf_link *link; 23 char buf[16]; 24 25 /* 26 * On single-CPU systems, ops.select_cpu() is never 27 * invoked, so skip this test to avoid getting stuck 28 * indefinitely. 29 */ 30 if (tc == EXIT_SELECT_CPU && libbpf_num_possible_cpus() == 1) 31 continue; 32 33 skel = exit__open(); 34 SCX_ENUM_INIT(skel); 35 skel->rodata->exit_point = tc; 36 exit__load(skel); 37 link = bpf_map__attach_struct_ops(skel->maps.exit_ops); 38 if (!link) { 39 SCX_ERR("Failed to attach scheduler"); 40 exit__destroy(skel); 41 return SCX_TEST_FAIL; 42 } 43 44 /* Assumes uei.kind is written last */ 45 while (skel->data->uei.kind == EXIT_KIND(SCX_EXIT_NONE)) 46 sched_yield(); 47 48 SCX_EQ(skel->data->uei.kind, EXIT_KIND(SCX_EXIT_UNREG_BPF)); 49 SCX_EQ(skel->data->uei.exit_code, tc); 50 sprintf(buf, "%d", tc); 51 SCX_ASSERT(!strcmp(skel->data->uei.msg, buf)); 52 bpf_link__destroy(link); 53 exit__destroy(skel); 54 } 55 56 return SCX_TEST_PASS; 57} 58 59struct scx_test exit_test = { 60 .name = "exit", 61 .description = "Verify we can cleanly exit a scheduler in multiple places", 62 .run = run, 63}; 64REGISTER_SCX_TEST(&exit_test)
~/
Read-only file preview.