]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
sched_ext: Use IRQ_WORK_INIT_HARD() to initialize sch->disable_irq_work
authorZqiang <qiang.zhang@linux.dev>
Fri, 8 May 2026 11:50:45 +0000 (19:50 +0800)
committerTejun Heo <tj@kernel.org>
Fri, 8 May 2026 15:11:53 +0000 (05:11 -1000)
For built with PREEMPT_RT kernels, the scx_disable_irq_workfn() is
called from per-cpu irq_work kthreads context, this means that
when call the scx_dump_state() in the scx_disable_irq_workfn() to
output current->comm/pid, it always output current irq_work kthread's
comm/pid. this commit therefore use the IRQ_WORK_INIT_HARD() to
initialize sch->disable_irq_work to make scx_disable_irq_workfn() is
called from hardirq context.

Fixes: f4a6c506d118 ("sched_ext: Always bounce scx_disable() through irq_work")
Signed-off-by: Zqiang <qiang.zhang@linux.dev>
Signed-off-by: Tejun Heo <tj@kernel.org>
kernel/sched/ext.c

index f4e2db8e56be629171d8530741866a92a340b691..df305712a2d4240906f1a0c597b753397793624c 100644 (file)
@@ -6589,7 +6589,7 @@ static struct scx_sched *scx_alloc_and_add_sched(struct sched_ext_ops *ops,
 
        sch->slice_dfl = SCX_SLICE_DFL;
        atomic_set(&sch->exit_kind, SCX_EXIT_NONE);
-       init_irq_work(&sch->disable_irq_work, scx_disable_irq_workfn);
+       sch->disable_irq_work = IRQ_WORK_INIT_HARD(scx_disable_irq_workfn);
        kthread_init_work(&sch->disable_work, scx_disable_workfn);
        timer_setup(&sch->bypass_lb_timer, scx_bypass_lb_timerfn, 0);