mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 00:22:00 +02:00
sched_ext: Refactor do_enqueue_task() local and global DSQ paths
The local and global DSQ enqueue paths in do_enqueue_task() share the same slice refill logic. Factor out the common code into a shared enqueue label. This makes adding new enqueue cases easier. No functional changes. Reviewed-by: Andrea Righi <arighi@nvidia.com> Reviewed-by: Emil Tsalapatis <emil@etsalapatis.com> Signed-off-by: Tejun Heo <tj@kernel.org>
This commit is contained in:
parent
bfd3749d48
commit
3546119f18
|
|
@ -1279,6 +1279,7 @@ static void do_enqueue_task(struct rq *rq, struct task_struct *p, u64 enq_flags,
|
|||
{
|
||||
struct scx_sched *sch = scx_root;
|
||||
struct task_struct **ddsp_taskp;
|
||||
struct scx_dispatch_q *dsq;
|
||||
unsigned long qseq;
|
||||
|
||||
WARN_ON_ONCE(!(p->scx.flags & SCX_TASK_QUEUED));
|
||||
|
|
@ -1346,8 +1347,17 @@ static void do_enqueue_task(struct rq *rq, struct task_struct *p, u64 enq_flags,
|
|||
direct:
|
||||
direct_dispatch(sch, p, enq_flags);
|
||||
return;
|
||||
|
||||
local_norefill:
|
||||
dispatch_enqueue(sch, &rq->scx.local_dsq, p, enq_flags);
|
||||
return;
|
||||
local:
|
||||
dsq = &rq->scx.local_dsq;
|
||||
goto enqueue;
|
||||
global:
|
||||
dsq = find_global_dsq(sch, p);
|
||||
goto enqueue;
|
||||
|
||||
enqueue:
|
||||
/*
|
||||
* For task-ordering, slice refill must be treated as implying the end
|
||||
* of the current slice. Otherwise, the longer @p stays on the CPU, the
|
||||
|
|
@ -1355,14 +1365,7 @@ static void do_enqueue_task(struct rq *rq, struct task_struct *p, u64 enq_flags,
|
|||
*/
|
||||
touch_core_sched(rq, p);
|
||||
refill_task_slice_dfl(sch, p);
|
||||
local_norefill:
|
||||
dispatch_enqueue(sch, &rq->scx.local_dsq, p, enq_flags);
|
||||
return;
|
||||
|
||||
global:
|
||||
touch_core_sched(rq, p); /* see the comment in local: */
|
||||
refill_task_slice_dfl(sch, p);
|
||||
dispatch_enqueue(sch, find_global_dsq(sch, p), p, enq_flags);
|
||||
dispatch_enqueue(sch, dsq, p, enq_flags);
|
||||
}
|
||||
|
||||
static bool task_runnable(const struct task_struct *p)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user