65 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/*3 * Copyright (c) 2023 Meta Platforms, Inc. and affiliates.4 * Copyright (c) 2023 David Vernet <dvernet@meta.com>5 * Copyright (c) 2023 Tejun Heo <tj@kernel.org>6 */7#include <bpf/bpf.h>8#include <scx/common.h>9#include <sys/wait.h>10#include <unistd.h>11#include "enq_last_no_enq_fails.bpf.skel.h"12#include "scx_test.h"13 14static enum scx_test_status setup(void **ctx)15{16 struct enq_last_no_enq_fails *skel;17 18 skel = enq_last_no_enq_fails__open_and_load();19 if (!skel) {20 SCX_ERR("Failed to open and load skel");21 return SCX_TEST_FAIL;22 }23 *ctx = skel;24 25 return SCX_TEST_PASS;26}27 28static enum scx_test_status run(void *ctx)29{30 struct enq_last_no_enq_fails *skel = ctx;31 struct bpf_link *link;32 33 link = bpf_map__attach_struct_ops(skel->maps.enq_last_no_enq_fails_ops);34 if (!link) {35 SCX_ERR("Incorrectly failed at attaching scheduler");36 return SCX_TEST_FAIL;37 }38 if (!skel->bss->exit_kind) {39 SCX_ERR("Incorrectly stayed loaded");40 return SCX_TEST_FAIL;41 }42 43 bpf_link__destroy(link);44 45 return SCX_TEST_PASS;46}47 48static void cleanup(void *ctx)49{50 struct enq_last_no_enq_fails *skel = ctx;51 52 enq_last_no_enq_fails__destroy(skel);53}54 55struct scx_test enq_last_no_enq_fails = {56 .name = "enq_last_no_enq_fails",57 .description = "Verify we eject a scheduler if we specify "58 "the SCX_OPS_ENQ_LAST flag without defining "59 "ops.enqueue()",60 .setup = setup,61 .run = run,62 .cleanup = cleanup,63};64REGISTER_SCX_TEST(&enq_last_no_enq_fails)65