]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
tools/sched_ext: Compatible testing of SCX_ENQ_CPU_SELECTED
authorChangwoo Min <changwoo@igalia.com>
Sun, 9 Feb 2025 01:53:53 +0000 (10:53 +0900)
committerTejun Heo <tj@kernel.org>
Sun, 9 Feb 2025 06:42:50 +0000 (20:42 -1000)
commit372033ad9e98dce205fc3c48a146cfff5699e3e9
tree19a0d8e3fa716bfc280a7037899a2b3db4ca88ea
parenteace54dff05157ed2629848111366b836dcf3ad9
tools/sched_ext: Compatible testing of SCX_ENQ_CPU_SELECTED

This provides compatible testing of SCX_ENQ_CPU_SELECTED.
More specifically, it handles two cases:

  1. a BPF scheduler is compiled against vmlinux.h where
  SCX_ENQ_CPU_SELECTED is defined, but it runs on a kernel that does not
  have SCX_ENQ_CPU_SELECTED. In this case, the test result of
  'enq_flags & SCX_ENQ_CPU_SELECTED' will always be false. That test result
  is semantically incorrect because the kernel before SCX_ENQ_CPU_SELECTED
  has never skipped select_task_rq_scx(), so the result should be true.

  2. a BPF scheduler is compiling against vmlinux.h where
  SCX_ENQ_CPU_SELECTED is not defined. In this case, directly using
  SCX_ENQ_CPU_SELECTED causes compilation errors.

To hide such complexity, introduce __COMPAT_is_enq_cpu_selected(),
which checks if SCX_ENQ_CPU_SELECTED exists in runtime using BPF CO-RE.
This consists of three parts:

  1. Add enum_defs.autogen.h, which has macros (HAVE_{enum name}) denoting
  whether SCX enums are defined in the vmlinux.h or not.

  2. Implement __COMPAT_is_enq_cpu_selected(), which provide the test of
  SCX_ENQ_CPU_SELECTED in a compatible way.

  3. Use  __COMPAT_is_enq_cpu_selected() in scx_qmap.

Note that this is a sync of the relevant PR [1] in the scx repo.

  [1] https://github.com/sched-ext/scx/pull/1314

Signed-off-by: Changwoo Min <changwoo@igalia.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
tools/sched_ext/include/scx/common.bpf.h
tools/sched_ext/include/scx/common.h
tools/sched_ext/include/scx/compat.bpf.h
tools/sched_ext/include/scx/enum_defs.autogen.h [new file with mode: 0644]
tools/sched_ext/scx_qmap.bpf.c