diff -urN linux.orig/include/linux/sched.h linux.diff/include/linux/sched.h --- linux.orig/include/linux/sched.h Fri Jan 11 15:29:58 2002 +++ linux.diff/include/linux/sched.h Fri Jan 11 19:18:40 2002 @@ -779,6 +779,7 @@ extern void FASTCALL(add_wait_queue(wait_queue_head_t *q, wait_queue_t * wait)); extern void FASTCALL(add_wait_queue_exclusive(wait_queue_head_t *q, wait_queue_t * wait)); +extern void FASTCALL(add_wait_queue_exclusive_lifo(wait_queue_head_t *q, wait_queue_t * wait)); extern void FASTCALL(remove_wait_queue(wait_queue_head_t *q, wait_queue_t * wait)); #define __wait_event(wq, condition) \ diff -urN linux.orig/kernel/fork.c linux.diff/kernel/fork.c --- linux.orig/kernel/fork.c Fri Jan 11 15:29:58 2002 +++ linux.diff/kernel/fork.c Fri Jan 11 19:18:40 2002 @@ -46,6 +46,16 @@ wq_write_unlock_irqrestore(&q->lock, flags); } +void add_wait_queue_exclusive_lifo(wait_queue_head_t *q, wait_queue_t * wait) +{ + unsigned long flags; + + wq_write_lock_irqsave(&q->lock, flags); + wait->flags = WQ_FLAG_EXCLUSIVE; + __add_wait_queue(q, wait); + wq_write_unlock_irqrestore(&q->lock, flags); +} + void add_wait_queue_exclusive(wait_queue_head_t *q, wait_queue_t * wait) { unsigned long flags;