1 /* SPDX-License-Identifier: GPL-2.0 */
3 * A scheduler that validates the behavior of direct dispatching with a default
4 * select_cpu implementation.
6 * Copyright (c) 2023 Meta Platforms, Inc. and affiliates.
7 * Copyright (c) 2023 David Vernet <dvernet@meta.com>
8 * Copyright (c) 2023 Tejun Heo <tj@kernel.org>
11 #include <scx/common.bpf.h>
13 char _license
[] SEC("license") = "GPL";
15 bool saw_local
= false;
17 static bool task_is_test(const struct task_struct
*p
)
19 return !bpf_strncmp(p
->comm
, 9, "select_cpu");
22 void BPF_STRUCT_OPS(select_cpu_dfl_enqueue
, struct task_struct
*p
,
25 const struct cpumask
*idle_mask
= scx_bpf_get_idle_cpumask();
27 if (task_is_test(p
) &&
28 bpf_cpumask_test_cpu(scx_bpf_task_cpu(p
), idle_mask
)) {
31 scx_bpf_put_idle_cpumask(idle_mask
);
33 scx_bpf_dispatch(p
, SCX_DSQ_GLOBAL
, SCX_SLICE_DFL
, enq_flags
);
36 SEC(".struct_ops.link")
37 struct sched_ext_ops select_cpu_dfl_ops
= {
38 .enqueue
= (void *) select_cpu_dfl_enqueue
,
39 .name
= "select_cpu_dfl",