Loading...
Note: File does not exist in v4.10.11.
1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * Create and destroy DSQs in a loop.
4 *
5 * Copyright (c) 2024 Meta Platforms, Inc. and affiliates.
6 * Copyright (c) 2024 David Vernet <dvernet@meta.com>
7 */
8
9#include <scx/common.bpf.h>
10
11char _license[] SEC("license") = "GPL";
12
13void BPF_STRUCT_OPS(create_dsq_exit_task, struct task_struct *p,
14 struct scx_exit_task_args *args)
15{
16 scx_bpf_destroy_dsq(p->pid);
17}
18
19s32 BPF_STRUCT_OPS_SLEEPABLE(create_dsq_init_task, struct task_struct *p,
20 struct scx_init_task_args *args)
21{
22 s32 err;
23
24 err = scx_bpf_create_dsq(p->pid, -1);
25 if (err)
26 scx_bpf_error("Failed to create DSQ for %s[%d]",
27 p->comm, p->pid);
28
29 return err;
30}
31
32s32 BPF_STRUCT_OPS_SLEEPABLE(create_dsq_init)
33{
34 u32 i;
35 s32 err;
36
37 bpf_for(i, 0, 1024) {
38 err = scx_bpf_create_dsq(i, -1);
39 if (err) {
40 scx_bpf_error("Failed to create DSQ %d", i);
41 return 0;
42 }
43 }
44
45 bpf_for(i, 0, 1024) {
46 scx_bpf_destroy_dsq(i);
47 }
48
49 return 0;
50}
51
52SEC(".struct_ops.link")
53struct sched_ext_ops create_dsq_ops = {
54 .init_task = (void *) create_dsq_init_task,
55 .exit_task = (void *) create_dsq_exit_task,
56 .init = (void *) create_dsq_init,
57 .name = "create_dsq",
58};