brintos

brintos / linux-shallow public Read only

0
0
Text · 1.1 KiB · 2cfc4ff Raw
59 lines · c
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};59