diff options
Diffstat (limited to 'litmus')
-rw-r--r-- | litmus/locking.c | 12 | ||||
-rw-r--r-- | litmus/sched_gsn_edf.c | 4 | ||||
-rw-r--r-- | litmus/sched_psn_edf.c | 6 |
3 files changed, 9 insertions, 13 deletions
diff --git a/litmus/locking.c b/litmus/locking.c index 728b56835cf7..2693f1aca859 100644 --- a/litmus/locking.c +++ b/litmus/locking.c | |||
@@ -107,16 +107,18 @@ asmlinkage long sys_litmus_unlock(int lock_od) | |||
107 | return err; | 107 | return err; |
108 | } | 108 | } |
109 | 109 | ||
110 | struct task_struct* waitqueue_first(wait_queue_head_t *wq) | 110 | struct task_struct* __waitqueue_remove_first(wait_queue_head_t *wq) |
111 | { | 111 | { |
112 | wait_queue_t *q; | 112 | wait_queue_t* q; |
113 | struct task_struct* t = NULL; | ||
113 | 114 | ||
114 | if (waitqueue_active(wq)) { | 115 | if (waitqueue_active(wq)) { |
115 | q = list_entry(wq->task_list.next, | 116 | q = list_entry(wq->task_list.next, |
116 | wait_queue_t, task_list); | 117 | wait_queue_t, task_list); |
117 | return (struct task_struct*) q->private; | 118 | t = (struct task_struct*) q->private; |
118 | } else | 119 | __remove_wait_queue(wq, q); |
119 | return NULL; | 120 | } |
121 | return(t); | ||
120 | } | 122 | } |
121 | 123 | ||
122 | 124 | ||
diff --git a/litmus/sched_gsn_edf.c b/litmus/sched_gsn_edf.c index c5c9600c33d8..08b8847ede97 100644 --- a/litmus/sched_gsn_edf.c +++ b/litmus/sched_gsn_edf.c | |||
@@ -776,8 +776,6 @@ int gsnedf_fmlp_lock(struct litmus_lock* l) | |||
776 | * ->owner. We can thus check it without acquiring the spin | 776 | * ->owner. We can thus check it without acquiring the spin |
777 | * lock. */ | 777 | * lock. */ |
778 | BUG_ON(sem->owner != t); | 778 | BUG_ON(sem->owner != t); |
779 | |||
780 | remove_wait_queue(&sem->wait, &wait); | ||
781 | } else { | 779 | } else { |
782 | /* it's ours now */ | 780 | /* it's ours now */ |
783 | sem->owner = t; | 781 | sem->owner = t; |
@@ -803,7 +801,7 @@ int gsnedf_fmlp_unlock(struct litmus_lock* l) | |||
803 | } | 801 | } |
804 | 802 | ||
805 | /* check if there are jobs waiting for this resource */ | 803 | /* check if there are jobs waiting for this resource */ |
806 | next = waitqueue_first(&sem->wait); | 804 | next = __waitqueue_remove_first(&sem->wait); |
807 | if (next) { | 805 | if (next) { |
808 | /* next becomes the resouce holder */ | 806 | /* next becomes the resouce holder */ |
809 | sem->owner = next; | 807 | sem->owner = next; |
diff --git a/litmus/sched_psn_edf.c b/litmus/sched_psn_edf.c index abb06fa53e3a..71c02409efa2 100644 --- a/litmus/sched_psn_edf.c +++ b/litmus/sched_psn_edf.c | |||
@@ -442,10 +442,6 @@ int psnedf_fmlp_lock(struct litmus_lock* l) | |||
442 | * ->owner. We can thus check it without acquiring the spin | 442 | * ->owner. We can thus check it without acquiring the spin |
443 | * lock. */ | 443 | * lock. */ |
444 | BUG_ON(sem->owner != t); | 444 | BUG_ON(sem->owner != t); |
445 | |||
446 | /* FIXME: could we punt the dequeuing to the previous job, | ||
447 | * which is holding the spinlock anyway? */ | ||
448 | remove_wait_queue(&sem->wait, &wait); | ||
449 | } else { | 445 | } else { |
450 | /* it's ours now */ | 446 | /* it's ours now */ |
451 | sem->owner = t; | 447 | sem->owner = t; |
@@ -478,7 +474,7 @@ int psnedf_fmlp_unlock(struct litmus_lock* l) | |||
478 | unboost_priority(t); | 474 | unboost_priority(t); |
479 | 475 | ||
480 | /* check if there are jobs waiting for this resource */ | 476 | /* check if there are jobs waiting for this resource */ |
481 | next = waitqueue_first(&sem->wait); | 477 | next = __waitqueue_remove_first(&sem->wait); |
482 | if (next) { | 478 | if (next) { |
483 | /* boost next job */ | 479 | /* boost next job */ |
484 | boost_priority(next); | 480 | boost_priority(next); |