[Mesa-dev] [PATCH 6/7] i965: Copy anv_clflush_range helper to brw_context.h.

Kenneth Graunke kenneth at whitecape.org
Tue Jan 17 07:14:16 UTC 2017


I want to do explicit clflushes in the GL driver as well.

Jason and I figured this was small enough that we may as well just copy
and paste it for now, as we don't have a decent common location for both
drivers.

Irritatingly, because we include brw_context.h in C++ code, we have
to use char * instead of void * to avoid piles of GCC warnings from
-Wpointer-arith.  In GNU C it works fine.

Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
---
 src/mesa/drivers/dri/i965/brw_context.h | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h
index aa1499a1fe1..b032d511a1e 100644
--- a/src/mesa/drivers/dri/i965/brw_context.h
+++ b/src/mesa/drivers/dri/i965/brw_context.h
@@ -1203,6 +1203,22 @@ struct brw_context
    struct intel_screen *screen;
 };
 
+#define CACHELINE_SIZE 64
+#define CACHELINE_MASK 63
+
+static inline void
+brw_clflush_range(void *start, size_t size)
+{
+   char *p = (char *) (((uintptr_t) start) & ~CACHELINE_MASK);
+   char *end = (char *) start + size;
+
+   __builtin_ia32_mfence();
+   while (p < end) {
+      __builtin_ia32_clflush(p);
+      p += CACHELINE_SIZE;
+   }
+}
+
 /* brw_clear.c */
 extern void intelInitClearFuncs(struct dd_function_table *functions);
 
-- 
2.11.0



More information about the mesa-dev mailing list