From dd0635c0153548e2350e1166d742ef02a4ccdbd3 Mon Sep 17 00:00:00 2001 From: Keyon Jie Date: Wed, 30 Jun 2021 17:11:14 +0800 Subject: [PATCH] ll_schedule: refine the task->state update Updates the task->state to reflect the real task status and only do necessary check in schedule_ll_is_pending(). Signed-off-by: Keyon Jie --- src/schedule/ll_schedule.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/schedule/ll_schedule.c b/src/schedule/ll_schedule.c index b25e9ad7d..1074a8cf6 100644 --- a/src/schedule/ll_schedule.c +++ b/src/schedule/ll_schedule.c @@ -72,6 +72,14 @@ static bool schedule_ll_is_pending(struct ll_schedule_data *sch) list_for_item(tlist, &sch->tasks) { task = container_of(tlist, struct task, list); + /* + * only tasks queued or waiting for reschedule are + * pending for scheduling + */ + if (task->state != SOF_TASK_STATE_QUEUED && + task->state != SOF_TASK_STATE_RESCHEDULE) + continue; + if (domain_is_pending(domain, task, &sched_comp)) { task->state = SOF_TASK_STATE_PENDING; pending_count++; @@ -126,6 +134,8 @@ static void schedule_ll_tasks_execute(struct ll_schedule_data *sch) tr_dbg(&ll_tr, "task %p %pU being started...", task, task->uid); + task->state = SOF_TASK_STATE_RUNNING; + task->state = task_run(task); spin_lock(&domain->lock); @@ -435,6 +445,7 @@ static int schedule_ll_task(void *data, struct task *task, uint64_t start, /* insert task into the list */ schedule_ll_task_insert(task, &sch->tasks); + task->state = SOF_TASK_STATE_QUEUED; /* set schedule domain */ ret = schedule_ll_domain_set(sch, task, start, period);