Skip to content

Commit 459b70c

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 5b6b220 commit 459b70c

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
@@ -99,6 +99,7 @@ static inline struct task *edf_get_next(uint64_t current,
9999
struct list_item *clist;
100100
struct list_item *tlist;
101101
uint64_t next_delta = UINT64_MAX;
102+
int next_priority = TASK_PRI_LOW;
102103
uint64_t delta;
103104
uint64_t deadline;
104105
int reschedule = 0;
@@ -127,15 +128,21 @@ static inline struct task *edf_get_next(uint64_t current,
127128
/* include the length of task in deadline calc */
128129
deadline = task->deadline - task->max_rtime;
129130

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

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

0 commit comments

Comments
 (0)