aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTanya Amert <tamert@cs.unc.edu>2020-10-14 21:07:19 -0400
committerTanya Amert <tamert@cs.unc.edu>2020-10-14 21:07:19 -0400
commit69b88f7b7d51582c6def81a32760d1f957a9675f (patch)
tree8d4582f9b94e8007e648a153e2318408b76fd729
parent543a6532f42d9d085967dd4855a65a099438dd1c (diff)
Added final step of priority inheritance.omlp
-rw-r--r--litmus/reservations/ext_reservation.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/litmus/reservations/ext_reservation.c b/litmus/reservations/ext_reservation.c
index ad8bc7238631..0e02b8f2f877 100644
--- a/litmus/reservations/ext_reservation.c
+++ b/litmus/reservations/ext_reservation.c
@@ -21,6 +21,18 @@ int higher_res_prio(struct reservation* first,
21 if (!first || !second) 21 if (!first || !second)
22 return first && !second; 22 return first && !second;
23 23
24#ifdef CONFIG_LITMUS_LOCKING
25
26 /* Check for inherited priorities. Change reservation
27 * used for comparison in such a case.
28 */
29 if (unlikely(first->inh_res))
30 first_task = first->inh_res;
31 if (unlikely(second->inh_res))
32 second_task = second->inh_res;
33
34#endif
35
24 if (first_task->priority > second_task->priority) { 36 if (first_task->priority > second_task->priority) {
25 return 1; 37 return 1;
26 } 38 }
@@ -29,6 +41,16 @@ int higher_res_prio(struct reservation* first,
29 if (first_task->id < second_task->id) { 41 if (first_task->id < second_task->id) {
30 return 1; 42 return 1;
31 } 43 }
44#ifdef CONFIG_LITMUS_LOCKING
45 else if (first_task->id == second_task->id) {
46 /* If the PIDs are the same then the task with the
47 * inherited priority wins.
48 */
49 if (!second->inh_res) {
50 return 1;
51 }
52 }
53#endif
32 } 54 }
33 //TODO: TAKE INTO ACCOUNT INH_TASK WHEN DOING PRIO COMPARISONS 55 //TODO: TAKE INTO ACCOUNT INH_TASK WHEN DOING PRIO COMPARISONS
34 return 0; /* fall-through. prio(second_task) > prio(first_task) */ 56 return 0; /* fall-through. prio(second_task) > prio(first_task) */