anv: Add an invalidate_range helper
authorJason Ekstrand <jason.ekstrand@intel.com>
Mon, 20 Feb 2017 18:18:57 +0000 (10:18 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Tue, 21 Feb 2017 20:26:35 +0000 (12:26 -0800)
This is similar to clflush_range except that it puts the mfence on the
other side to ensure caches are flushed prior to reading.

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Cc: "13.0 17.0" <mesa-stable@lists.freedesktop.org>
src/intel/vulkan/anv_private.h

index cd35eba26685d6fe81d99980517b58f6685d9ec4..c36fdcf75b4d1bd2c73afd007eace8aa0827f57b 100644 (file)
@@ -448,6 +448,19 @@ anv_clflush_range(void *start, size_t size)
    }
 }
 
+static inline void
+anv_invalidate_range(void *start, size_t size)
+{
+   void *p = (void *) (((uintptr_t) start) & ~CACHELINE_MASK);
+   void *end = start + size;
+
+   while (p < end) {
+      __builtin_ia32_clflush(p);
+      p += CACHELINE_SIZE;
+   }
+   __builtin_ia32_mfence();
+}
+
 static void inline
 anv_state_clflush(struct anv_state state)
 {