Skip to content

Commit 38d541f

Browse files
committed
scheduler: add task priority into scheduler
Check priority before check timeout delta to make sure task with higher priority run first. Signed-off-by: Pan Xiuli <xiuli.pan@linux.intel.com>
1 parent 85e1c0d commit 38d541f

1 file changed

Lines changed: 10 additions & 3 deletions

File tree

src/lib/schedule.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ static inline struct task *edf_get_next(uint64_t current,
9898
struct list_item *clist;
9999
struct list_item *tlist;
100100
uint64_t next_delta = UINT64_MAX;
101+
int next_priority = TASK_PRI_LOW;
101102
uint64_t delta;
102103
uint64_t deadline;
103104
int reschedule = 0;
@@ -126,15 +127,21 @@ static inline struct task *edf_get_next(uint64_t current,
126127
/* include the length of task in deadline calc */
127128
deadline = task->deadline - task->max_rtime;
128129

129-
/* get earliest deadline */
130130
if (current < deadline) {
131131
delta = deadline - current;
132132

133-
if (delta < next_delta) {
133+
/* get highest priority */
134+
if (task->priority < next_priority) {
135+
next_priority = task->priority;
134136
next_delta = delta;
135137
next_task = task;
138+
} else if (task->priority == next_priority) {
139+
/* get earliest deadline */
140+
if (delta < next_delta) {
141+
next_delta = delta;
142+
next_task = task;
143+
}
136144
}
137-
138145
} else {
139146
/* missed scheduling - will be rescheduled */
140147
trace_pipe("ed!");

0 commit comments

Comments
 (0)