aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorBjoern B. Brandenburg <bbb@cs.unc.edu>2007-09-25 23:39:08 -0400
committerBjoern B. Brandenburg <bbb@cs.unc.edu>2007-09-25 23:39:08 -0400
commitf22378cdfc858e4244bb696ed23b25b089cf4383 (patch)
treefee9b317e30054504ef566ff482664d455fcd213 /kernel
parent4aa0901b8c5c9b89ff804a8087037ff0e3c8ca88 (diff)
bugfix: don't forget to requeue linked task at the end of RT mode
This caused RT tasks to get lost.
Diffstat (limited to 'kernel')
-rw-r--r--kernel/sched_gsn_edf.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/kernel/sched_gsn_edf.c b/kernel/sched_gsn_edf.c
index 948d2b4dc3..293dd5d532 100644
--- a/kernel/sched_gsn_edf.c
+++ b/kernel/sched_gsn_edf.c
@@ -424,8 +424,10 @@ static int gsnedf_schedule(struct task_struct * prev,
424 struct task_struct ** next, 424 struct task_struct ** next,
425 runqueue_t * rq) 425 runqueue_t * rq)
426{ 426{
427 cpu_entry_t* entry = &__get_cpu_var(gsnedf_cpu_entries); 427 cpu_entry_t* entry = &__get_cpu_var(gsnedf_cpu_entries);
428 int out_of_time, sleep, preempt, np, exists, rt, blocks; 428 int out_of_time, sleep, preempt, np, exists,
429 rt, blocks;
430 struct task_struct* linked;
429 431
430 /* Will be released in finish_switch. */ 432 /* Will be released in finish_switch. */
431 queue_lock(&gsnedf_lock); 433 queue_lock(&gsnedf_lock);
@@ -468,11 +470,14 @@ static int gsnedf_schedule(struct task_struct * prev,
468 470
469 /* Stop real-time tasks when we leave real-time mode 471 /* Stop real-time tasks when we leave real-time mode
470 */ 472 */
471 if (!rt && entry->linked) 473 if (!rt && entry->linked) {
472 /* task will be preempted once it is preemptable 474 /* task will be preempted once it is preemptable
473 * (which it may be now already) 475 * (which it may be already)
474 */ 476 */
475 unlink(entry->linked); 477 linked = entry->linked;
478 unlink(linked);
479 requeue(linked);
480 }
476 481
477 /* Link pending task if we became unlinked. 482 /* Link pending task if we became unlinked.
478 */ 483 */