From f517f754fae9ce9c07087d82c1286b5be0d85870 Mon Sep 17 00:00:00 2001 From: Pan Xiuli Date: Thu, 6 Sep 2018 13:54:14 +0800 Subject: [PATCH 1/2] schedule: fix edf reschedule Should reschedule if we did not try to reschedule. Signed-off-by: Pan Xiuli --- src/lib/schedule.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/lib/schedule.c b/src/lib/schedule.c index c4bcedd65f73..d45df831ebb8 100644 --- a/src/lib/schedule.c +++ b/src/lib/schedule.c @@ -141,9 +141,11 @@ static inline struct task *edf_get_next(uint64_t current, trace_pipe("ed!"); /* have we already tried to rescheule ? */ - if (reschedule++) + if (!reschedule) { + reschedule++; + trace_pipe("edr"); edf_reschedule(task, current); - else { + } else { /* reschedule failed */ list_item_del(&task->list); task->state = TASK_STATE_CANCEL; From 8c3917dbbe7db97ba6b8eb574e7e133707c8264f Mon Sep 17 00:00:00 2001 From: Pan Xiuli Date: Thu, 6 Sep 2018 13:55:44 +0800 Subject: [PATCH 2/2] schedule: fix schedule list double add Check if the schedule task is added in the list before add it. Signed-off-by: Pan Xiuli --- src/lib/schedule.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/lib/schedule.c b/src/lib/schedule.c index d45df831ebb8..25bd7f88db43 100644 --- a/src/lib/schedule.c +++ b/src/lib/schedule.c @@ -269,6 +269,13 @@ static int _schedule_task(struct task *task, uint64_t start, uint64_t deadline) return 0; } + /* is task already running ? - not enough MIPS to complete ? */ + if (task->state == TASK_STATE_QUEUED) { + trace_pipe("tsq"); + spin_unlock_irq(&sch->lock, flags); + return 0; + } + /* get the current time */ current = platform_timer_get(platform_timer);