Messages in this thread Patch in this message | | | From | Anirban Sinha <> | Subject | Re: [PATCH]: correction: add a new wait_event_interruptible_timeout_modify helper | Date | Fri, 26 Sep 2008 00:11:42 -0700 |
| |
arrghh!!! my bad. corrected patch is pasted below:
Index: 2.6-git/include/linux/wait.h =================================================================== --- 2.6-git.orig/include/linux/wait.h 2008-06-20 21:21:11.000000000 -0700 +++ 2.6-git/include/linux/wait.h 2008-09-25 19:41:37.000000000 -0700 @@ -335,6 +335,55 @@ __ret; \ })
+#define __wait_event_interruptible_timeout_modify(wq, condition, ret, timeout) \ +do { \ + DEFINE_WAIT(__wait); \ + \ + for (;;) { \ + prepare_to_wait(&wq, &__wait, TASK_INTERRUPTIBLE); \ + if (condition) \ + break; \ + if (!signal_pending(current)) { \ + ret = schedule_timeout(ret); \ + timeout = ret; \ + if (!ret) \ + break; \ + continue; \ + } \ + ret = -ERESTARTSYS; \ + break; \ + } \ + finish_wait(&wq, &__wait); \ +} while (0) + +/** + * wait_event_interruptible_timeout_modify - sleep until a condition gets true or a timeout elapses. + * @wq: the waitqueue to wait on + * @condition: a C expression for the event to wait for + * @timeout: timeout, in jiffies + * + * The process is put to sleep (TASK_INTERRUPTIBLE) until the + * @condition evaluates to true or a signal is received. + * The @condition is checked each time the waitqueue @wq is woken up. + * + * wake_up() has to be called after changing any variable that could + * change the result of the wait condition. + * + * The function returns 0 if the @timeout elapsed, -ERESTARTSYS if it + * was interrupted by a signal, and the remaining jiffies otherwise + * if the condition evaluated to true before the timeout elapsed. + * It also modifies the @timeout value so that if the sleep is interrupted + * by a signal, the caller can call this helper again with the updated + * timeout. + */ +#define wait_event_interruptible_timeout_modify(wq, condition, timeout) \ +({ \ + long __ret = timeout; \ + if (!(condition)) \ + __wait_event_interruptible_timeout_modify(wq, condition, __ret, timeout); \ + __ret; \ +}) + #define __wait_event_interruptible_exclusive(wq, condition, ret) \ do { \ DEFINE_WAIT(__wait); \
| |