drm/i915: Busy-spin wait_for condition in atomic contexts
authorChris Wilson <chris@chris-wilson.co.uk>
Thu, 24 Mar 2011 11:37:03 +0000 (11:37 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Thu, 31 Mar 2011 08:31:12 +0000 (09:31 +0100)
During modesetting, we need to wait for the hardware to report
readiness by polling the registers. Normally, we call msleep() between
reads, because some state changes may take a whole vblank or more
to complete. However during a panic, we are in an atomic context and
cannot sleep. Instead, busy spin polling the termination condition.

References: https://bugzilla.kernel.org/show_bug.cgi?id=31772
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Keith Packard <keithp@keithp.com>
Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org>
drivers/gpu/drm/i915/intel_drv.h

index 5daa991cb28733149da4402b51ff01964731bc46..f5b0d8306d8372142f8c649f815a170d348be99e 100644 (file)
@@ -39,7 +39,7 @@
                        ret__ = -ETIMEDOUT;                             \
                        break;                                          \
                }                                                       \
-               if (W && !in_dbg_master()) msleep(W);                   \
+               if (W && !(in_atomic() || in_dbg_master())) msleep(W);  \
        }                                                               \
        ret__;                                                          \
 })