OSDN Git Service

drm/i915: Add compiler barrier to wait_for
authorMika Kuoppala <mika.kuoppala@linux.intel.com>
Mon, 23 Apr 2018 11:37:54 +0000 (14:37 +0300)
committerMika Kuoppala <mika.kuoppala@linux.intel.com>
Tue, 24 Apr 2018 12:46:27 +0000 (15:46 +0300)
We need to be careful to not let compiler evaluate
the expiration and the operation on it's terms.

Document and enforce that COND will be evaluated
before checking timeout expiration.

Suggested-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20180423113754.28424-2-mika.kuoppala@linux.intel.com
drivers/gpu/drm/i915/intel_drv.h

index 33ff263..58868b9 100644 (file)
@@ -56,6 +56,8 @@
        for (;;) {                                                      \
                const bool expired__ = ktime_after(ktime_get_raw(), end__); \
                OP;                                                     \
+               /* Guarantee COND check prior to timeout */             \
+               barrier();                                              \
                if (COND) {                                             \
                        ret__ = 0;                                      \
                        break;                                          \
@@ -96,6 +98,8 @@
                u64 now = local_clock(); \
                if (!(ATOMIC)) \
                        preempt_enable(); \
+               /* Guarantee COND check prior to timeout */ \
+               barrier(); \
                if (COND) { \
                        ret = 0; \
                        break; \