drm/i915: use cpu_relax() in wait_for_atomic
authorBen Widawsky <ben@bwidawsk.net>
Sun, 2 Sep 2012 05:59:48 +0000 (22:59 -0700)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Mon, 3 Sep 2012 08:21:29 +0000 (10:21 +0200)
As part of the advice given to us from the hardware designers regarding
the maximum wait time on the forcewake handshake we need to move from us
granularity to ms granularity. In earlier patches to do this, Jani
noticed that wait_for_us was properly converted to use cpu_relax(), but
wait_for was not.

The issue has existed since the introduction of the macro:
commit 913d8d110078788c14812dce8bb62c37946821d2
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Sat Aug 7 11:01:35 2010 +0100

    drm/i915: Ensure that while(INREG()) are bounded (v2)

CC: Jani Nikula <jani.nikula@linux.intel.com>
Signed-off-by: Ben Widawsky <ben@bwidawsk.net>
Reviewed-by: Chris Wilson <chris@chris-wilson.oc.uk>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/intel_drv.h

index ee0beb4833fb0fb43dc1a91f6de6d6cedf4dfb78..3f7eefc5d9768b758cd38b3d16fcd9c8177c16fa 100644 (file)
                        ret__ = -ETIMEDOUT;                             \
                        break;                                          \
                }                                                       \
-               if (W && drm_can_sleep()) msleep(W);    \
+               if (W && drm_can_sleep())  {                            \
+                       msleep(W);                                      \
+               } else {                                                \
+                       cpu_relax();                                    \
+               }                                                       \
        }                                                               \
        ret__;                                                          \
 })