Skip to content

Commit 7dc0172

Browse files
committed
schedule: twb: run task_complete() as the last step in thread fn
Reworked task thread flow to run task_complete as the last step Signed-off-by: Adrian Bonislawski <adrian.bonislawski@intel.com>
1 parent ea192a0 commit 7dc0172

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed

src/schedule/zephyr_twb_schedule.c

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -178,8 +178,6 @@ static void twb_thread_fn(void *p1, void *p2, void *p3)
178178

179179
if (task->state == SOF_TASK_STATE_RUNNING) {
180180
state = task_run(task);
181-
if (state == SOF_TASK_STATE_COMPLETED)
182-
task_complete(task);
183181
} else {
184182
state = task->state; /* to avoid undefined variable warning */
185183
}
@@ -190,18 +188,20 @@ static void twb_thread_fn(void *p1, void *p2, void *p3)
190188
* if not, set the state returned by run procedure
191189
*/
192190
if (task->state == SOF_TASK_STATE_RUNNING) {
193-
task->state = state;
191+
if (pdata->cycles_granted) {
192+
k_thread_runtime_stats_get(pdata->thread_id, &rt_stats_thread);
193+
pdata->cycles_consumed += rt_stats_thread.execution_cycles - pdata->cycles_ref;
194+
pdata->cycles_ref = rt_stats_thread.execution_cycles;
195+
}
194196
switch (state) {
195197
case SOF_TASK_STATE_RESCHEDULE:
196198
/* mark to reschedule, schedule time is already calculated */
197199
task->state = SOF_TASK_STATE_QUEUED;
200+
break;
198201
case SOF_TASK_STATE_CANCEL:
202+
task->state = SOF_TASK_STATE_CANCEL;
203+
break;
199204
case SOF_TASK_STATE_COMPLETED:
200-
if (pdata->cycles_granted) {
201-
k_thread_runtime_stats_get(pdata->thread_id, &rt_stats_thread);
202-
pdata->cycles_consumed += rt_stats_thread.execution_cycles - pdata->cycles_ref;
203-
pdata->cycles_ref = rt_stats_thread.execution_cycles;
204-
}
205205
break;
206206

207207
default:
@@ -212,7 +212,12 @@ static void twb_thread_fn(void *p1, void *p2, void *p3)
212212

213213
scheduler_twb_unlock(lock_key);
214214

215-
if (task->state != SOF_TASK_STATE_RUNNING)
215+
if (state == SOF_TASK_STATE_COMPLETED) {
216+
task->state = SOF_TASK_STATE_COMPLETED;
217+
task_complete(task);
218+
}
219+
220+
if (state != SOF_TASK_STATE_RUNNING)
216221
k_sem_take(&pdata->sem, K_FOREVER);
217222
};
218223
/* never be here */

0 commit comments

Comments
 (0)