File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff 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!" );
You can’t perform that action at this time.
0 commit comments