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)