public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Add wait_event_timeout()
@ 2004-09-25  9:13 Russell King
  2004-09-25  9:42 ` Jon Masters
  0 siblings, 1 reply; 6+ messages in thread
From: Russell King @ 2004-09-25  9:13 UTC (permalink / raw)
  To: linux-kernel, akpm

There appears to be one case missing from the wait_event() family -
the uninterruptible timeout wait.  The following patch adds this.

This wait is particularly useful when (eg) you wish to pass work off
to an interrupt handler to perform, but also want to know if the
hardware has decided to go gaga under you.  You don't want to sit
around waiting for something that'll never happen - you want to go
and wack the gremlin which caused the failure and retry.

--- linux/include/linux/wait.h.orig	2004-09-21 13:07:07.000000000 +0100
+++ linux/include/linux/wait.h	2004-09-25 09:33:19.000000000 +0100
@@ -156,6 +156,29 @@
 	__wait_event(wq, condition);					\
 } while (0)
 
+#define __wait_event_timeout(wq, condition, ret)			\
+do {									\
+	DEFINE_WAIT(__wait);						\
+									\
+	for (;;) {							\
+		prepare_to_wait(&wq, &__wait, TASK_UNINTERRUPTIBLE);	\
+		if (condition)						\
+			break;						\
+		ret = schedule_timeout(ret);				\
+		if (!ret)						\
+			break;						\
+	}								\
+	finish_wait(&wq, &__wait);					\
+} while (0)
+
+#define wait_event_timeout(wq, condition, timeout)			\
+({									\
+	long __ret = timeout;						\
+	if (!(condition)) 						\
+		__wait_event_timeout(wq, condition, __ret);		\
+	__ret;								\
+})
+
 #define __wait_event_interruptible(wq, condition, ret)			\
 do {									\
 	DEFINE_WAIT(__wait);						\


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2004-09-25  9:56 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-09-25  9:13 Add wait_event_timeout() Russell King
2004-09-25  9:42 ` Jon Masters
2004-09-25  9:44   ` Jon Masters
2004-09-25  9:44   ` William Lee Irwin III
2004-09-25  9:52     ` Jon Masters
2004-09-25  9:56   ` Russell King

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox