aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/lantiq/ltq-adsl/patches/140-linux_3.18.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/kernel/lantiq/ltq-adsl/patches/140-linux_3.18.patch')
-rw-r--r--package/kernel/lantiq/ltq-adsl/patches/140-linux_3.18.patch40
1 files changed, 40 insertions, 0 deletions
diff --git a/package/kernel/lantiq/ltq-adsl/patches/140-linux_3.18.patch b/package/kernel/lantiq/ltq-adsl/patches/140-linux_3.18.patch
new file mode 100644
index 0000000..80f0854
--- /dev/null
+++ b/package/kernel/lantiq/ltq-adsl/patches/140-linux_3.18.patch
@@ -0,0 +1,40 @@
+--- a/src/include/drv_dsl_cpe_os_linux.h
++++ b/src/include/drv_dsl_cpe_os_linux.h
+@@ -214,12 +214,35 @@ static inline int dsl_mutex_lock(struct
+ #define DSL_DRV_MUTEX_LOCK(id) down_interruptible(&(id))
+ #define DSL_DRV_MUTEX_UNLOCK(id) up(&(id))
+ #endif
++
++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;
++}
++
+ #define DSL_DRV_INIT_WAKELIST(name,queue) init_waitqueue_head(&(queue))
+ #define DSL_DRV_WAKEUP_WAKELIST(queue) wake_up_interruptible(&(queue))
+ #define DSL_DRV_INIT_EVENT(name,ev) init_waitqueue_head(&(ev))
+ /* wait for an event, timeout is measured in ms */
+-#define DSL_DRV_WAIT_EVENT_TIMEOUT(ev,t) interruptible_sleep_on_timeout(&(ev), (t) * HZ / 1000)
+-#define DSL_DRV_WAIT_EVENT(ev) interruptible_sleep_on(&(ev))
++#define DSL_DRV_WAIT_EVENT_TIMEOUT(ev,t) ugly_hack_sleep_on_timeout(&(ev), (t) * HZ / 1000)
++#define DSL_DRV_WAIT_EVENT(ev) ugly_hack_sleep_on_timeout(&(ev), MAX_SCHEDULE_TIMEOUT)
+ #define DSL_DRV_WAKEUP_EVENT(ev) wake_up_interruptible(&(ev))
+ #define DSL_DRV_TimeMSecGet() DSL_DRV_ElapsedTimeMSecGet(0)
+ #define DSL_WAIT(ms) msleep(ms)