diff options
| author | Bjoern B. Brandenburg <bbb@cs.unc.edu> | 2011-07-31 17:52:25 -0400 |
|---|---|---|
| committer | Bjoern B. Brandenburg <bbb@cs.unc.edu> | 2011-07-31 17:52:25 -0400 |
| commit | 7b39625c7872be3b57a27e0a74cb7112b024ca9e (patch) | |
| tree | 022d9b839d501127109e377857c7ce1002167459 | |
| parent | 6990544b6de202414e6564baa649ad260d83a9ca (diff) | |
WIP snapshot
| -rw-r--r-- | litmus/sched_cedf.c | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/litmus/sched_cedf.c b/litmus/sched_cedf.c index 7fd6276b3418..4f5bb26b339b 100644 --- a/litmus/sched_cedf.c +++ b/litmus/sched_cedf.c | |||
| @@ -740,7 +740,7 @@ static struct task_struct* cedf_schedule(struct task_struct * prev) | |||
| 740 | struct task_struct* next = NULL; | 740 | struct task_struct* next = NULL; |
| 741 | 741 | ||
| 742 | #ifdef CONFIG_LITMUS_LOCKING | 742 | #ifdef CONFIG_LITMUS_LOCKING |
| 743 | int priodon, reeval; | 743 | int priodon; |
| 744 | #else | 744 | #else |
| 745 | #define priodon 0 | 745 | #define priodon 0 |
| 746 | #endif | 746 | #endif |
| @@ -823,20 +823,25 @@ static struct task_struct* cedf_schedule(struct task_struct * prev) | |||
| 823 | */ | 823 | */ |
| 824 | 824 | ||
| 825 | if (!entry->linked) { | 825 | if (!entry->linked) { |
| 826 | struct task_struct *pulled = __take_ready(&cluster->domain); | ||
| 827 | #ifdef CONFIG_LITMUS_LOCKING | 826 | #ifdef CONFIG_LITMUS_LOCKING |
| 828 | if (pulled && !is_pending(pulled)) { | 827 | struct task_struct *pulled; |
| 829 | /* Pulled an un-processed task from the ready queue. | 828 | int reeval; |
| 830 | * Since this job was ready but not yet processed, it | 829 | do { |
| 831 | * cannot be a priority donor. So we should never | 830 | pulled = __take_ready(&cluster->domain); |
| 832 | * have to re-evaluate. | 831 | reeval = 0; |
| 833 | */ | 832 | if (pulled && !is_pending(pulled)) { |
| 834 | TRACE_TASK(pulled, "pulled unprocessed\n"); | 833 | /* Pulled an un-processed task from the ready queue. */ |
| 835 | reeval = update_pending_job(cluster, pulled); | 834 | TRACE_TASK(pulled, "pulled unprocessed\n"); |
| 836 | BUG_ON(reeval); | 835 | reeval = update_pending_job(cluster, pulled); |
| 837 | } | 836 | if (reeval) |
| 838 | #endif | 837 | /* priority may have changed --- try again */ |
| 838 | requeue(pulled); | ||
| 839 | } | ||
| 840 | } while (reeval); | ||
| 839 | link_task_to_cpu(pulled, entry); | 841 | link_task_to_cpu(pulled, entry); |
| 842 | #else | ||
| 843 | link_task_to_cpu(__take_ready(&cluster->domain), entry); | ||
| 844 | #endif | ||
| 840 | } | 845 | } |
| 841 | 846 | ||
| 842 | /* The final scheduling decision. Do we need to switch for some reason? | 847 | /* The final scheduling decision. Do we need to switch for some reason? |
