Module Name:    src
Committed By:   riastradh
Date:           Fri Apr 25 18:38:54 UTC 2014

Modified Files:
        src/sys/external/bsd/drm2/dist/drm/i915: intel_drv.h

Log Message:
Adapt Linux i915 wait_for to use DELAY so it works while cold.

Adapted from a patch by nonaka@ in PR 48706.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/sys/external/bsd/drm2/dist/drm/i915/intel_drv.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/external/bsd/drm2/dist/drm/i915/intel_drv.h
diff -u src/sys/external/bsd/drm2/dist/drm/i915/intel_drv.h:1.2 src/sys/external/bsd/drm2/dist/drm/i915/intel_drv.h:1.3
--- src/sys/external/bsd/drm2/dist/drm/i915/intel_drv.h:1.2	Tue Mar 18 18:20:42 2014
+++ src/sys/external/bsd/drm2/dist/drm/i915/intel_drv.h	Fri Apr 25 18:38:54 2014
@@ -34,6 +34,59 @@
 #include <drm/drm_fb_helper.h>
 #include <drm/drm_dp_helper.h>
 
+#ifdef __NetBSD__
+#define _wait_for(COND, MS, W) ({ \
+	int ret__ = 0;							\
+	if (cold) {							\
+		int ms = (MS);						\
+		while (!(COND)) {					\
+			if (--ms < 0) {					\
+				ret__ = -ETIMEDOUT;			\
+				break;					\
+			}						\
+			DELAY(1000);					\
+		}							\
+	} else {							\
+		unsigned long timeout__ = jiffies + msecs_to_jiffies(MS); \
+		while (!(COND)) {					\
+			if (time_after(jiffies, timeout__)) {		\
+				ret__ = -ETIMEDOUT;			\
+				break;					\
+			}						\
+			if ((W) && drm_can_sleep())  {			\
+				msleep(W);				\
+			} else {					\
+				cpu_relax();				\
+			}						\
+		}							\
+	}								\
+	ret__;								\
+})
+
+#define wait_for_atomic_us(COND, US) ({ \
+	int ret__ = 0;							\
+	if (cold) {							\
+		int us = (US);						\
+		while (!(COND)) {					\
+			if (--us < 0) {					\
+				ret__ = -ETIMEDOUT;			\
+				break;					\
+			}						\
+			DELAY(1);					\
+		}							\
+	} else {							\
+		unsigned long timeout__ = jiffies + usecs_to_jiffies(US); \
+		while (!(COND)) {					\
+			if (time_after(jiffies, timeout__)) {		\
+				ret__ = -ETIMEDOUT;			\
+				break;					\
+			}						\
+			cpu_relax();					\
+		}							\
+	}								\
+	ret__;								\
+})
+#else	/* !NetBSD */
 #define _wait_for(COND, MS, W) ({ \
 	unsigned long timeout__ = jiffies + msecs_to_jiffies(MS);	\
 	int ret__ = 0;							\
@@ -63,6 +116,7 @@
 	}								\
 	ret__;								\
 })
+#endif	/* NetBSD */
 
 #define wait_for(COND, MS) _wait_for(COND, MS, 1)
 #define wait_for_atomic(COND, MS) _wait_for(COND, MS, 0)

Reply via email to