diff options
| author | Christian Loehle <christian.loehle@arm.com> | 2025-09-03 22:23:10 +0100 |
|---|---|---|
| committer | Tejun Heo <tj@kernel.org> | 2025-09-03 11:50:42 -1000 |
| commit | 20b158094a1adc9bbfdcc41780059b5cd8866ad8 (patch) | |
| tree | 201ca03b9e522392ad624488d33496b1a22b61cb /kernel/sched/ext.c | |
| parent | sched_ext: Introduce scx_bpf_locked_rq() (diff) | |
| download | linux-20b158094a1adc9bbfdcc41780059b5cd8866ad8.tar.gz linux-20b158094a1adc9bbfdcc41780059b5cd8866ad8.zip | |
sched_ext: Introduce scx_bpf_cpu_curr()
Provide scx_bpf_cpu_curr() as a way for scx schedulers to check the curr
task of a remote rq without assuming its lock is held.
Many scx schedulers make use of scx_bpf_cpu_rq() to check a remote curr
(e.g. to see if it should be preempted). This is problematic because
scx_bpf_cpu_rq() provides access to all fields of struct rq, most of
which aren't safe to use without holding the associated rq lock.
Signed-off-by: Christian Loehle <christian.loehle@arm.com>
Acked-by: Andrea Righi <arighi@nvidia.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'kernel/sched/ext.c')
| -rw-r--r-- | kernel/sched/ext.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/kernel/sched/ext.c b/kernel/sched/ext.c index a319ea5bb25a..4bd9b491b376 100644 --- a/kernel/sched/ext.c +++ b/kernel/sched/ext.c @@ -6380,6 +6380,19 @@ __bpf_kfunc struct rq *scx_bpf_locked_rq(void) } /** + * scx_bpf_cpu_curr - Return remote CPU's curr task + * @cpu: CPU of interest + * + * Callers must hold RCU read lock (KF_RCU). + */ +__bpf_kfunc struct task_struct *scx_bpf_cpu_curr(s32 cpu) +{ + if (!kf_cpu_valid(cpu, NULL)) + return NULL; + return rcu_dereference(cpu_rq(cpu)->curr); +} + +/** * scx_bpf_task_cgroup - Return the sched cgroup of a task * @p: task of interest * @@ -6544,6 +6557,7 @@ BTF_ID_FLAGS(func, scx_bpf_task_running, KF_RCU) BTF_ID_FLAGS(func, scx_bpf_task_cpu, KF_RCU) BTF_ID_FLAGS(func, scx_bpf_cpu_rq) BTF_ID_FLAGS(func, scx_bpf_locked_rq, KF_RET_NULL) +BTF_ID_FLAGS(func, scx_bpf_cpu_curr, KF_RET_NULL | KF_RCU) #ifdef CONFIG_CGROUP_SCHED BTF_ID_FLAGS(func, scx_bpf_task_cgroup, KF_RCU | KF_ACQUIRE) #endif |
