Commit d6a05910 authored by Tejun Heo's avatar Tejun Heo

sched_ext: Open-code task_linked_on_dsq()

task_linked_on_dsq() exists as a helper because it used to test both the
rbtree and list nodes. It now only tests the list node and the list node
will soon be used for something else too. The helper doesn't improve
anything materially and the naming will become confusing. Open-code the list
node testing and remove task_linked_on_dsq()
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
Acked-by: default avatarDavid Vernet <void@manifault.com>
parent fc283116
...@@ -1572,18 +1572,13 @@ static void task_unlink_from_dsq(struct task_struct *p, ...@@ -1572,18 +1572,13 @@ static void task_unlink_from_dsq(struct task_struct *p,
list_del_init(&p->scx.dsq_list.node); list_del_init(&p->scx.dsq_list.node);
} }
static bool task_linked_on_dsq(struct task_struct *p)
{
return !list_empty(&p->scx.dsq_list.node);
}
static void dispatch_dequeue(struct rq *rq, struct task_struct *p) static void dispatch_dequeue(struct rq *rq, struct task_struct *p)
{ {
struct scx_dispatch_q *dsq = p->scx.dsq; struct scx_dispatch_q *dsq = p->scx.dsq;
bool is_local = dsq == &rq->scx.local_dsq; bool is_local = dsq == &rq->scx.local_dsq;
if (!dsq) { if (!dsq) {
WARN_ON_ONCE(task_linked_on_dsq(p)); WARN_ON_ONCE(!list_empty(&p->scx.dsq_list.node));
/* /*
* When dispatching directly from the BPF scheduler to a local * When dispatching directly from the BPF scheduler to a local
* DSQ, the task isn't associated with any DSQ but * DSQ, the task isn't associated with any DSQ but
...@@ -1604,7 +1599,7 @@ static void dispatch_dequeue(struct rq *rq, struct task_struct *p) ...@@ -1604,7 +1599,7 @@ static void dispatch_dequeue(struct rq *rq, struct task_struct *p)
*/ */
if (p->scx.holding_cpu < 0) { if (p->scx.holding_cpu < 0) {
/* @p must still be on @dsq, dequeue */ /* @p must still be on @dsq, dequeue */
WARN_ON_ONCE(!task_linked_on_dsq(p)); WARN_ON_ONCE(list_empty(&p->scx.dsq_list.node));
task_unlink_from_dsq(p, dsq); task_unlink_from_dsq(p, dsq);
dsq_mod_nr(dsq, -1); dsq_mod_nr(dsq, -1);
} else { } else {
...@@ -1614,7 +1609,7 @@ static void dispatch_dequeue(struct rq *rq, struct task_struct *p) ...@@ -1614,7 +1609,7 @@ static void dispatch_dequeue(struct rq *rq, struct task_struct *p)
* holding_cpu which tells dispatch_to_local_dsq() that it lost * holding_cpu which tells dispatch_to_local_dsq() that it lost
* the race. * the race.
*/ */
WARN_ON_ONCE(task_linked_on_dsq(p)); WARN_ON_ONCE(!list_empty(&p->scx.dsq_list.node));
p->scx.holding_cpu = -1; p->scx.holding_cpu = -1;
} }
p->scx.dsq = NULL; p->scx.dsq = NULL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment