diff options
author | Bjoern Brandenburg <bbb@mpi-sws.org> | 2015-08-09 07:18:55 -0400 |
---|---|---|
committer | Bjoern Brandenburg <bbb@mpi-sws.org> | 2015-08-09 07:20:35 -0400 |
commit | 2a45e01a8827379c709d228a5c9b5f21011d4277 (patch) | |
tree | 8bfd7342ecd5ec6cb7063e95847ef7efa36d7a0b /litmus/fp_common.c | |
parent | 02da1bac9739050917862c82bdc75c3a0eb43179 (diff) |
Add P-FP scheduler plugin
Diffstat (limited to 'litmus/fp_common.c')
-rw-r--r-- | litmus/fp_common.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/litmus/fp_common.c b/litmus/fp_common.c index 964a4729deff..ff0f30a9f536 100644 --- a/litmus/fp_common.c +++ b/litmus/fp_common.c | |||
@@ -32,7 +32,6 @@ int fp_higher_prio(struct task_struct* first, | |||
32 | return 0; | 32 | return 0; |
33 | } | 33 | } |
34 | 34 | ||
35 | |||
36 | /* check for NULL tasks */ | 35 | /* check for NULL tasks */ |
37 | if (!first || !second) | 36 | if (!first || !second) |
38 | return first && !second; | 37 | return first && !second; |
@@ -50,6 +49,15 @@ int fp_higher_prio(struct task_struct* first, | |||
50 | if (unlikely(second->rt_param.inh_task)) | 49 | if (unlikely(second->rt_param.inh_task)) |
51 | second_task = second->rt_param.inh_task; | 50 | second_task = second->rt_param.inh_task; |
52 | 51 | ||
52 | /* Comparisons to itself are only possible with | ||
53 | * priority inheritance when svc_preempt interrupt just | ||
54 | * before scheduling (and everything that could follow in the | ||
55 | * ready queue). Always favour the original job, as that one will just | ||
56 | * suspend itself to resolve this. | ||
57 | */ | ||
58 | if(first_task == second_task) | ||
59 | return first_task == first; | ||
60 | |||
53 | /* Check for priority boosting. Tie-break by start of boosting. | 61 | /* Check for priority boosting. Tie-break by start of boosting. |
54 | */ | 62 | */ |
55 | if (unlikely(is_priority_boosted(first_task))) { | 63 | if (unlikely(is_priority_boosted(first_task))) { |
@@ -65,11 +73,10 @@ int fp_higher_prio(struct task_struct* first, | |||
65 | /* second_task is boosted, first is not*/ | 73 | /* second_task is boosted, first is not*/ |
66 | return 0; | 74 | return 0; |
67 | 75 | ||
68 | #endif | 76 | #else |
69 | 77 | /* No locks, no priority inheritance, no comparisons to itself */ | |
70 | /* Comparisons to itself are not expected; priority inheritance | ||
71 | * should also not cause this to happen. */ | ||
72 | BUG_ON(first_task == second_task); | 78 | BUG_ON(first_task == second_task); |
79 | #endif | ||
73 | 80 | ||
74 | if (get_priority(first_task) < get_priority(second_task)) | 81 | if (get_priority(first_task) < get_priority(second_task)) |
75 | return 1; | 82 | return 1; |