From 4949f3abba5d80805c69ec91dfbff8dc83b3bd62 Mon Sep 17 00:00:00 2001 From: Christian Prochaska Date: Tue, 9 Aug 2016 14:26:31 +0200 Subject: [PATCH] dde_linux: '__wait_event()' fix Fixes #2054 --- repos/dde_linux/src/include/lx_emul/impl/completion.h | 10 +++++----- repos/dde_linux/src/include/lx_emul/work.h | 3 ++- repos/dde_linux/src/lib/lxip/lxcc_emul.cc | 6 +++--- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/repos/dde_linux/src/include/lx_emul/impl/completion.h b/repos/dde_linux/src/include/lx_emul/impl/completion.h index 9e148274f4..43438c1ebb 100644 --- a/repos/dde_linux/src/include/lx_emul/impl/completion.h +++ b/repos/dde_linux/src/include/lx_emul/impl/completion.h @@ -68,13 +68,13 @@ void wake_up_interruptible_sync_poll(wait_queue_head_t *wq, int) } -void __wait_event(wait_queue_head_t wq) +void ___wait_event(wait_queue_head_t *wq) { - Wait_list *list = static_cast(wq.list); + Wait_list *list = static_cast(wq->list); if (!list) { - PWRN("__wait_event():dd empty list in wq: %p", &wq); - init_waitqueue_head(&wq); - list = static_cast(wq.list); + PWRN("__wait_event(): empty list in wq: %p", wq); + init_waitqueue_head(wq); + list = static_cast(wq->list); } Lx::Task *task = Lx::scheduler().current(); diff --git a/repos/dde_linux/src/include/lx_emul/work.h b/repos/dde_linux/src/include/lx_emul/work.h index 559ebd0606..9bc6c6608e 100644 --- a/repos/dde_linux/src/include/lx_emul/work.h +++ b/repos/dde_linux/src/include/lx_emul/work.h @@ -186,8 +186,9 @@ void add_wait_queue_exclusive(wait_queue_head_t *, wait_queue_t *); void remove_wait_queue(wait_queue_head_t *, wait_queue_t *); /* our wait event implementation - it's okay as value */ -void __wait_event(wait_queue_head_t); +void ___wait_event(wait_queue_head_t*); +#define __wait_event(wq) ___wait_event(&wq) #define _wait_event(wq, condition) while (!(condition)) { __wait_event(wq); } #define wait_event(wq, condition) ({ _wait_event(wq, condition); }) #define wait_event_interruptible(wq, condition) ({ _wait_event(wq, condition); 0; }) diff --git a/repos/dde_linux/src/lib/lxip/lxcc_emul.cc b/repos/dde_linux/src/lib/lxip/lxcc_emul.cc index 7d650f46bb..e440da8f21 100644 --- a/repos/dde_linux/src/lib/lxip/lxcc_emul.cc +++ b/repos/dde_linux/src/lib/lxip/lxcc_emul.cc @@ -287,7 +287,7 @@ struct Timeout : Genode::Signal_dispatcher }; -static void __wait_event(signed long timeout) +static void wait_for_timeout(signed long timeout) { static Timer::Connection timer; Timeout to(timer, timeout); @@ -307,7 +307,7 @@ long schedule_timeout_uninterruptible(signed long timeout) signed long schedule_timeout(signed long timeout) { long start = jiffies; - __wait_event(timeout); + wait_for_timeout(timeout); timeout -= jiffies - start; return timeout < 0 ? 0 : timeout; } @@ -315,7 +315,7 @@ signed long schedule_timeout(signed long timeout) void poll_wait(struct file * filp, wait_queue_head_t * wait_address, poll_table *p) { - __wait_event(0); + wait_for_timeout(0); }