X-Git-Url: http://git.ozo.com/?a=blobdiff_plain;f=package%2Fkernel%2Flantiq%2Fltq-adsl-mei%2Fsrc%2Fifxmips_mei_interface.h;h=1098b2b7936b593701cce0e3319d89cac6935d65;hb=40716f6aca7ec0437bf736822eec436deba36aee;hp=4ddc4c6aed4476eaa3915d68faad39a13f09cb7f;hpb=4ebf19b48fafc8d94e14e4ba779969613b241a6a;p=lede-git%2F.git diff --git a/package/kernel/lantiq/ltq-adsl-mei/src/ifxmips_mei_interface.h b/package/kernel/lantiq/ltq-adsl-mei/src/ifxmips_mei_interface.h index 4ddc4c6aed..1098b2b793 100644 --- a/package/kernel/lantiq/ltq-adsl-mei/src/ifxmips_mei_interface.h +++ b/package/kernel/lantiq/ltq-adsl-mei/src/ifxmips_mei_interface.h @@ -107,9 +107,31 @@ typedef enum { #define MEI_INIT_WAKELIST(name,queue) \ init_waitqueue_head(&queue) +static inline long +ugly_hack_sleep_on_timeout(wait_queue_head_t *q, long timeout) +{ + unsigned long flags; + wait_queue_t wait; + + init_waitqueue_entry(&wait, current); + + __set_current_state(TASK_INTERRUPTIBLE); + spin_lock_irqsave(&q->lock, flags); + __add_wait_queue(q, &wait); + spin_unlock(&q->lock); + + timeout = schedule_timeout(timeout); + + spin_lock_irq(&q->lock); + __remove_wait_queue(q, &wait); + spin_unlock_irqrestore(&q->lock, flags); + + return timeout; +} + /* wait for an event, timeout is measured in ms */ #define MEI_WAIT_EVENT_TIMEOUT(ev,timeout)\ - interruptible_sleep_on_timeout(&ev,timeout * HZ / 1000) + ugly_hack_sleep_on_timeout(&ev, timeout * HZ / 1000) #define MEI_WAKEUP_EVENT(ev)\ wake_up_interruptible(&ev) #endif /* IFX_MEI_BSP */