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