

Rather than use custom code in DRM_WAIT_ON() to do exactly
what wait_event_interruptible_timeout() does, use the function and just
change the return values appropriately.

Signed-off-by: Nishanth Aravamudan <nacc@us.ibm.com>
Signed-off-by: Domen Puncer <domen@coderock.org>
---


 kj-domen/drivers/char/drm/drm_os_linux.h |   27 +++++++--------------------
 1 files changed, 7 insertions(+), 20 deletions(-)

diff -puN drivers/char/drm/drm_os_linux.h~wait_event-drivers_char_drm_drm_os_linux.h drivers/char/drm/drm_os_linux.h
--- kj/drivers/char/drm/drm_os_linux.h~wait_event-drivers_char_drm_drm_os_linux.h	2005-04-05 12:57:08.000000000 +0200
+++ kj-domen/drivers/char/drm/drm_os_linux.h	2005-04-05 12:57:08.000000000 +0200
@@ -6,6 +6,7 @@
 
 #include <linux/interrupt.h>	/* For task queue support */
 #include <linux/delay.h>
+#include <linux/wait.h>
 
 /** File pointer type */
 #define DRMFILE                         struct file *
@@ -121,26 +122,12 @@ do { 									 \
 
 #define DRM_WAIT_ON( ret, queue, timeout, condition )		\
 do {								\
-	DECLARE_WAITQUEUE(entry, current);			\
-	unsigned long end = jiffies + (timeout);		\
-	add_wait_queue(&(queue), &entry);			\
-								\
-	for (;;) {						\
-		__set_current_state(TASK_INTERRUPTIBLE);	\
-		if (condition)					\
-			break;					\
-		if (time_after_eq(jiffies, end)) {		\
-			ret = -EBUSY;				\
-			break;					\
-		}						\
-		schedule_timeout((HZ/100 > 1) ? HZ/100 : 1);	\
-		if (signal_pending(current)) {			\
-			ret = -EINTR;				\
-			break;					\
-		}						\
-	}							\
-	__set_current_state(TASK_RUNNING);			\
-	remove_wait_queue(&(queue), &entry);			\
+	long __ret;						\
+	__ret = wait_event_interruptible_timeout(queue, condition, timeout); \
+	if (__ret == 0)						\
+		ret = -EBUSY;					\
+	else if (__ret == -ERESTARTSYS)				\
+		ret = -EINTR;					\
 } while (0)
 
 
_

