# sched-ext mandatory options
#
CONFIG_BPF=y
CONFIG_BPF_SYSCALL=y
CONFIG_BPF_JIT=y
CONFIG_DEBUG_INFO=y
CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y
CONFIG_DEBUG_INFO_BTF=y
CONFIG_BPF_JIT_ALWAYS_ON=y
CONFIG_BPF_JIT_DEFAULT_ON=y
CONFIG_SCHED_CLASS_EXT=y

# Required by some rust schedulers (e.g. scx_p2dq)
#
CONFIG_KALLSYMS_ALL=y

# Required on arm64
#
# CONFIG_DEBUG_INFO_REDUCED is not set

# LAVD tracks futex to give an additional time slice for futex holder
# (i.e., avoiding lock holder preemption) for better system-wide progress.
# LAVD first tries to use ftrace to trace futex function calls.
# If that is not available, it tries to use a tracepoint.
CONFIG_FUNCTION_TRACER=y

# Enable scheduling debugging
#
# NOTE: CONFIG_SCHED_DEBUG was removed in Linux 6.15-rc1 (commit b52173065e0a)
# as the functionality was made unconditional. This option is only applicable
# to kernel versions < 6.15 and can be safely ignored for newer kernels.
CONFIG_SCHED_DEBUG=y

# Enable extra scheduling features (for a better code coverage while testing
# the schedulers)
#
CONFIG_NUMA=y
CONFIG_NUMA_BALANCING=y
CONFIG_SCHED_AUTOGROUP=y
CONFIG_SCHED_CORE=y
CONFIG_SCHED_MC=y

# Enable fully preemptible kernel for a better test coverage of the schedulers
#
# CONFIG_PREEMPT_NONE is not set
# CONFIG_PREEMPT_VOLUNTARY is not set
CONFIG_PREEMPT=y
CONFIG_PREEMPT_DYNAMIC=y

# Additional debugging information (useful to catch potential locking issues)
CONFIG_DEBUG_LOCKDEP=y
CONFIG_DEBUG_ATOMIC_SLEEP=y
CONFIG_PROVE_LOCKING=y

# Bpftrace headers (for additional debug info)
CONFIG_BPF_EVENTS=y
CONFIG_FTRACE_SYSCALLS=y
CONFIG_DYNAMIC_FTRACE=y
CONFIG_KPROBES=y
CONFIG_KPROBE_EVENTS=y
CONFIG_UPROBES=y
CONFIG_UPROBE_EVENTS=y
CONFIG_DEBUG_FS=y

# Enable access to kernel configuration and headers at runtime
CONFIG_IKHEADERS=y
CONFIG_IKCONFIG_PROC=y
CONFIG_IKCONFIG=y
