diff options
author | David Vernet <dvernet@meta.com> | 2024-06-18 23:09:21 +0300 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2024-06-18 23:09:21 +0300 |
commit | a5db7817af780db6a7f290c79677eff4fd13c5fa (patch) | |
tree | bf8e0b59f0caf553044f0d0f9afe3cdb412f412e /tools/testing/selftests/sched_ext/select_cpu_dfl.bpf.c | |
parent | fa48e8d2c7b58d242c1db3a09c14f4274e055087 (diff) | |
download | linux-a5db7817af780db6a7f290c79677eff4fd13c5fa.tar.xz |
sched_ext: Add selftests
Add basic selftests.
Signed-off-by: David Vernet <dvernet@meta.com>
Acked-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'tools/testing/selftests/sched_ext/select_cpu_dfl.bpf.c')
-rw-r--r-- | tools/testing/selftests/sched_ext/select_cpu_dfl.bpf.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/tools/testing/selftests/sched_ext/select_cpu_dfl.bpf.c b/tools/testing/selftests/sched_ext/select_cpu_dfl.bpf.c new file mode 100644 index 000000000000..2ed2991afafe --- /dev/null +++ b/tools/testing/selftests/sched_ext/select_cpu_dfl.bpf.c @@ -0,0 +1,40 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * A scheduler that validates the behavior of direct dispatching with a default + * select_cpu implementation. + * + * Copyright (c) 2023 Meta Platforms, Inc. and affiliates. + * Copyright (c) 2023 David Vernet <dvernet@meta.com> + * Copyright (c) 2023 Tejun Heo <tj@kernel.org> + */ + +#include <scx/common.bpf.h> + +char _license[] SEC("license") = "GPL"; + +bool saw_local = false; + +static bool task_is_test(const struct task_struct *p) +{ + return !bpf_strncmp(p->comm, 9, "select_cpu"); +} + +void BPF_STRUCT_OPS(select_cpu_dfl_enqueue, struct task_struct *p, + u64 enq_flags) +{ + const struct cpumask *idle_mask = scx_bpf_get_idle_cpumask(); + + if (task_is_test(p) && + bpf_cpumask_test_cpu(scx_bpf_task_cpu(p), idle_mask)) { + saw_local = true; + } + scx_bpf_put_idle_cpumask(idle_mask); + + scx_bpf_dispatch(p, SCX_DSQ_GLOBAL, SCX_SLICE_DFL, enq_flags); +} + +SEC(".struct_ops.link") +struct sched_ext_ops select_cpu_dfl_ops = { + .enqueue = select_cpu_dfl_enqueue, + .name = "select_cpu_dfl", +}; |