[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4B814AB3.1030404@shipmail.org>
Date: Sun, 21 Feb 2010 16:01:07 +0100
From: Thomas Hellstrom <thomas@...pmail.org>
To: Rafał Miłecki <zajec5@...il.com>
CC: Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
dri-devel@...ts.sourceforge.net
Subject: Re: [PATCH][RFC] time: add wait_interruptible_timeout macro to sleep
(w. timeout) until wake_up
Rafał Miłecki wrote:
> Signed-off-by: Rafał Miłecki <zajec5@...il.com>
> ---
> We try to implement some PM in radeon KMS and we need to sync with VLBANK for
> reclocking engine/memory. The easiest and cleanest way seems to be sleeping in
> timer handler just before reclocking. Then our IRQ handler calls wake_up and we
> continue reclocking.
>
> As you see our sleeping is condition-less, we just wait for waking up queue.
>
> We hope this waking will happen from IRQ handler, but for less-happy case we
> also use some timeout (this will probably cause some single corruption, but
> we can live with it).
>
> Following macro is soemthing that seems to work fine for us, but instead
> introducing this to radeon KMS only, I'd like to propose adding this to whole
> wait.h. Do you this it's something we should place there? Can someone take this
> patch for me? Or maybe you find this rather useless and we should keep this
> marco locally?
> ---
> include/linux/wait.h | 25 +++++++++++++++++++++++++
> 1 files changed, 25 insertions(+), 0 deletions(-)
>
> diff --git a/include/linux/wait.h b/include/linux/wait.h
> index a48e16b..998475b 100644
> --- a/include/linux/wait.h
> +++ b/include/linux/wait.h
> @@ -332,6 +332,31 @@ do { \
> __ret; \
> })
>
> +/**
> + * wait_interruptible_timeout - sleep until a waitqueue is woken up
> + * @wq: the waitqueue to wait on
> + * @timeout: timeout, in jiffies
> + *
> + * The process is put to sleep (TASK_INTERRUPTIBLE) until the waitqueue
> + * @wq is woken up. It can be done manually with wake_up or will happen
> + * if timeout elapses.
> + *
> + * The function returns 0 if the @timeout elapsed, remaining jiffies
> + * if workqueue was waken up earlier.
> + */
> +#define wait_interruptible_timeout(wq, timeout) \
> +({ \
> + long __ret = timeout; \
> + \
> + DEFINE_WAIT(__wait); \
> + prepare_to_wait(&wq, &__wait, TASK_INTERRUPTIBLE); \
> + if (!signal_pending(current)) \
> + __ret = schedule_timeout(__ret); \
> + finish_wait(&wq, &__wait); \
> + \
> + __ret; \
> +})
> +
> #define __wait_event_interruptible_exclusive(wq, condition, ret) \
> do { \
> DEFINE_WAIT(__wait); \
>
What about msleep_interruptible in <linux/delay.h> ?
/Thomas
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists