Linux Audio

Check our new training course

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};