9f391f94a1
sched_domains regulate the load balancing for sched_classes. A machine can be partitioned into multiple sections that are not load-balanced across using either isolcpus= boot param or cpuset partitions. In such cases, tasks that are in one partition are expected to stay within that partition. cpuset configured partitions are always reflected in each member task's cpumask. As SCX always honors the task cpumasks, the BPF scheduler is automatically in compliance with the configured partitions. However, for isolcpus= domain isolation, the isolated CPUs are simply omitted from the top-level sched_domain[s] without further restrictions on tasks' cpumasks, so, for example, a task currently running in an isolated CPU may have more CPUs in its allowed cpumask while expected to remain on the same CPU. There is no straightforward way to enforce this partitioning preemptively on BPF schedulers and erroring out after a violation can be surprising. isolcpus= domain isolation is being replaced with cpuset partitions anyway, so keep it simple and simply disallow loading a BPF scheduler if isolcpus= domain isolation is in effect. Signed-off-by: Tejun Heo <tj@kernel.org> Link: http://lkml.kernel.org/r/20240626082342.GY31592@noisy.programming.kicks-ass.net Cc: David Vernet <void@manifault.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Frederic Weisbecker <frederic@kernel.org>
67 lines
1.5 KiB
C
67 lines
1.5 KiB
C
// SPDX-License-Identifier: GPL-2.0-only
|
|
/*
|
|
* These are the scheduling policy related scheduler files, built
|
|
* in a single compilation unit for build efficiency reasons.
|
|
*
|
|
* ( Incidentally, the size of the compilation unit is roughly
|
|
* comparable to core.c and fair.c, the other two big
|
|
* compilation units. This helps balance build time, while
|
|
* coalescing source files to amortize header inclusion
|
|
* cost. )
|
|
*
|
|
* core.c and fair.c are built separately.
|
|
*/
|
|
|
|
/* Headers: */
|
|
#include <linux/sched/clock.h>
|
|
#include <linux/sched/cputime.h>
|
|
#include <linux/sched/hotplug.h>
|
|
#include <linux/sched/isolation.h>
|
|
#include <linux/sched/posix-timers.h>
|
|
#include <linux/sched/rt.h>
|
|
|
|
#include <linux/cpuidle.h>
|
|
#include <linux/jiffies.h>
|
|
#include <linux/kobject.h>
|
|
#include <linux/livepatch.h>
|
|
#include <linux/pm.h>
|
|
#include <linux/psi.h>
|
|
#include <linux/rhashtable.h>
|
|
#include <linux/seq_buf.h>
|
|
#include <linux/seqlock_api.h>
|
|
#include <linux/slab.h>
|
|
#include <linux/suspend.h>
|
|
#include <linux/tsacct_kern.h>
|
|
#include <linux/vtime.h>
|
|
#include <linux/sysrq.h>
|
|
#include <linux/percpu-rwsem.h>
|
|
|
|
#include <uapi/linux/sched/types.h>
|
|
|
|
#include "sched.h"
|
|
#include "smp.h"
|
|
|
|
#include "autogroup.h"
|
|
#include "stats.h"
|
|
#include "pelt.h"
|
|
|
|
/* Source code modules: */
|
|
|
|
#include "idle.c"
|
|
|
|
#include "rt.c"
|
|
|
|
#ifdef CONFIG_SMP
|
|
# include "cpudeadline.c"
|
|
# include "pelt.c"
|
|
#endif
|
|
|
|
#include "cputime.c"
|
|
#include "deadline.c"
|
|
|
|
#ifdef CONFIG_SCHED_CLASS_EXT
|
|
# include "ext.c"
|
|
#endif
|
|
|
|
#include "syscalls.c"
|