scx_bpf_cpu_rq() works on an unlocked rq which generally isn't safe.
For the common use-cases scx_bpf_cpu_rq_locked() and
scx_bpf_remote_curr() work, so add a deprecation warning
to scx_bpf_cpu_rq() so it can eventually be removed.
Signed-off-by: Christian Loehle <christian.loehle@arm.com>
---
kernel/sched/ext.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/kernel/sched/ext.c b/kernel/sched/ext.c
index e242a2520f06..a524d404ad09 100644
--- a/kernel/sched/ext.c
+++ b/kernel/sched/ext.c
@@ -7427,6 +7427,9 @@ __bpf_kfunc struct rq *scx_bpf_cpu_rq(s32 cpu)
if (!kf_cpu_valid(cpu, NULL))
return NULL;
+ pr_warn_once("%s() is deprecated; use scx_bpf_cpu_rq_locked() when holding rq lock "
+ "or scx_bpf_remote_curr() to read remote curr safely.\n", __func__);
+
return cpu_rq(cpu);
}
--
2.34.1
On Mon, Sep 01, 2025 at 02:26:04PM +0100, Christian Loehle wrote: > scx_bpf_cpu_rq() works on an unlocked rq which generally isn't safe. > For the common use-cases scx_bpf_cpu_rq_locked() and > scx_bpf_remote_curr() work, so add a deprecation warning > to scx_bpf_cpu_rq() so it can eventually be removed. > > Signed-off-by: Christian Loehle <christian.loehle@arm.com> > --- > kernel/sched/ext.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/kernel/sched/ext.c b/kernel/sched/ext.c > index e242a2520f06..a524d404ad09 100644 > --- a/kernel/sched/ext.c > +++ b/kernel/sched/ext.c > @@ -7427,6 +7427,9 @@ __bpf_kfunc struct rq *scx_bpf_cpu_rq(s32 cpu) > if (!kf_cpu_valid(cpu, NULL)) > return NULL; > > + pr_warn_once("%s() is deprecated; use scx_bpf_cpu_rq_locked() when holding rq lock " > + "or scx_bpf_remote_curr() to read remote curr safely.\n", __func__); > + I wonder whether it'd make more sense to tie the once testing to the scheduler instance (see warned_zero_slice). Thanks. -- tejun
On 9/3/25 16:56, Tejun Heo wrote: > On Mon, Sep 01, 2025 at 02:26:04PM +0100, Christian Loehle wrote: >> scx_bpf_cpu_rq() works on an unlocked rq which generally isn't safe. >> For the common use-cases scx_bpf_cpu_rq_locked() and >> scx_bpf_remote_curr() work, so add a deprecation warning >> to scx_bpf_cpu_rq() so it can eventually be removed. >> >> Signed-off-by: Christian Loehle <christian.loehle@arm.com> >> --- >> kernel/sched/ext.c | 3 +++ >> 1 file changed, 3 insertions(+) >> >> diff --git a/kernel/sched/ext.c b/kernel/sched/ext.c >> index e242a2520f06..a524d404ad09 100644 >> --- a/kernel/sched/ext.c >> +++ b/kernel/sched/ext.c >> @@ -7427,6 +7427,9 @@ __bpf_kfunc struct rq *scx_bpf_cpu_rq(s32 cpu) >> if (!kf_cpu_valid(cpu, NULL)) >> return NULL; >> >> + pr_warn_once("%s() is deprecated; use scx_bpf_cpu_rq_locked() when holding rq lock " >> + "or scx_bpf_remote_curr() to read remote curr safely.\n", __func__); >> + > > I wonder whether it'd make more sense to tie the once testing to the > scheduler instance (see warned_zero_slice). > Yes that makes sense to me, I'll resend with this and the renaming suggestions. Thanks!
© 2016 - 2025 Red Hat, Inc.