X-Git-Url: http://git.onelab.eu/?p=linux-2.6.git;a=blobdiff_plain;f=kernel%2Fwait.c;fp=kernel%2Fwait.c;h=59a82f63275df037dd5bfb1062cffe317a698383;hp=5cdf169d7c2317ff05298c7aa329bb6766554277;hb=16c70f8c1b54b61c3b951b6fb220df250fe09b32;hpb=4e76c8a9fa413ccc09d3f7f664183dcce3555d57 diff --git a/kernel/wait.c b/kernel/wait.c index 5cdf169d7..59a82f632 100644 --- a/kernel/wait.c +++ b/kernel/wait.c @@ -3,7 +3,6 @@ * * (C) 2004 William Irwin, Oracle */ -#include #include #include #include @@ -11,6 +10,14 @@ #include #include +void init_waitqueue_head(wait_queue_head_t *q) +{ + spin_lock_init(&q->lock); + INIT_LIST_HEAD(&q->task_list); +} + +EXPORT_SYMBOL(init_waitqueue_head); + void fastcall add_wait_queue(wait_queue_head_t *q, wait_queue_t *wait) { unsigned long flags; @@ -33,35 +40,13 @@ void fastcall add_wait_queue_exclusive(wait_queue_head_t *q, wait_queue_t *wait) } EXPORT_SYMBOL(add_wait_queue_exclusive); -int fastcall remove_wait_queue(wait_queue_head_t *q, wait_queue_t *wait) +void fastcall remove_wait_queue(wait_queue_head_t *q, wait_queue_t *wait) { unsigned long flags; - struct list_head *list; - int seen, retval; spin_lock_irqsave(&q->lock, flags); - list = &q->task_list; - seen = 0; - retval = -1; - - do { - struct list_head *next; - if (list == &wait->task_list) - seen++; - next = list->next; - if (next->prev != list) { - seen += 2; - break; - } - list = next; - } while (list != &q->task_list); - - if (seen == 1) { - __remove_wait_queue(q, wait); - retval = 0; - } + __remove_wait_queue(q, wait); spin_unlock_irqrestore(&q->lock, flags); - return retval; } EXPORT_SYMBOL(remove_wait_queue);